机器学习实战Py3.x填坑记10—利用K-均值聚类算法对未标注数

2017-02-06  本文已影响776人  瘦长的丰一禾

本章内容:
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-均值聚类的结果示意图。


P188页 图10-1

运行程序清单10-3 二分K-均值聚类算法之后调用showCluster()函数可以产生如书上P193页10-3图:


P193页 图10-3

参考链接:
《机器学习实战》之K-均值聚类算法的python实现
《机器学习实战》之二分K-均值聚类算法的python实现
机器学习算法与Python实践之(五)k均值聚类(k-means)
《机器学习实战》kMeans算法(K均值聚类算法)
《机器学习实战》笔记之十——利用K均值聚类算法对未标注数据分组
利用K-均值聚类算法对未标注数据分组

上一篇下一篇

猜你喜欢

热点阅读