【发布时间】:2013-04-03 19:42:14
【问题描述】:
如果你在 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 正在计算的内容——集群分配?
【问题讨论】:
-
如果将 squareform(dist_matrix) 赋给 links(),则矩阵被视为观测值,聚类结果可能不正确。您可以将距离矩阵的压缩向量直接作为linkage()的输入。
-
您拥有的一个选项是在 Z 的距离(avg(Z[:,2] )列上取平均值。一旦您变得卑鄙,您就可以从那里削减。这不是通用方法,但你可以试试。
标签: python numpy scipy cluster-analysis