【发布时间】:2014-07-04 10:22:48
【问题描述】:
我正在对约 100 万个项目(每个项目表示为约 100 个特征向量)运行 k-means 聚类。我已经对各种 k 运行了聚类,现在想用 sklearn 中实现的轮廓分数来评估不同的结果。尝试在没有采样的情况下运行它似乎不可行并且需要很长时间,所以我认为我需要使用采样,即:
metrics.silhouette_score(feature_matrix, cluster_labels, metric='euclidean',sample_size=???)
但是,我不太清楚什么是合适的抽样方法。考虑到我的矩阵大小,是否有经验法则来使用什么大小的样本?是取我的分析机器可以处理的最大样本,还是取更多更小的样本的平均值更好?
我之所以这么问,很大程度上是因为我的初步测试(sample_size=10000)产生了一些非常不直观的结果。
我也愿意接受其他更可扩展的评估指标。
编辑以可视化问题:该图显示,对于不同的样本大小,轮廓分数作为集群数量的函数
不奇怪的是,增加样本量似乎可以减少噪音。奇怪的是,考虑到我有 100 万个非常异质的向量,2 或 3 是“最佳”集群数。换句话说,不直观的是,随着聚类数量的增加,我会发现轮廓分数或多或少单调下降。
【问题讨论】:
-
定义不直观的结果,并尝试使用不同的样本大小多次重新运行该测试。
-
运行代码以生成清晰的图。将尽快编辑和发布。
-
那些剪影分数很低。具有强聚类结构的数据会给你高于 0.7 左右的轮廓分数。您是否尝试过使用 Gap Statistic 来估计正确的集群数量?另一种可能性是 100 个特征中的一些正在添加噪声并隐藏集群。您可以尝试 PCA 来消除一些噪音。
-
我也遇到过类似的问题。当我增加聚类数量时,
sklearn.metrics.silhouette_score计算的轮廓分数单调下降,我不知道为什么会这样 -
@asado23 还没有,但我阅读了一篇讨论主要内部验证措施的论文,请参阅 Understanding the Internal Clustering Validation Measures 并将
silhouette score替换为SDbw,这被证明是其中最强大的索引纸
标签: python scikit-learn cluster-analysis