K-Means聚类
层次聚类给出了一个树作为结果,但是其不足之处:没有额外的工作,树形结构并不能真正将数据划分到独立的分组中,并且算法属于计算密集型任务。
因为每个item之间的距离需要计算,且合并之后,距离需要重算,所以当数据集非常大时,算法运行很缓慢。
层次聚类给出了一个树作为结果,但是其不足之处:没有额外的工作,树形结构并不能真正将数据划分到独立的分组中,并且算法属于计算密集型任务。
因为每个item之间的距离需要计算,且合并之后,距离需要重算,所以当数据集非常大时,算法运行很缓慢。
K-means聚类,不同于层次聚类,它事先告诉有多少个唯一的clust要生成。算法基于数据的结构来决定cluster的大小。
def kclustr(rows,distance=sim_pearson,k=4):
#取得向量每个维度中的最大、最小值
ranges=[(min(row[i] for row in rows),max(row[i] for row in rows))
for i in range(len(rows[0]))]
#创建k个随机位置中心(向量)
clusters=[[random.random() * (ranges[i][1] - ranges[i][0]) + ranges[i][0]
for i in range(len(rows[0]))] for j in range(k)]
lastmatches=None
for t in range(100):#最大迭代次数
bestmatch=[[] for i in range(k)]#
for j in range(len(rows)):
row = rows[j]
#分别计算row与随机clust的距离那个最近
bestmatch=0
for i in range(k):
d=distance(clusters[i],row)
if d<distance(clusters[bestmatch],row):bes