在许多机器学习场景中,K 均值算法都非常有用且高效,但也存在一些明显的缺点。
k-means 的优势
实现起来相对容易。
可扩展到大型数据集。
始终收敛。
允许对重心位置进行热启动。
能够顺畅地适应新示例。
可推广到不同形状和大小的集群,例如椭圆形集群。
推广 k-means
直接实现 k-means 可能会遇到不同密度和大小的集群问题。图 1 的左侧显示了我们预计会看到的集群,而右侧显示了 k-means 提出的集群。
为了在图 1 中所示的不平衡集群上取得更好的效果,您可以对 K 均值进行概括化(即调整)。图 2 显示了三个不同的数据集,分别采用了两种不同的泛化方法进行分组。第一个数据集显示了未进行泛化的 k 均值,而第二个和第三个数据集允许集群的宽度不同。
本课程不会介绍如何对 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 在区分示例方面的效果会变差。这称为“维度诅咒”。
您可以使用谱聚类来避免这种性能下降,该方法会向算法添加预聚类步骤。如需执行谱聚类,请执行以下操作:
- 使用 PCA 来降低特征数据的维度。
- 将所有数据点投影到较低维的子空间。
- 使用您选择的算法对此子空间中的数据进行聚类。
如需详细了解谱聚类,请参阅 Ulrike von Luxburg 撰写的谱聚类教程。