一句话定义:K-Means 聚类(K-Means Clustering)是一种无监督学习方法,它把一堆没有标注的数据按"彼此离得近"的原则分成 K 个组,每个组用一个中心点(质心,centroid)代表。
它怎么工作的
想象一场活动结束后,会议室里散落着几十把椅子,位置乱七八糟。你被要求把它们归成 5 堆,要求是"同一堆里的椅子尽量挨着"。你会怎么做?很自然的做法是:先随便找 5 个位置当作临时堆放点,然后每把椅子就近归队;归完之后,每堆重新算一个"平均位置"作为新的堆放点,再让所有椅子重新就近归队。反复几轮,堆放点基本不动了,分组也就稳定了。
K-Means 就是这套动作的数学版:
1. 先选定 K 个初始质心(K 由人指定);
2. 把每个数据点分给离它最近的质心;
3. 每个簇重新计算均值,作为新质心;
4. 重复 2、3,直到质心几乎不再移动。
这里的"近"通常指欧氏距离(Euclidean distance)。它优化的是"每个点到所属质心的距离平方和"最小,这个目标函数一路单调下降,所以一定会收敛,但收敛到的可能是局部最优,不一定全局最优。
和相邻概念的区别
| 概念 | 有没有标签 | 干什么 | 典型特点 |
|---|---|---|---|
| K-Means | 无 | 分成 K 个簇 | 快、可扩展,但要点 K、怕异常值 |
| KNN(K 近邻) | 有 | 分类/回归预测 | 是监督学习,别和 K-Means 混为一谈 |
| 层次聚类 | 无 | 生成一棵聚类树 | 不用先定 K,但数据量大时慢 |
| DBSCAN | 无 | 按密度分簇 | 能识别噪声点和不规则形状 |
两个敏感的软肋
一是初始点。 如果 5 个临时堆放点恰好都落在同一片角落,结果很可能分得很歪。实践中常用 K-Means++ 这类策略让初始质心尽量互相分散,并且用不同随机种子多跑几次取最好的结果。
二是异常值。 因为每轮用的是"均值",一个远离大部队的点会把质心整个拽偏。所以用 K-Means 之前通常要先看分布、处理极端值;如果数据里噪声本来就多,K-Medoids 或 DBSCAN 往往更合适。
另外,K 本身要人来定。常用肘部法(elbow method)看"再增加一个簇还能不能明显降低距离平方和",或者用轮廓系数(silhouette score)衡量分得紧不紧、分得开不开。
对实际工作的意义
K-Means 是"没有标准答案时先看出结构"的入门工具:电商用它把用户按消费行为分成几类人群,运维用它把日志或指标归成几种模式,图像处理用它做颜色量化压缩。它算得快、好实现、结果好解释,适合当探索数据的第一步。
但要记住它的性格:它假设簇是"团状、大小差不多"的,对量纲、初始值和异常值都敏感。所以真正落地时,标准化数据、选好 K、多跑几次,这三步几乎跑不掉。具体实现细节和参数默认值,以所用库的官方文档为准。
