为什么 sklearn.cluster.AgglomerativeClustering 不给我们合并集群之间的距离?

Edu*_*rdo 2 hierarchical-clustering python-3.x scikit-learn

我正在使用sklearn.cluster.AgglomerativeClustering. 它从每个数据点一个集群开始,并迭代地将两个“最接近”的集群合并在一起,从而形成一棵二叉树。什么构成集群之间的距离取决于链接参数。

了解每一步合并集群之间的距离会很有用。当下一个要合并的集群相距太远时,我们可以停止。唉,这似乎在AgglomerativeClustering.

我错过了什么吗?有没有办法恢复距离?

σηγ*_*σηγ 6

您可能想看看scipy.cluster.hierarchy它提供的选项比sklearn.cluster.AgglomerativeClustering.

聚类是通过linkage函数完成的,该函数返回一个包含合并聚类之间距离的矩阵。这些可以用树状图进行可视化:

from scipy.cluster.hierarchy import linkage, fcluster, dendrogram
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

X, cl = make_blobs(n_samples=20, n_features=2, centers=3, cluster_std=0.5, random_state=0)
Z = linkage(X, method='ward')

plt.figure()
dendrogram(Z)
plt.show()
Run Code Online (Sandbox Code Playgroud)

树状图.png

可以根据各种标准(例如观察距离)从链接矩阵中形成平面聚类:

clusters = fcluster(Z, 5, criterion='distance')
Run Code Online (Sandbox Code Playgroud)

此处更详细地讨论了 Scipy 的层次聚类。