python机器学习实战之K均值聚类
本文实例为大家分享了pythonK均值聚类的具体代码,供大家参考,具体内容如下
#-*-coding:utf-8-*-
#!/usr/bin/python
'''''
kMeansK均值聚类
'''
#测试
#K均值聚类importkMeansasKMKM.kMeansTest()
#二分K均值聚类importkMeansasKMKM.biKMeansTest()
#地理位置二分K均值聚类importkMeansasKMKM.clusterClubs()
fromnumpyimport*
#导入数据集
defloadDataSet(fileName):#
dataMat=[]#
fr=open(fileName)
forlineinfr.readlines():#每一行
curLine=line.strip().split('\t')#按Tab键分割成列表
fltLine=map(float,curLine)#映射成浮点型
dataMat.append(fltLine)#放入数据集里
returndataMat
#计算欧几里的距离
defdistEclud(vecA,vecB):
returnsqrt(sum(power(vecA-vecB,2)))#la.norm(vecA-vecB)
#初始构建质心(随机)数据集质心个数
defrandCent(dataSet,k):
n=shape(dataSet)[1]#样本特征维度
centroids=mat(zeros((k,n)))#初始化k个质心
forjinrange(n):#每种样本特征
minJ=min(dataSet[:,j])#每种样本特征最小值需要转换成numpy的mat
rangeJ=float(max(dataSet[:,j])-minJ)#每种样本特征的幅值范围
centroids[:,j]=mat(minJ+rangeJ*random.rand(k,1))
#在每种样本的最大值和最小值间随机生成K个样本特征值
returncentroids
#简单k均值聚类算法
#数据集中心数量距离算法初始聚类中心算法
defkMeans(dataSet,k,distMeas=distEclud,createCent=randCent):
m=shape(dataSet)[0]#样本个数
clusterAssment=mat(zeros((m,2)))#样本标记分配结果第一列索引第二列误差
centroids=createCent(dataSet,k)#初始聚类中心
clusterChanged=True#设置质心是否仍然发送变化
whileclusterChanged:
clusterChanged=False
foriinrange(m):#对每个样本计算最近的中心
#更新样本所属关系
minDist=inf;minIndex=-1#距离变量以及最近的中心索引
forjinrange(k):#对每个中心
distJI=distMeas(centroids[j,:],dataSet[i,:])#计算距离
ifdistJI','<']
axprops=dict(xticks=[],yticks=[])
ax0=fig.add_axes(rect,label='ax0',**axprops)#轴
imgP=plt.imread('Portland.png')#标注在实际的图片上
ax0.imshow(imgP)
ax1=fig.add_axes(rect,label='ax1',frameon=False)
foriinrange(numClust):#每一个中心
ptsInCurrCluster=datMat[nonzero(clustAssing[:,0].A==i)[0],:]#属于每个中心的样本点
markerStyle=scatterMarkers[i%len(scatterMarkers)]#点的类型画图
#散点图每个中心的样本点
ax1.scatter(ptsInCurrCluster[:,0].flatten().A[0],ptsInCurrCluster[:,1].flatten().A[0],marker=markerStyle,s=90)
#散点图每个中心
ax1.scatter(myCentroids[:,0].flatten().A[0],myCentroids[:,1].flatten().A[0],marker='+',s=300)
plt.show()#显示
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。