如何读取 scipy 层级集群的内容

How to read contents of scipy hierarchy cluster

我有以下代码用于分层聚类。我的数据对象是我之前计算的相似距离数组。我认为我正在正确执行集群。我以为我可以获得集群的叶子,但是当我将其与原始输入进行比较时,我发现不匹配。

我这里有两个问题:

为什么我的集群的叶子和我的实际输入数据不匹配?

如何通过链接矩阵或集群节点从集群中提取原始数据?

import numpy as np
import pandas
import scipy.cluster.hierarchy as sch

def list_difference(list1, list2):
    return [value for value in list1 if value not in list2]


if __name__ == '__main__':

    # example data for this questions purpose.
    data = [10, 11, 29, 288, 16]

    X = np.array([[i] for i in data])
    linkage_matrix = sch.average(X)
    rootnode, nodelist = sch.to_tree(linkage_matrix, rd=True)

    leaves = sch.leaves_list(linkage_matrix)
    print(list_difference(leaves, data))

我想检索每个聚类的原始数据点。

根据您的数据

data = [10, 11, 29, 288, 16]

结果与树状图兼容

sch.dendrogram(linkage_matrix);

分析linkage_matrix我们可以确认

print(linkage_matrix)

array([[  0.        ,   1.        ,   1.        ,   2.        ],
       [  4.        ,   5.        ,   5.5       ,   3.        ],
       [  2.        ,   6.        ,  16.66666667,   4.        ],
       [  3.        ,   7.        , 271.5       ,   5.        ]])

我们一行一行地

  • 元素 0 和元素 1,距离为 1 的簇中有 2 个元素(此簇将称为 5)
  • 元素 4 与聚类元素 5(前一个),距离 5.5 和 3 个元素(这个聚类将被称为 6)
  • 具有聚类元素 6(前一个)的元素 2,距离为 16.667 和 4 个元素(此聚类将称为 7)
  • 元素 3 与聚类元素 7(前一个),距离 271.5 和 5 个元素