machine-learning - 使用 scikit 选择层次凝聚聚类中的簇数

标签 machine-learning scikit-learn artificial-intelligence cluster-analysis unsupervised-learning

关于 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/

相关文章:

machine-learning - Word2Vec:维数

python - 尽管存在相关性,为什么 R2 为负?

c# - 无法理解ID3算法

artificial-intelligence - 绩效指标和效用函数有什么区别?

python - 使用 sklearn 找出错误率

machine-learning - xgboost get_fscore() 或 get_score() 返回更少的列数

python - Scikit-learn 决策树提取特征节点

python - CountVectorizer 忽略 'I'

python - Keras 代码 Q-learning OpenAI gym FrozenLake 有问题

python - 从图像中减去均值