一、算法原理
k-均值算法是一种无监督学习算法。在输入数据集中不包括标签,通过k-均值算法为每个样本添加标签,相同标签样本具有共同特征。
对于数据集D={x1,x2,...,xm},划分为k个簇C1,C2,...,Ck。对象与该簇的距离用dist(p,Ci)表示,其中dist(x,y)是两点x和y之间的欧式距离。最小化平方差
也就是对于每个簇中的每个对象,求对象到簇中心距离的平方,然后求和。E越小说明簇越紧凑,聚类效果越好。
k-均值算法流程如下:
(1)先在D中随机选取k个对象,作为k个簇的初始值;
(2)对剩下的每个对象,按照欧氏距离最小原则,将它分配到最相似的一个簇(用距离刻画);
(3)重新计算每个簇的均值作为新的聚类中心
(4)重复(2)(3)步骤,直到中心值不再变化或者变化很小时,聚类完成。
输入:
k:簇的数目
D:包含n个对象的数据集
输出:k个簇的集合
方法:
(1)从D中任意选择k个对象作为初始簇中心;
(2)repeat
(3) 根据簇中对象的均值,将每个对>象分配到最相似的簇;
(4) 更新簇均值,即重新计算每个簇中对象的均值;
(5)util不在发生变化;
2、代码部分
import numpy as np
def loadDataSet(fileName): #general function to parse tab -delimited floats
dataMat = [] #assume last column is target value
fr = open(fileName)
for line in fr.readlines():
curLine = line.strip().split('\t')
#fltLine = map(flo