python - 如何在 scipy 创建的树状图中获得与颜色簇相对应的平面聚类

标签 python cluster-analysis scipy hierarchical hierarchical-clustering

使用发布的代码 here ,我创建了一个很好的层次聚类:

scipy dendrogram

假设左边的树状图是通过执行类似的操作创建的

Y = sch.linkage(D, method='average') # D is a distance matrix
cutoff = 0.5*max(Y[:,2])
Z = sch.dendrogram(Y, orientation='right', color_threshold=cutoff)

现在我如何获得每个彩色簇的成员的索引?为了简化这种情况,忽略顶部的簇,只关注左侧的树状图矩阵。

此信息应存储在树状图 Z 存储变量中。有一个函数可以做我想做的事情,叫做 fcluster (参见文档 here )。但是,我看不到在哪里可以为 fcluster 提供与创建树状图时指定的相同的 cutoff 。似乎 fclustert 中的阈值变量必须根据各种模糊测量(inconsistentdistancemaxclustmonocrit)。有任何想法吗?

最佳答案

我认为你在正确的轨道上。让我们试试这个:

import scipy
import scipy.cluster.hierarchy as sch
X = scipy.randn(100, 2)     # 100 2-dimensional observations
d = sch.distance.pdist(X)   # vector of (100 choose 2) pairwise distances
L = sch.linkage(d, method='complete')
ind = sch.fcluster(L, 0.5*d.max(), 'distance')

ind 将为您提供 100 个输入观察值中的每一个的聚类索引。 ind 取决于您在 linkage 中使用的 method。尝试 method=singlecompleteaverage。然后注意 ind 的不同之处。

例子:

In [59]: L = sch.linkage(d, method='complete')

In [60]: sch.fcluster(L, 0.5*d.max(), 'distance')
Out[60]: 
array([5, 4, 2, 2, 5, 5, 1, 5, 5, 2, 5, 2, 5, 5, 1, 1, 5, 5, 4, 2, 5, 2, 5,
       2, 5, 3, 5, 3, 5, 5, 5, 5, 5, 5, 5, 2, 2, 5, 5, 4, 1, 4, 5, 2, 1, 4,
       2, 4, 2, 2, 5, 5, 5, 2, 5, 5, 3, 5, 5, 4, 5, 4, 5, 3, 5, 3, 5, 5, 5,
       2, 3, 5, 5, 4, 5, 5, 2, 2, 5, 2, 2, 4, 1, 2, 1, 5, 2, 5, 5, 5, 1, 5,
       4, 2, 4, 5, 2, 4, 4, 2])

In [61]: L = sch.linkage(d, method='single')

In [62]: sch.fcluster(L, 0.5*d.max(), 'distance')
Out[62]: 
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1])

scipy.cluster.hierarchy 确实令人困惑。在您的链接中,我什至不认识自己的代码!

关于python - 如何在 scipy 创建的树状图中获得与颜色簇相对应的平面聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7664826/

相关文章:

Python多处理安全地写入文件

python - 从满足特定条件的 2D numpy 数组返回元素

algorithm - 如何找到一组数据点的中心?

r - 使用 k-means 在 R 中可视化大维簇

Numpy/Scipy - 稀疏矩阵到向量

python - 使用Docker容器运行django应用失败

python - 通过 Web 界面执行 Python 单元测试

c++ - 顺序/在线 kmeans 聚类,它是如何工作的?现有代码?

python - numpy - 使用 numpy 一维数组的置换副本构建二维数组的最快方法

python - 使用线性方程创建径向插值圆