python - 如何读取 scipy 层次集群的内容
问题描述
我有以下代码,我用它来分层聚类。我的数据对象是我之前计算的相似距离数组。我认为我正在正确执行集群。我以为我可以得到集群的叶子,但是当我将它与原始输入进行比较时,我得到了不匹配的结果。
我在这里有两个问题:
为什么我的集群的叶子和我的实际输入数据不匹配?
如何通过链接矩阵或集群节点从集群中提取原始数据?
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)
- 元素 2 具有集群元素 6(前一个),距离 16.667 和 4 个元素(这个集群将被称为 7)
- 元素 3 与集群元素 7(前一个),距离 271.5 和 5 个元素
推荐阅读
- python - 将数据从 excel 加载到 pandas。只需要日期,不需要时间
- python - 如何循环将项目添加到列表中?
- webpack - 在构建时,babel-loader 输出一个 id 为 null 的模块对象 - webpack-command reports/parse throws
- python - sqlite3 不工作;无根; UNIX; Python3.8.11
- javascript - Switch遍历所有情况
- sql - JSON层次结构问题
- python - 如何处理动态 Xpath selenium 和 python
- javascript - React Native:如何触发 noOfDays 次 howOften 警报?
- apache-poi - 当我试图简单地打印行数 .xlsx 文件时出现 java.lang.NoClassDefFoundError
- tensorflow - KeyError:我创建的 CustomDataGenerator 类中的 0