Python 如何读取scipy层次结构集群的内容
我有下面的代码,我用它进行分层聚类。我的数据对象是我先前计算的相似距离数组。我认为我正确地执行了集群。我以为我可以得到集群的叶子,但当我将其与原始输入进行比较时,我得到了一个不匹配的结果 我这里有两个问题: 为什么集群的叶子和实际输入数据不匹配 如何通过链接矩阵或clusternodes从簇中提取原始数据Python 如何读取scipy层次结构集群的内容,python,scipy,hierarchical-clustering,Python,Scipy,Hierarchical Clustering,我有下面的代码,我用它进行分层聚类。我的数据对象是我先前计算的相似距离数组。我认为我正确地执行了集群。我以为我可以得到集群的叶子,但当我将其与原始输入进行比较时,我得到了一个不匹配的结果 我这里有两个问题: 为什么集群的叶子和实际输入数据不匹配 如何通过链接矩阵或clusternodes从簇中提取原始数据 import numpy as np import pandas import scipy.cluster.hierarchy as sch def list_difference(list
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);
通过分析链接矩阵,我们可以确认
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,在具有2个元素的簇中距离为1(该簇将称为5)
- 元素4和聚集元素5(上一个),距离为5.5和3个元素(此群集称为6)
- 元素2和聚集元素6(上一个),距离为16.667和4个元素(此群集称为7)
- 元素3与群集元素7(上一个),距离271.5和5个元素