一、核心思想:物以类聚

想象一下,你有一堆散落的、未经分类的弹珠,你的任务是把它们按颜色分成 K 个组。
你不知道具体该怎么分,但你的直觉是:颜色相近的弹珠应该聚在一起

K-means 做的就是这件事,只不过它处理的是数据点。它的目标很简单:将数据集中的样本划分成 K 个簇,使得同一簇内的样本彼此相似,而不同簇的样本相异

“相似”在这里通常用距离来衡量,距离越近,越相似。


二、K-means 能做什么?(应用场景)

  • 客户细分:将客户根据购买行为、年龄、兴趣等分成不同的群体,以便精准营销。

  • 图像压缩:将图片中所有颜色减少到 K 种(用 K 个颜色代表所有像素的颜色),大幅减小文件体积。

  • 文档分类:将文章或新闻自动聚类到不同的主题中。

  • 异常检测:远离所有簇中心的数据点,可能是异常点或离群点。


三、工作原理:“猜中心,再归类,再调整”

K-means 算法是一个迭代过程,通常包含以下四个步骤。我们用一个将点分成2类(K=2)的例子来说明:

步骤 1: 初始化 - 随机选择 K 个中心点

  • 算法首先随机在数据空间中选取 K 个点作为初始的簇中心,也叫质心

  • 在我们的例子中,随机选了2个质心(红叉和蓝叉)。

步骤 2: 分配阶段 - 将每个点分配到最近的中心点

  • 计算每一个数据点到这 K 个质心的距离(通常是欧氏距离)。

  • 将每个点分配给离它最近的那个质心所在的簇。

  • 这样,所有数据点就被分成了 K 个簇。

步骤 3: 更新阶段 - 重新计算中心点

  • 既然所有点都有了归属,那么每个簇的“中心”位置就应该更新了。

  • 新的质心就是这个簇内所有数据点的平均值(mean,这就是算法名称中 “means” 的由来)。

  • 从上图可以看到,红蓝两个叉移动到了新的位置。

步骤 4: 迭代 - 重复步骤 2 和 3,直到稳定

  • 由于质心移动了,有些点离另一个质心更近了,所以需要重新分配。

  • 分配之后,质心又会再次更新。

  • 如此反复步骤2和3,直到质心不再发生明显变化(或者说数据点所属的簇不再改变),算法就收敛了。

---最终,我们得到了两个稳定的簇。


四、关键特点与优缺点

优点:
  1. 简单高效:原理和实现都非常简单,计算速度快,特别适合处理大规模数据集。

  2. 结果直观:簇的意义明确,就是围绕一个中心点的集合。

缺点:
  1. 需要预先指定 K 值:你必须事先知道想把数据分成几类。K值选择不当会得到很差的结果。

  2. 对初始值敏感:不同的初始随机质心可能会导致不同的最终结果。为了解决这个问题,通常会多次运行算法,选择结果最好的那次。

  3. 对异常值敏感:由于质心是取平均值,异常点会大幅拉拽质心的位置。

  4. 只能发现球状簇:它假设簇是凸形的和球状的,对于流形、环状等复杂形状的簇效果不好。


五、如何选择最佳的 K 值?

既然 K 值需要预先指定,那么如何确定最佳的 K 呢?最常用的方法是 手肘法

  • 原理:随着簇数量 K 的增加,所有数据点到其所属簇质心的平均距离(称为畸变程度)会减小。

  • 做法:绘制 K 值与畸变程度的关系图。你会发现,当 K 增大到某个值时,再增加 K 所带来的距离减小幅度会骤降。这个拐点就像人的“手肘”,对应的 K 值通常是一个不错的选择。

*(上图中,K=3 可能是一个较好的选择)*

总结

K-means 是一个通过迭代、不断优化簇中心位置,来将数据点划分成 K 个紧凑且独立簇的无监督学习算法。 它的核心是“猜中心,再归类,再调整”,直到形成稳定的分组。

它是一个强大工具,是理解聚类分析乃至机器学习的一个完美起点。

更多推荐