python 数据框中单链接的层次聚类
hierarchical clustering with single linkage in python dataframe
我有一个 pandas 数据框来进行层次聚类。
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)
我有一个 pandas 数据框来进行层次聚类。
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)