关于 determining the number of clusters in a dataset 的维基百科文章表明我在使用层次聚类时不需要担心这样的问题。然而,当我尝试使用 scikit-learn 的 agglomerative clustering 时我发现我必须将簇的数量作为参数“n_clusters”提供给它 - 如果没有它,我就会得到两个簇的硬编码默认值。在这种情况下,我该如何为数据集选择正确数量的簇?维基文章有错吗?
最佳答案
维基百科只是进行了极端简化,与现实生活无关。分层聚类不能避免聚类数量问题。简单地说 - 它构建了跨越所有样本的树,它显示了哪些样本(稍后的集群)合并在一起以创建更大的集群。这种情况会递归发生,直到只有两个簇(这就是默认簇数为 2 的原因),它们被合并到整个数据集。您只需“切割”树即可获得实际的聚类。一旦适合 AgglomerativeClustering,您就可以遍历整个树并分析要保留哪些集群
import numpy as np
from sklearn.cluster import AgglomerativeClustering
import itertools
X = np.concatenate([np.random.randn(3, 10), np.random.randn(2, 10) + 100])
clustering = AgglomerativeClustering()
clustering.fit(X)
[{'node_id': next(itertools.count(X.shape[0])), 'left': x[0], 'right':x[1]} for x in clustering.children_]
关于machine-learning - 使用 scikit 选择层次凝聚聚类中的簇数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32222612/