scipy 如何从链接/距离矩阵计算聚类分配

qvtsj1bj  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(173)

如果你在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正在计算的东西--集群分配?

e3bfsja2

e3bfsja21#

如果我没理解错的话,这就是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是阈值。

相关问题