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

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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