【问题标题】:How to read contents of scipy hierarchy cluster如何读取 scipy 层次集群的内容
【发布时间】:2021-07-26 05:55:48
【问题描述】:

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

我有两个问题:

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

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

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))

我想检索每个集群的原始数据点。

【问题讨论】:

  • 请修复您的代码
  • 我更新了代码。

标签: python scipy hierarchical-clustering


【解决方案1】:

根据您的数据

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)
  • 元素 2 与聚类元素 6(前一个),距离 16.667 和 4 个元素(这个聚类将被称为 7)
  • 元素 3 和集群元素 7(前一个),距离 271.5 和 5 个元素

【讨论】:

  • 感谢您的回答!现在很有意义!!那么如何推断出第一个簇将被称为 5,只有链接矩阵作为输入数据?
  • YVW。第一个集群将被称为 5(在这种情况下),因为您有 5 个元素 {0,1,2,3,4}。所以“下一个可用名称”是 5。第二个集群将被称为 6,依此类推,直到第 p 个集群。所以,假设你有 n 个元素,第 p 个簇将被称为 (n-1)+p,其中 p=[1,2,...]。仅使用链接矩阵,您可以看到 5 是一个簇名称(即使您不知道元素的数量),因为它包含两个以上的元素。
  • 抱歉,我的意思是“因为它已经被集群在其中的集群有超过 2 个元素”
猜你喜欢
  • 2014-07-21
  • 2017-10-06
  • 2017-07-04
  • 2018-09-21
  • 2013-11-22
  • 2016-02-17
  • 2012-03-10
  • 1970-01-01
相关资源
最近更新 更多