我有一个熊猫数据框来进行分层聚类。
A B C
A 0 1 3
B 1 0 2
C 3 2 0
我尝试的代码:
z=linkage(df,'single')
dn = dendrogram(z,labels=index)
然后我得到一个奇怪的结果:A&B作为距离为1.73的群集(正确应为1),然后A&B&C作为距离为3.46的群集(正确应为2)。
scipy.cluster.hierarchy.linkage
中使用的默认距离是欧几里德距离,定义为d(x,y) = \sqrt(\sum(x_i-y_i))
(您可以将其检查为here)。我认为您感到困惑的原因是因为您正在取平均值(并计算均方根误差)。所以您的情况是d(A,B) = \sqrt(3) = 1.73
然后,由于您的连锁是single
,因此(A,B)与C之间的距离是d(A,C)与d(B,C)之间的最小值,即d(B,C) = \sqrt(12)