1.背景

        无监督学习的定义就不多说了,不懂得可以google。因为项目需要,需要进行无监督的分类学习。
        K-means里面的K指的是将数据分成的份数,基本上用的就是算距离的方法。
        大致的思路就是给定一个矩阵,假设K的值是2,也就是分成两个部分,那么我们首先确定两个质心。一开始是找矩阵每一列的最大值max,最小值min,算出range=max-min,然后设质心就是min+range*random。之后在逐渐递归跟进,其实要想明白还是要跟一遍代码,自己每一步都输出一下看看跟自己想象的是否一样。
(顺便吐槽一下,网上好多人在写文章的事后拿了书上的代码就粘贴上,也不管能不能用,博主改了一下午才改好。。。,各种bug)

2.代码

'''
@author: hakuri
'''
from numpy import *
import matplotlib.pyplot as plt
def loadDataSet(fileName):      #general function to parse tab -delimited floatsdataMat = []                #assume last column is target valuefr = open(fileName)for line in fr.readlines():curLine = line.strip().split('\t')fltLine = map(float,curLine) #map all elements to float()dataMat.append(fltLine)return dataMatdef distEclud(vecA, vecB):return sqrt(sum(power(vecA - vecB, 2))) #la.norm(vecA-vecB)def randCent(dataSet, k):n = shape(dataSet)[1]centroids = mat(zeros((k,n)))#create centroid matfor j in range(n):#create random cluster centers, within bounds of each dimensionminJ = min(array(dataSet)[:,j])rangeJ = float(max(array(dataSet)[:,j]) - minJ)centroids[:,j] = mat(minJ + rangeJ * random.rand(k,1))return centroidsdef kMeans(dataSet, k, distMeas=distEclud, createCent=randCent):m = shape(dataSet)[0]clusterAssment = mat(zeros((m,2)))#create mat to assign data points                                       #to a centroid, also holds SE of each pointcentroids = createCent(dataSet, k)clusterChanged = Truewhile clusterChanged:clusterChanged = Falsefor i in range(m):#for each data point assign it to the closest centroidminDist = inf; minIndex = -1for j in range(k):distJI = distMeas(array(centroids)[j,:],array(dataSet)[i,:])if distJI < minDist:minDist = distJI; minIndex = jif clusterAssment[i,0] != minIndex: clusterChanged = TrueclusterAssment[i,:] = minIndex,minDist**2print centroids
#         print nonzero(array(clusterAssment)[:,0]for cent in range(k):#recalculate centroidsptsInClust = dataSet[nonzero(array(clusterAssment)[:,0]==cent)[0][0]]#get all the point in this clustercentroids[cent,:] = mean(ptsInClust, axis=0) #assign centroid to mean id=nonzero(array(clusterAssment)[:,0]==cent)[0] return centroids, clusterAssment,iddef plotBestFit(dataSet,id,centroids):  dataArr = array(dataSet)cent=array(centroids)n = shape(dataArr)[0] n1=shape(cent)[0]xcord1 = []; ycord1 = []xcord2 = []; ycord2 = []xcord3=[];ycord3=[]j=0for i in range(n):if j in id:xcord1.append(dataArr[i,0]); ycord1.append(dataArr[i,1])else:xcord2.append(dataArr[i,0]); ycord2.append(dataArr[i,1])j=j+1 for k in range(n1):xcord3.append(cent[k,0]);ycord3.append(cent[k,1])    fig = plt.figure()ax = fig.add_subplot(111)ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')ax.scatter(xcord2, ycord2, s=30, c='green')ax.scatter(xcord3, ycord3, s=50, c='black')plt.xlabel('X1'); plt.ylabel('X2');plt.show()    if __name__=='__main__':dataSet=loadDataSet('/Users/hakuri/Desktop/testSet.txt')
# #     print randCent(dataSet,2)
#      print dataSet
#
#      print  kMeans(dataSet,2)a=[]b=[]a, b,id=kMeans(dataSet,2)plotBestFit(dataSet,id,a)

用的时候直接看最后的main,dataSet是数据集输入,我会在下载地址提供给大家。

kmeans函数第一个参数是输入矩阵、第二个是K的值,也就是分几份。
plotBestFit是画图函数,需要加plot库,而且目前只支持二维且K=2的情况。

3.效果图

      里面黑色的大点是两个质心,怎么样,效果还可以吧!测试的时候一定要多用一点数据才会明显。

4.下载地址

     我的github地址https://github.com/jimenbian,喜欢就点个starO(∩_∩)O哈!
     点我下载

/********************************

* 本文来自博客  “李博Garvin“

* 转载请标明出处:http://blog.csdn.net/buptgshengod

******************************************/

【机器学习算法-python实现】K-means无监督学习实现分类相关推荐

  1. 决策算法python_GitHub - nxety/MachineLearning_Python: 机器学习算法python实现

    机器学习算法Python实现 目录 1.代价函数 其中: 下面就是要求出theta,使代价最小,即代表我们拟合出来的方程距离真实值最近 共有m条数据,其中代表我们要拟合出来的方程到真实值距离的平方,平 ...

  2. 机器学习算法 | Python实现k-近邻算法

    机器学习算法 | Python实现k-近邻算法 目录 机器学习算法 | Python实现k-近邻算法 基本介绍 工作原理 程序设计 参考资料 基本介绍 KNN,全名k近邻算法.是⼀种⾮常简单有效的机器 ...

  3. ML机器学习算法(一): 基于逻辑回归的分类预测

    机器学习算法(一): 基于逻辑回归的分类预测 1 逻辑回归的介绍和应用 1.1 逻辑回归的介绍 逻辑回归(Logistic regression,简称LR)虽然其中带有"回归"两个 ...

  4. 机器学习算法(六):基于决策树的分类预测

    机器学习算法(六):基于决策树的分类预测 1 决策树的介绍和应用 1.1决策树的介绍 1.2 决策树的应用 2. 实验室手册 2.1 学习目标 2.2 代码流程 2.3 算法实战 2.3.1 Demo ...

  5. 机器学习算法(二):基于决策树的分类预测

    机器学习算法(二):基于决策树的分类预测 决策树的介绍和应用 简介 决策树构建的伪代码 特征划分选择 信息增益 信息增益率 基尼系数 应用场景 优缺点 基于企鹅数据集的决策树实战 Step1:函数库导 ...

  6. 【机器学习基础】(六):通俗易懂无监督学习K-Means聚类算法及代码实践

    K-Means是一种无监督学习方法,用于将无标签的数据集进行聚类.其中K指集群的数量,Means表示寻找集群中心点的手段. 一. 无监督学习 K-Means 贴标签是需要花钱的. 所以人们研究处理无标 ...

  7. 吴恩达机器学习(十一)K-means(无监督学习、聚类算法)

    目录 0. 前言 1. K-means的算法流程 2. 代价函数(优化目标函数) 3. K 的选择 学习完吴恩达老师机器学习课程的无监督学习,简单的做个笔记.文中部分描述属于个人消化后的理解,仅供参考 ...

  8. 【机器学习基础】数学推导+纯Python实现机器学习算法3:k近邻

    作为一种没有显式训练和学习过程的分类和回归算法,k 近邻在众多有监督机器学习算法中算是一种比较独特的方法.说它独特,是因为 k 近邻不像其他模型有损失函数.有优化算法.有训练过程.对于给定的实例数据和 ...

  9. 【机器学习】几种常见的无监督学习算法

    几种常见的无监督学习算法 1. PCA 降维是指在保留数据特征的前提下,以少量的变量表示有许多变量的数据,这有助于降低多变量数据分析的复杂度.减少数据变量的方法有两种:一种是只选择重要的变量,不使用其 ...

最新文章

  1. 线性基+树上倍增 ---- BZOJ4568[线性基+树上倍增]
  2. Android 四大组件之——Acitivity(四) Activity是如何加载显示内容的?
  3. 1.GD32F103配置环境,搭建工程
  4. es6—变量的解构赋值
  5. linux下使用select实现精确定时器
  6. myeclipse中文界面改颜色_“颜色识别器”安卓APP功能详细介绍
  7. MaxCompute命令行工具——odpscmd的操作使用
  8. 酷派D530刷机指引之官方ROM
  9. 恢复有道词典单词记录本的几种方法(非完美)
  10. 文件名变乱码. 不知道如何恢复呢?
  11. 【北交所周报】IPO上会5过5;四成个股实现上涨,硅烷科技涨56%,成单周涨幅最大个股;...
  12. PV、UV、IV的概念
  13. matlab 单边频率谱,matlab求单边功率谱
  14. 我国三大常用坐标系区别(北京54、西安80和WGS-84)(转)
  15. Day02 - CSS
  16. Python学校Day06
  17. eureka注册中心启动后访问,控制台出现socket read timeout exception
  18. xgboost Dmatrix label全为0 解决方法
  19. 解决UOS家庭版桌面图标消失,文件管理器进不去
  20. HTTP 403详解

热门文章

  1. java中的标识符和关键字_浅谈java中的标识符、修饰符和关键字
  2. python元组类型_什么是python元组数据类型
  3. mysql和mybatis面试题_2020年,MyBatis常见面试题总结
  4. matlab中if语句的用法_if语句的基本用法
  5. 不用python编程,制作词云图
  6. oracle修改表结构精度,常见问题--oracle10g修改表结构
  7. java 雷电_【我叫辰先森】教大家用js写一个雷电
  8. 运行 命令 linux,Linux基本命令运行
  9. pytho sin(1/x)震荡间断点
  10. 选哪扇门得奖金的算法