在使用scikit的分层聚集聚类中选择聚类的数量

问题描述 投票:6回答:2

determining the number of clusters in a dataset上的Wikipedia文章指出,使用分层群集时,我无需担心此类问题。但是,当我尝试使用scikit-learn的agglomerative clustering时,我看到必须将群集数作为参数“ n_clusters”提供给它-没有它,我将得到两个群集的硬编码默认值。在这种情况下,如何才能为数据集选择正确的聚类数量?维基文章错了吗?

machine-learning scikit-learn artificial-intelligence cluster-analysis unsupervised-learning
2个回答
5
投票

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_]

0
投票
ELKI(不是scikit-learn,而是Java)具有许多高级方法,可从分层聚类中提取聚类。它们比仅在特定高度切割树还聪明,但是例如,它们可以生成最小大小的簇层次结构。

您可以检查这些方法是否对您有用。


0
投票
也很难找出方法。这是有关分层集群的有用教程。最好从了解树状图以及如何切割群集树以确定群集编号开始。

https://joernhees.de/blog/2015/08/26/scipy-hierarchical-clustering-and-dendrogram-tutorial/

© www.soinside.com 2019 - 2024. All rights reserved.