determining the number of clusters in a dataset上的Wikipedia文章指出,使用分层群集时,我无需担心此类问题。但是,当我尝试使用scikit-learn的agglomerative clustering时,我看到必须将群集数作为参数“ n_clusters”提供给它-没有它,我将得到两个群集的硬编码默认值。在这种情况下,如何才能为数据集选择正确的聚类数量?维基文章错了吗?
Wikipedia只是在进行极端简化,与现实生活无关。分层集群无法避免集群数量问题。简单地-它构造了跨越[[所有样本的树,该树显示了哪些样本(后来出现在群集上)合并在一起以创建更大的群集。这会递归发生,直到只有两个聚类(这就是为什么聚类的默认数量为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_]
您可以检查这些方法是否对您有用。
https://joernhees.de/blog/2015/08/26/scipy-hierarchical-clustering-and-dendrogram-tutorial/