k-means++ 算法和异常值

机器算法验证 聚类 k-均值
2022-03-17 04:01:17

众所周知,k-means 算法在存在异常值时会受到影响。k-means++是一种有效的聚类中心初始化方法。我正在浏览该方法的创始人 Sergei Vassilvitskii 和 David Arthur http://theory.stanford.edu/~sergei/slides/BATS-Means.pdf (slide 28) 的 PPT,这表明集群中心初始化是不受异常值影响,如下所示。在此处输入图像描述

根据 k-means++ 方法,最远的点更有可能是初始中心。这样,离群点(最右边的点)也必须是初始聚类质心。图的解释是什么?

3个回答

在 K-Means++ 方法中,第一个质心(我们称之为 C1)可以在任何点之间。换句话说,在初始化阶段,所有点都有相同的机会被选为第一个质心。现在,一旦选择了第一个质心,第二个质心的选择方式是,数据集中的任何点(当然除了 C1)被选为第二个质心的概率与其与第一个质心的平方距离成正比质心。同样,此逻辑扩展到在初始化阶段的数据点中选择其余的质心。一般来说,一个点被选为质心的概率与其离最近质心的距离成正比。这样,

现在回答您的问题,K-means++ 仍然对异常值敏感。一种解决方法是在聚类之前使用 LOF、RANSAC、简单的单变量箱线图等技术去除异常值。我认为另一个可能是重新初始化质心,以防您在第一次尝试中获得次优性能。

是的,离群值更有可能被选中。但也有更多的inliers,选择其中之一的机会也很大。假设你有一个离群值远 10 倍的异常值,那么它被纠察的可能性比一个内部值高 100 倍。如果您有 100 个内点,则概率约为 50%,如果您有 1000 个内点,则选择异常值的机会约为 10%。

但总而言之,我想说 k-means++ 可能更有可能选择异常值作为初始中心(在上面的例子中,随机会选择 1% 和 0.1%),因此可能对异常值更敏感(事实上,许多人报告使用 k-means++ 几乎没有改进)。但这并没有太大区别:任何k-means 方法都会受到影响,因为它们都优化了相同的目标。平方和一个对异常值敏感的目标,与您如何优化无关。由于目标中的问题,选择异常值作为中心可能会产生“更好”的结果全局最优可能是这样的!

这似乎在幻灯片 27 中进行了解释。

他们建议按照经典的 k-means 随机选择第一个簇质心。但第二个选择不同。我们查看每个点 x 并为其分配一个权重,该权重等于 x 和第一个选择的质心之间的距离,提高到幂 alpha。Alpha 可以取几个有趣的值。

如果 alpha 为 0,我们就有经典的 k-means 算法,因为所有点的权重为 1,所以它们被选中的可能性相同。

如果 alpha 是无穷大(或者实际上是一个非常大的数字),我们有最远点方法,其中最远点具有非常大的权重,这使得它很可能被选中。如幻灯片 24-26 所示,这使得它对异常值很敏感。

他们建议将 alpha 设置为 2。这提供了一个很好的概率选择远离第一个选择的质心的点,但不会自动选择最远的。这为他们的方法 k-means++ 提供了对异常值不太敏感的良好特性。