24

如果你在 Python 的 scipy 中有这个层次聚类调用:

from scipy.cluster.hierarchy import linkage
# dist_matrix is long form distance matrix
linkage_matrix = linkage(squareform(dist_matrix), linkage_method)

那么从这个到集群分配的单个点的有效方法是什么?即一个长度向量,N其中N是点数,其中每个条目i是点的簇数i,给定由给定阈值thresh在结果聚类上生成的簇数?

澄清一下:集群编号将是它在对树应用阈值后所在的集群。在这种情况下,您将为所在集群的每个叶节点获得一个唯一的集群。在每个点属于一个“最具体的集群”的意义上,这是由您切割树状图的阈值定义的。

我知道这scipy.cluster.hierarchy.fclusterdata会给你这个集群分配作为它的返回值,但我是从定制的距离矩阵和距离度量开始的,所以我不能使用fclusterdata. 问题归结为:我如何计算fclusterdata正在计算的内容——集群分配?

4

2 回答 2

28

如果我理解正确,那就是fcluster的作用:

scipy.cluster.hierarchy.fcluster(Z, t, criterion='inconsistent', depth=2, R=None, monocrit=None)

从由链接矩阵 Z 定义的层次聚类形成平面聚类。

...

返回: 一个长度为 n 的数组。T[i] 是原始观测值 i 所属的平面簇数。

所以只要打电话fcluster(linkage_matrix, t)t你的门槛在哪里。

于 2013-04-15T19:18:18.137 回答
0

如果您想查看每个集群级别的成员以及它们的聚集顺序,请参阅https://stackoverflow.com/a/43170608/5728789

于 2017-04-02T16:28:38.943 回答