Python 如何从sklearn.cluster.ward_树中可视化ward树?
在sklearn中,实现了一种凝聚聚类算法,即最小化方差的ward方法。通常sklearn有很多很好的使用示例,但是我找不到如何使用这个函数的示例 基本上,我的问题是根据数据的聚类绘制树状图,但我不理解函数的输出。表示它返回每个节点的子节点、组件数量、叶子数量和父节点 然而,对于我的数据样本来说,结果没有任何意义。对于已与连接矩阵聚集的(32542)矩阵,这是输出:Python 如何从sklearn.cluster.ward_树中可视化ward树?,python,machine-learning,scikit-learn,hierarchical-clustering,Python,Machine Learning,Scikit Learn,Hierarchical Clustering,在sklearn中,实现了一种凝聚聚类算法,即最小化方差的ward方法。通常sklearn有很多很好的使用示例,但是我找不到如何使用这个函数的示例 基本上,我的问题是根据数据的聚类绘制树状图,但我不理解函数的输出。表示它返回每个节点的子节点、组件数量、叶子数量和父节点 然而,对于我的数据样本来说,结果没有任何意义。对于已与连接矩阵聚集的(32542)矩阵,这是输出: >>> wt = ward_tree(mymat, connectivity=connectivity, n_c
>>> wt = ward_tree(mymat, connectivity=connectivity, n_clusters=2)
>>> mymat.shape
(32, 542)
>>> wt
(array([[16, 0],
[17, 1],
[18, 2],
[19, 3],
[20, 4],
[21, 5],
[22, 6],
[23, 7],
[24, 8],
[25, 9],
[26, 10],
[27, 11],
[28, 12],
[29, 13],
[30, 14],
[31, 15],
[34, 33],
[47, 46],
[41, 40],
[36, 35],
[45, 44],
[48, 32],
[50, 42],
[38, 37],
[52, 43],
[54, 39],
[53, 51],
[58, 55],
[56, 49],
[60, 57]]), 1, 32, array([32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 32,
33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 53, 48,
48, 51, 51, 55, 55, 57, 50, 50, 54, 56, 52, 52, 49, 49, 53, 60, 54,
58, 56, 58, 57, 59, 60, 61, 59, 59, 61, 61]))
在本例中,我要求使用两个集群,其中32个向量包含特征。但是这两个集群在数据中是如何可见的呢?他们在哪里?孩子们在这里的真正含义是什么,孩子们的数量怎么可能比样本总数还要多呢?关于输出的第一个参数,文档中说 每个非叶节点的子节点。小于n_个样本的值引用 到树的叶子。值i越大,表示节点具有 儿童[i-n_样本] 我在理解这意味着什么时遇到了一些困难,但这段代码起到了帮助。我们用两个“簇”生成正态分布数据,一个簇有3个平均值为0的数据点,另一个簇有2个平均值为100的数据点。因此,我们期望第一个数据点中的3个将在输出树的一个分支中结束,另2个将在另一个分支中结束
from sklearn.cluster import ward_tree
import numpy as np
import itertools
X = np.concatenate([np.random.randn(3, 10), np.random.randn(2, 10) + 100])
w = ward_tree(X)
ii = itertools.count(w[2])
[{'node_id': next(ii), 'left': x[0], 'right':x[1]} for x in w[0]]
这将生成树:
[{'node_id': 5, 'right': 2, 'left': 1},
{'node_id': 6, 'right': 4, 'left': 3},
{'node_id': 7, 'right': 5, 'left': 0},
{'node_id': 8, 'right': 7, 'left': 6}]
其中编号是节点id。如果node_id<5(样本数),则它是数据点(或叶节点)的索引。如果node_id>=5,则它是一个内部节点。我们看到数据集群如预期的那样:
8
/ \
7 \
/ \ \
5 \ 6
/ \ \ / \
1 2 0 3 4