sklearn Clustering:在大型数据集上确定最佳集群数量的最快方法
Posted
技术标签:
【中文标题】sklearn Clustering:在大型数据集上确定最佳集群数量的最快方法【英文标题】:sklearn Clustering: Fastest way to determine optimal number of cluster on large data sets 【发布时间】:2017-05-11 15:20:18 【问题描述】:我在 python 中使用来自 sklearn 的 KMeans 和 silhouette_score 来计算我的集群,但是在 >10.000 个样本和 >1000 个集群上计算剪影分数非常慢。
-
是否有更快的方法来确定最佳集群数?
或者我应该更改聚类算法吗?如果是,对于具有 >300.000 个样本和大量集群的数据集,哪种算法是最好的(也是最快的)?
【问题讨论】:
【参考方案1】:轮廓分数,虽然是更有吸引力的衡量标准之一,但 iw O(n^2)。这意味着,计算分数比计算 k-means 聚类要昂贵得多!
此外,这些分数只是启发式的。它们不会以任何方式产生“最佳”聚类。他们只给出了一个关于如何选择 k 的提示,但你经常会发现其他 k 更好!所以不要盲目相信这些分数。
【讨论】:
【参考方案2】:最常用的求聚类数的方法是肘曲线法。但这需要您多次运行 KMeans 算法来绘制图形。 https://en.wikipedia.org/wiki/Determining_the_number_of_clusters_in_a_data_set wiki 页面提到了一些确定集群数量的常用方法。
【讨论】:
您也可以使用不需要集群数量作为输入的算法。 DBSCAN 或 HDBSCAN 应该可以很好地适应您的数据集大小。 有没有办法用肘曲线法自动求簇数? 据我了解,一个程序应该能够提供基于肘曲线启发式的聚类数。以上是关于sklearn Clustering:在大型数据集上确定最佳集群数量的最快方法的主要内容,如果未能解决你的问题,请参考以下文章
用于大型数据集的 sklearn utils compute_class_weight 函数
python使用sklearn中的make_blobs函数生成聚类(clustering)分析需要的仿真数据matplotlib可视化生成的仿真数据
python使用sklearn中的make_blobs函数生成聚类(clustering)分析需要的仿真数据matplotlib可视化生成的仿真数据