《机器学习实战》1.K-Means聚类算法
来源:互联网 发布:中国招标网软件 编辑:程序博客网 时间:2024/06/06 03:11
1.聚类定义:无监督学习方法,它将相似的对象归到同一簇中,原型聚类算法的一种。
2.K-Means算法:首先,随机确定K个初始点作为质心(K个簇)。然后为每一个数据点找距离其最近的质心,将其分配到该质心所在的簇中,完成这一步之后,为计算该簇所有点的均值然后将均值更新为每一个簇的质心。迭代上述过程,直至簇分配结果不再改变,这样就算完成了K-Means聚类。
3.定义:
4.K-Means伪代码:
创建k个点作为起始质心(随机)当任意一个点的簇分配结果发生变化时 对数据集中的每一个数据点 对每一个质心 计算质心与数据点之间的距离 将数据点分配到与其距离最近的簇 对于每一个簇,计算簇中所有点的均值并将均值作为新质心
5.Python实现:from numpy import *def loadDataSet(fileName):dataMat = []fr = open(fileName)for line in fr.readlines():curLine = line.strip().split('\t')fltLine = map(float,curLine) #map()将所有元素转为浮点型dataMat.append(fltline)return dataMatdef distEclud(vecA,vecB):return sqrt(sum(power(vecA-vecB,2)))def randCent(dataSet,k):n = shape(dataSet)[1] #get the columscetorids = mat(zeros((k,n)))for j in range(n):minJ = min(dataSet[:,j])rangeJ = float(max(dataSet[:,j])-minJ)cetorids[:,j] = minJ+rangeJ*random .rand(k,1) #使得质心在数据集范围内return centoridsdef kMeans(dataSet, k, distMeas=distEclud, createCent=randCent): #四个参数:数据集,质心个数,距离和创建质心函数 m = shape(dataSet)[0] #得数据集的行数clusterAssment = mat(zeros((m,2))) #簇分布结果矩阵(用来存放数据点与质心的距离)centroids = createCent(dataSet, k) #质心clusterChanged = True #聚类完成标志while clusterChanged:clusterChanged = Falsefor i in range(m): #对每一个数据点minDist = inf;minIndex = -1for j in range(k): #对每一个质心distJI = distMeas(centroids[j,:],dataSet[i,:]) if distJI < minDist: minDist = distJI; minIndex = j # 分配数据给最近的质心 if clusterAssment[i,0] != minIndex: clusterChanged = True ##聚类分配结果矩阵改变,更新标志 clusterAssment[i,:] = minIndex,minDist**2 #更新值 print centroids for cent in range(k):#recalculate centroids ptsInClust = dataSet[nonzero(clusterAssment[:,0].A==cent)[0]]###(.A 得到clusterAssment[:,0]的属性)得到聚类所有的数据点
centroids[cent,:] = mean(ptslnClust,axis=0) #分配均值为质心 return centroids,clusterAssment
6.运行:在命令行中输入import kMeansfrom numpy import *datMat = mat(kMeans.loadDataSet('testSet.txt')).....reload(kMeans) #这一行是如果在此之前已将datMat数据复制过来之后,可以进行这个操作,否则就得重新download.myCentroids,clustAssing = kMeans.kMeans(datMat,4)
这个是只用作后期复习的笔记
centroids[cent,:] = mean(ptslnClust,axis=0) #分配均值为质心 return centroids,clusterAssment
6.运行:在命令行中输入import kMeansfrom numpy import *datMat = mat(kMeans.loadDataSet('testSet.txt')).....reload(kMeans) #这一行是如果在此之前已将datMat数据复制过来之后,可以进行这个操作,否则就得重新download.myCentroids,clustAssing = kMeans.kMeans(datMat,4)
这个是只用作后期复习的笔记阅读全文
0 0
- 《机器学习实战》1.K-Means聚类算法
- 机器学习:k-Means聚类算法
- 机器学习-K-means聚类算法
- 【机器学习实战之三】:C++实现K-均值(K-Means)聚类算法
- 机器学习实战之 第10章 K-Means(K-均值)聚类算法
- 【机器学习实战】第10章 K-Means(K-均值)聚类算法
- py2.7《机器学习实战》利用k-means聚类算法对未标数据分组
- 机器学习实战——python实现k-means聚类算法
- 【机器学习实战】第10章 K-Means(均值)聚类算法
- 机器学习算法 - k-means Clustering K均值聚类
- 机器学习--k均值聚类(k-means)算法
- 机器学习实战K-means
- 视觉机器学习算法之一k-means算法聚类
- 机器学习算法-k-means聚类算法
- 机器学习之聚类算法/Bisecting K-Means算法
- 动手写机器学习算法:K-Means聚类算法
- 【机器学习】K-means聚类算法原理学习
- 机器学习实战ByMatlab(三)K-means算法
- 一 分布式应用架构演进
- Docker
- Spring自定义事件
- Python的装饰器
- apue习题12.2实现
- 《机器学习实战》1.K-Means聚类算法
- C4D/MAYA导入Unity填坑以及C4D渲染自我心得
- android 图片加载框架-内存缓存
- 欢迎使用CSDN-markdown编辑器
- springMVC 基于jws的webservice建立
- WebApp开发-CORDOVA踩过的坑
- SRIO switch 调试
- android dialog圆角显示及解决出现的黑色棱角 .
- STM8 串口接收字符串问题