如果您在Python中使用scipy进行此分层聚类调用:
from scipy.cluster.hierarchy import linkage
# dist_matrix is long form distance matrix
linkage_matrix = linkage(squareform(dist_matrix), linkage_method)
Run Code Online (Sandbox Code Playgroud)
那么从单个点到集群分配的有效方法是什么?即一个长度的矢量,N其中N是点的数量,其中每个条目i是点的簇数i,给定在给定的聚类上由给定阈值thresh生成的聚类数?
澄清一下:群集号将是在向树应用阈值后所处的群集.在这种情况下,您将为其所在的集群的每个叶节点获得一个唯一的集群.从某种意义上说,每个点都属于一个"最具体的集群",它由您剪切树形图的阈值定义.
我知道这scipy.cluster.hierarchy.fclusterdata会给你这个集群赋值作为它的返回值,但我从自定义距离矩阵和距离度量开始,所以我不能使用fclusterdata.问题归结为:我如何计算什么fclusterdata是计算 - 集群分配?
我对这个模块(scipy.cluster.hierarchy)感到困惑......还有一些!
例如,我们有以下树形图:

我的问题是如何以一种漂亮的格式提取彩色子树(每个子树代表一个簇),比如SIF格式?现在获得上述情节的代码是:
import scipy
import scipy.cluster.hierarchy as sch
import matplotlib.pylab as plt
scipy.randn(100,2)
d = sch.distance.pdist(X)
Z= sch.linkage(d,method='complete')
P =sch.dendrogram(Z)
plt.savefig('plot_dendrogram.png')
T = sch.fcluster(Z, 0.5*d.max(), 'distance')
#array([4, 5, 3, 2, 2, 3, 5, 2, 2, 5, 2, 2, 2, 3, 2, 3, 2, 5, 4, 5, 2, 5, 2,
# 3, 3, 3, 1, 3, 4, 2, 2, 4, 2, 4, 3, 3, 2, 5, 5, 5, 3, 2, 2, 2, 5, 4,
# 2, 4, 2, 2, 5, …Run Code Online (Sandbox Code Playgroud) 所以我使用快速集群和SciPy进行凝聚聚类.我可以做到dendrogram聚类的树形图.我可以fcluster(Z, sqrt(D.max()), 'distance')为我的数据获得一个非常好的聚类.如果我想手动检查树形图中的区域,例如k = 3(簇),然后我想检查k = 6(簇),该怎么办?如何在树形图的特定级别获得聚类?
我看到所有这些函数都有公差,但我不明白如何从容差转换为集群数.我可以通过链接(Z)手动构建聚类,并逐步拼凑聚类,但这对大型数据集来说并不实用.