k-means 的优缺点

在许多机器学习场景中,K 均值算法都非常有用且高效,但也存在一些明显的缺点。

k-means 的优势

实现起来相对容易。

可扩展到大型数据集。

始终收敛。

允许对重心位置进行热启动。

能够顺畅地适应新示例。

可推广到不同形状和大小的集群,例如椭圆形集群。

推广 k-means

直接实现 k-means 可能会遇到不同密度和大小的集群问题。图 1 的左侧显示了我们预计会看到的集群,而右侧显示了 k-means 提出的集群。

两个并排的图表。第一个图像显示了具有明显重合区域的数据集。第二张显示了运行 k-means 后示例的奇怪分组。
图 1:非泛化 k-means 示例。

为了在图 1 中所示的不平衡集群上取得更好的效果,您可以对 K 均值进行概括化(即调整)。图 2 显示了三个不同的数据集,分别采用了两种不同的泛化方法进行分组。第一个数据集显示了未进行泛化的 k 均值,而第二个和第三个数据集允许集群的宽度不同。

三个图表,分别显示了未进行泛化的 K 均值、允许宽度不同的 K 均值,以及允许各个维度宽度不同的 K 均值。
图 2:启用和停用泛化的 K-means 聚类。

本课程不会介绍如何对 k 均值进行一般化,但有兴趣的读者可以参阅卡内基梅隆大学的 Carlos Guestrin 撰写的聚类 - k 均值高斯混合模型

k-means 的缺点

\(k\) 必须手动选择。

结果取决于初始值。

对于较低的 \(k\),您可以通过使用不同的初始值多次运行 K 均值并选择最佳结果来缓解这种依赖性。随着 \(k\)的增加,您需要使用k-means 种子来选择更好的初始质心。如需详细了解 k-means 种子,请参阅 M.Emre Celebi, Hassan A. Kingravi 和 Patricio A. Vela。

难以对大小和密度各异的数据进行聚类,且无法进行泛化。

难以对离群值进行重合处理。

中心点可能会被离群值拖动,或者离群值可能会获得自己的集群,而不是被忽略。建议在聚类之前移除或剪裁离群值。

难度会随着维度数量而扩展。

随着数据中维度的增加,基于距离的相似性度量将在任何给定示例之间收敛为一个常量值。通过对特征数据使用 PCA 或使用谱聚类来修改聚类算法来降低维度。

维度诅咒和谱聚类

在这三个图表中,请注意随着维度的增加,示例之间距离的标准差相对于示例之间的平均距离是如何缩小的。这种收敛意味着,随着数据维度的增加,k-means 在区分示例方面的效果会变差。这称为“维度诅咒”。

三个图表,显示了随着维度数的增加,示例之间距离的标准差如何降低
图 3:维度诅咒的演示。每个图表显示了 200 个随机点之间的对偶距离。

您可以使用谱聚类来避免这种性能下降,该方法会向算法添加预聚类步骤。如需执行谱聚类,请执行以下操作:

  1. 使用 PCA 来降低特征数据的维度。
  2. 将所有数据点投影到较低维的子空间。
  3. 使用您选择的算法对此子空间中的数据进行聚类。

如需详细了解谱聚类,请参阅 Ulrike von Luxburg 撰写的谱聚类教程