本章内容:
K-均值聚类算法
对聚类得到的簇进行后处理
二分K-均值聚类算法
对地理位置进行聚类
在运行程序清单10-1的时候出现问题:
在运行完命令:datMat = mat(kMeans.loadDataSet('testSet.txt'))之后,查看了下datMat发现datMat都是类似于
<map object at 0x0000011F0FF1F400>的东西。
原因是fltLine = map(float, curLine)问题
于是对函数loadDataSet()进行更改,更改之后的函数如下:
def loadDataSet(fileName):
dataMat = []
fr = open(fileName)
for line in fr.readlines():
temp = [] #这一行为我自己加的
curLine = line.strip().split('\t'),
#fltLine = map(float, curLine) #书上代码
temp.append(float(curLine[0]))
temp.append(float(curLine[1]))
dataMat.append(temp)
return dataMat
在10.1节K-均值聚类算法中运行完程序清单10-2可以用matpoltlib来绘制图10-1。绘图代码在《机器学习实战》这本书书上未给出,绘图代码如下:
用来显示图10-1的代码
def showCluster(dataSet, k, centroids, clusterAssment):
m, dim = shape(dataSet)
if dim != 2:
print ("Sorry! i can not draw because the dimension of data is not 2!")
return 1
mark = ['or','ob','og','ok','^r','+r','sr','dr','<r','pr']
if k > len(mark):
print ("Sorry! Your k is too large!")
return 1
#draw all samples
for i in range(m):
markIndex = int(clusterAssment[i,0]) #为样本指定颜色
plt.plot(dataSet[i,0], dataSet[i,1], mark[markIndex])
mark = ['Dr', 'Db', 'Dg', 'Dk', '^b', '+b', 'sb', 'db', '<b', 'pb']
#draw the centroids
for i in range(k):
plt.plot(centroids[i,0], centroids[i,1], mark[i],marker= '+',color = 'red',markersize=18)
#用marker来指定质心样式,用color和markersize来指定颜色和大小
plt.show()
如下图,显示如本书P188页图10-1,K-均值聚类的结果示意图。
运行程序清单10-3 二分K-均值聚类算法之后调用showCluster()函数可以产生如书上P193页10-3图:
参考链接:
《机器学习实战》之K-均值聚类算法的python实现
《机器学习实战》之二分K-均值聚类算法的python实现
机器学习算法与Python实践之(五)k均值聚类(k-means)
《机器学习实战》kMeans算法(K均值聚类算法)
《机器学习实战》笔记之十——利用K均值聚类算法对未标注数据分组
利用K-均值聚类算法对未标注数据分组