DaT*_*omB 6 artificial-intelligence cluster-analysis machine-learning unsupervised-learning scikit-learn
关于确定数据集中群集数量的维基百科文章表明,在使用层次聚类时,我不需要担心这样的问题.然而,当我尝试使用scikit-learn的 凝聚聚类时,我发现我必须将聚类的数量作为参数"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_]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1534 次 |
| 最近记录: |