聚类是一种无监督学习,它将相似的对象归到同一个簇中,有点像全自动分类。聚类方法几乎可以应用于所有对象,簇内的对象越相似,聚类的效果越好。聚类与分类的最大不同在于,分类的目标事先已知,而聚类则不一样。因为其产生的结果与分类相同,而只是类别没有预先定义,聚类有时也成为无监督分类。相似这一概念取决于所选择的相似度计算方法。
K-均值算法的工作流程是:首先随机确定K个初始点作为质点。然后将数据集中的每个点分配到一个簇中,具体来说,为每个点找距其最近的质心,并将其分配给该质心所对应的簇。这一步完成之后,每个簇的质心更新为该簇所有点的平均值。
程序清单1-1:K-均值聚类辅助函数
def loadDataSet(filename):
dataMat = []
fr = open(filename)
for line in fr.readlines():
curLine = line.strip().split('\t')
fltLine = map(float,curLine)
dataMat.append(fltLine)
return dataMat
loadDataSet函数将文本文件导入到一个列表中。strip移除字符串头尾指定的字符,split指定分隔符对字符串进行切片;map(function,sequence[…,sequence,…])对sequence中的item依次执行function(item),执行结果输出为list。每一个列表会被添加到dataMat中,最后返回dataMat。该返回值是一个包含许多其他列表的列表。
def disEclud(vecA,vecB):
return s