为 Kmeans 聚类选择 K 值

Selecting the K value for Kmeans clustering

我要建立一个 K 均值聚类模型来检测异常值。为此,我需要确定需要选择的最佳簇数。

目前,我尝试使用弯头方法来完成此操作。我绘制了误差平方和与聚类数 (k) 的关系图,但是,我得到了如下图,这使得难以识别弯头点。

我需要知道,为什么我会得到这样的图表以及我如何确定最佳聚类数。

请记住,弯头法不只是 'give' k 的最佳值,因为 k 的最佳值取决于解释。

弯头法背后的理论是,我们同时希望最小化某些误差函数(即误差平方和),同时选择较低的 k 值。

弯头法因此表明,k 的良好值应位于图上类似于弯头的点上。即误差很小,但当k局部增加时误差不会急剧减小。

在您的情节中,您可以争辩说 k=3 和 k=6 都类似于肘部。通过选择 k=3 你会选择一个小的 k,我们看到 k=4,而 k=5 在最小化错误方面并没有做得更好。同样适用于 k=6.

K-means 不适合离群值检测。这一直在这里弹出。

  1. K-means 是针对 "pure" 数据概念化的,没有错误点。所有测量都应该来自数据,并且只会因某些高斯测量误差而异。有时这可能会产生一些更极端的值,但即使这些也是真实的测量值,来自真实的集群,应该解释而不是删除。
  2. K-means 本身已知 not 在噪声数据上工作良好,其中数据点 not 属于集群
  3. 它倾向于将大的真实集群一分为二,然后在真实集群中间的点与 k-means 中心的距离
  4. 它倾向于将离群值放入自己的簇中(因为那样会降低SSQ),然后实际离群值会距离,甚至0。

而是使用实际的离群值检测算法,例如 Local Outlier Factor、kNN、LOOP 等,而不是 概念化 带有噪声数据记住了。