为什么 sklearn.cluster.AgglomerativeClustering 不给我们合并后的集群之间的距离?
Why doesn't sklearn.cluster.AgglomerativeClustering give us the distances between the merged clusters?
我正在使用 sklearn.cluster.AgglomerativeClustering
。它从每个数据点一个集群开始,然后迭代地将两个 "closest" 集群合并在一起,从而形成一棵二叉树。簇间距离的构成取决于连锁参数。
了解每一步合并的集群之间的距离会很有用。当下一个要合并的集群相距太远时,我们可以停止。唉,AgglomerativeClustering
.
好像没有
我错过了什么吗?有没有办法恢复距离?
您可能想看看 scipy.cluster.hierarchy
,它提供的选项比 sklearn.cluster.AgglomerativeClustering
多一些。
聚类是通过 linkage
函数完成的,该函数 returns 包含合并后的聚类之间距离的矩阵。这些可以用树状图可视化:
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()
可以根据各种标准从连锁矩阵形成扁平聚类,例如观测距离:
clusters = fcluster(Z, 5, criterion='distance')
Scipy 的层次聚类在 here.
中进行了更详细的讨论
当这个问题最初被问及另一个答案发布时,sklearn 没有暴露距离。然而,它现在确实如此,如 this example 中所示
和 this answer 类似的问题。
我正在使用 sklearn.cluster.AgglomerativeClustering
。它从每个数据点一个集群开始,然后迭代地将两个 "closest" 集群合并在一起,从而形成一棵二叉树。簇间距离的构成取决于连锁参数。
了解每一步合并的集群之间的距离会很有用。当下一个要合并的集群相距太远时,我们可以停止。唉,AgglomerativeClustering
.
我错过了什么吗?有没有办法恢复距离?
您可能想看看 scipy.cluster.hierarchy
,它提供的选项比 sklearn.cluster.AgglomerativeClustering
多一些。
聚类是通过 linkage
函数完成的,该函数 returns 包含合并后的聚类之间距离的矩阵。这些可以用树状图可视化:
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()
可以根据各种标准从连锁矩阵形成扁平聚类,例如观测距离:
clusters = fcluster(Z, 5, criterion='distance')
Scipy 的层次聚类在 here.
中进行了更详细的讨论当这个问题最初被问及另一个答案发布时,sklearn 没有暴露距离。然而,它现在确实如此,如 this example 中所示 和 this answer 类似的问题。