gpt4 book ai didi

python - 在 sklearn 中使用 silhouette 分数进行高效的 k-means 评估

转载 作者:太空狗 更新时间:2023-10-29 20:29:22 28 4
gpt4 key购买 nike

我正在对约 100 万个项目(每个表示为一个约 100 个特征向量)运行 k-means 聚类。我已经为各种 k 运行了聚类,现在想用 sklearn 中实现的轮廓分数来评估不同的结果。尝试在没有采样的情况下运行它似乎不可行并且需要很长时间,所以我假设我需要使用采样,即:

metrics.silhouette_score(feature_matrix, cluster_labels, metric='euclidean',sample_size=???)

不过,我不太清楚什么是合适的抽样方法。给定矩阵的大小,是否有关于使用多大样本的经验法则?是取我的分析机可以处理的最大样本更好,还是取更多较小样本的平均值更好?

我之所以这样问,很大程度上是因为我的初步测试(使用 sample_size=10000)产生了一些非常不直观的结果。

我也愿意接受替代性的、更具扩展性的评估指标。


编辑以可视化问题:该图显示,对于不同的样本大小,剪影分数作为聚类数量的函数 enter image description here

并不奇怪的是,增加样本量似乎可以减少噪音。奇怪的是,鉴于我有 100 万个非常异质的向量,2 或 3 是“最佳”簇数。换句话说,不符合直觉的是,当我增加集群的数量时,我会发现剪影分数或多或少单调下降。

最佳答案

其他指标

  1. 弯头法:计算每个 K 解释的方差百分比,并选择图开始趋于平稳的 K。 (这里有一个很好的描述 https://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set )。显然,如果你有 k == 个数据点,你可以解释 100% 的方差。问题是解释的方差改进从哪里开始趋于平稳。

  2. 信息论:如果您可以计算给定 K 的可能性,则可以使用 AIC、AICc 或 BIC(或任何其他信息论方法)。例如。对于 AICc,它只是平衡了随着 K 的增加和所需参数数量的增加而增加的可能性。在实践中,您所做的就是选择最小化 AICc 的 K。

  3. 您可以通过运行替代方法(例如 DBSCAN)来获得大致合适的 K 值,这些方法可以返回对聚类数量的估计。虽然我还没有看到这种方法用于估计 K,但像这样依赖它可能是不可取的。但是,如果 DBSCAN 在这里也为您提供了少量集群,那么您的数据中可能存在您可能不满意的部分(即没有您期望的那么多集群)。

采样多少

看起来你已经从你的情节中回答了这个问题:无论你的采样是什么,你都会得到相同的剪影得分模式。因此,这种模式似乎对抽样假设非常稳健。

关于python - 在 sklearn 中使用 silhouette 分数进行高效的 k-means 评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23687247/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com