层次聚类算法是对给定的数据集进行层次的分解,知道满足某种条件为止。这里我主要演示凝聚型层次聚类,凝聚型是有多个簇合并成较少的簇的过程,下面对算法进行讲解:
算法:Hieriachical
输入:数据集D
输出:各个簇的集合N
1.将每个对象归为一类, 共得到N类, 每类仅包含一个对象. 类与类之间的距离就是它们所包含的对象之间的距离.
2.找到最接近的两个类并合并成一类, 于是总的类数少了一个.
3.重新计算新的类与所有旧类之间的距离.
4.重复第2步和第3步, 直到最后合并成一个类为止(此类包含了N个对象).
源码分享:
def Hierachical(data):
min_dis = 10000
print data
while len(data) > 1: # 只要data中簇的个数大于1,就继续循环
for i in range(len(data)):
for j in range(i+1, len(data)):
a = data[i]
b = data[j]
ave_dis = Average_dis(data[i], da