我使用Python中的scikit-learn库中的KMeans算法和silhouette_score来计算聚类,但是在样本数量超过10,000并且有超过1,000个簇的情况下,计算silhouette_score非常缓慢。
- 是否有更快的方法来确定最佳聚类数?
- 或者我应该改变聚类算法?如果是这样,对于一个包含超过300,000个样本和很多簇的数据集来说,哪种算法是最好(也是最快)的?
我使用Python中的scikit-learn库中的KMeans算法和silhouette_score来计算聚类,但是在样本数量超过10,000并且有超过1,000个簇的情况下,计算silhouette_score非常缓慢。
轮廓系数是一种相对有吸引力的指标,但其时间复杂度为O(n^2)。这意味着,计算轮廓系数比计算k-means聚类要昂贵得多!
此外,这些分数仅是启发式的。它们无法通过任何方式产生“最佳”聚类。它们只是给出关于如何选择k的提示,但很常见的情况是其他k更好!因此,请不要盲目信任这些分数。
MiniBatchKmeans 是你可以尝试的流行选项之一 https://scikit-learn.org/stable/modules/generated/sklearn.cluster.MiniBatchKMeans.html