当KMeans算法对大型数据集进行聚类时,为了找到K的最佳值,我们可以使用以下代码片段:
model = KMeans()
visualizer = KElbowVisualizer(model, k=(min_value, max_value), timings=False, locate_elbow=True)
visualizer.fit(data)
no_of_clusters= visualizer.elbow_value_
在这里,我们指定了应该在其中获得K值的范围(min_value和max_value(。对于大型数据集(例如:100万行(,我们如何找到这些范围的最佳组合,以便节省大量执行时间?
关于如何获得K的合理范围的好问题。有几个场景你想把你的问题放在那里。
场景1:我们知道业务上下文,即结果如何有用。比方说,如果我们试图将国家分为一些集群——发展中国家、发达国家和欠发达国家。在这里,我们知道了由业务驱动的价值的大致范围。在这种情况下,您可能会考虑将范围增加几个集群。
场景2:我们对集群的业务用途知之甚少。在这种情况下,您可以尝试对每个K值使用轮廓分数等指标,并在找到最大轮廓分数的值处停止。这里的一个小调整是每次将K的值增加2/3,而不是1,以防您正在查看的簇的数量在10的数量级。
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.silhouette_score.html
在回答这个问题之前,数据科学是你的直觉与试验&错误我们不是一次就能解决的。使用轮廓分数来评估K的最佳值。或一次使用3个值&计算轮廓分数&然后看看他们是否给了你好分数。
实际上决定集群主要取决于您的应用程序。
但就我而言,我遵循以下价值观:1.对于小数据和不太关键的应用程序:Kmin=2和Kmax=102.对于小数据和更关键的应用:Kmin=2,Kmax=max高达203.对于大数据和不太关键的应用程序:Kmin=2,Kmax=5-104.对于大数据和更关键的应用:Kmin=2和Kmax=10-15
无论如何,不要超过30岁。
对数据进行子采样。
K-means是基于means的。随着数据的增加,平均值的精度并没有提高多少。所以只要使用10k个物体就足够了。