KMeans评估指标未收敛。这种情况是正常的吗?

我正在处理一个问题,需要在约125个不同的数据集上分别运行KMeans。因此,我希望为每个数据集数学上计算出“最优”的K值。然而,随着K值的增加,评估指标持续下降。

对于一个样本数据集,有50,000行和8列。我使用sklearn的calinski-harabaz得分,通过不同的K值进行迭代以寻找最佳/最小得分。然而,我的代码已经达到k=5,600,而calinski-harabaz得分仍在下降!

似乎有些奇怪的事情在发生。该指标是否不太有效?我的数据可能有问题吗(参见我的关于在PCA后按行标准化的提问)?是否有其他/更好的方法来数学上收敛到“最优”的K?还是我应该强迫自己在所有数据集中手动选择一个恒定的K?

任何额外的观点都会有所帮助。


回答:

总结

随着K的每次增加,指标都在下降;这强烈表明你的数据集上没有自然的聚类。

讨论

CH得分取决于簇内和簇间密度的比率。对于点分布相对平滑的情况,每次增加K都会得到密度略高的簇,簇间密度略低。尝试一个点的网格:改变半径并手动进行计算;你会看到这是如何工作的。在极端情况下,K = n:每个点都是自己的簇,具有无限密度,簇间密度为0。

其他指标

也许最简单的指标是平方和,它已经是聚类计算的一部分。将从质心到各点的距离的平方相加,除以n-1(n=簇人口),然后对所有簇进行加和/平均。

我正在寻找一篇特别讨论此问题的指标的论文;如果我能找到参考文献,我会更新这个答案。

注意:无论你选择哪个指标(如CH),未能找到局部最小值表明数据确实没有自然的聚类。

下一步该做什么?

以某种形式呈现你的数据,让能够可视化。如果看到自然的聚类,看看它的特征;你是如何看到的,而代数(指标)却看不到?制定一个突出你所感知到的差异的指标。

我知道,这是一个类似于你试图自动化的问题的努力。欢迎来到研究。:-)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注