如果你在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
计算的内容 - 群集分配?
答案 0 :(得分:19)
如果我理解你,那就是fcluster所做的:
scipy.cluster.hierarchy.fcluster(Z, t, criterion='inconsistent', depth=2, R=None, monocrit=None)
从由链接矩阵Z定义的层次聚类中形成平面聚类。
...
返回:长度为n的数组。 T [i]是原始观察所属的平面簇编号。
所以只需致电fcluster(linkage_matrix, t)
,其中t
是您的门槛。
答案 1 :(得分:0)
如果您希望查看每个群集级别的成员以及他们聚集的顺序,请参阅https://stackoverflow.com/a/43170608/5728789