什么是 K-Means?
K-Means 是一种经典的无监督聚类算法。它将数据分组到 K 个簇中。
核心直觉:
- 随机选择 K 个中心点
- 将每个数据点分配到最近的中心
- 更新中心点为簇的平均值
- 重复直到收敛
收敛条件:中心点不再变化,或达到最大迭代次数
适用场景
- 客户分群:根据用户行为特征进行市场细分
- 图像压缩:将颜色聚类减少颜色数量(颜色量化)
- 文档聚类:新闻归类、主题发现
- 异常检测:远离所有聚类中心的点可能是异常
历史渊源
问题背景:1950年代,贝尔实验室的工程师需要把连续的模拟信号转换成离散的数字信号(脉冲编码调制)。关键问题是:如何用有限个"代表值"来近似无限多的信号值,使失真最小?
关键突破:1957年,Stuart Lloyd 提出了一个迭代算法:先随机选几个代表值,把每个信号分配给最近的代表值,然后用每组的平均值更新代表值,重复直到稳定。1967年,MacQueen 正式将这个方法命名为"K-means"并推广到统计学领域。
深远影响:K-means 的"分配-更新"两步迭代思想后来被推广为 EM 算法(期望最大化),成为统计学习中最重要的框架之一。K-means 至今仍是数据分析的第一步——"先聚个类看看数据长什么样"。
趣闻:Lloyd 1957年就写好了论文,但贝尔实验室认为"太简单了"没有发表。直到1982年论文才正式出版——整整延迟了25年!这期间 MacQueen 已经独立发表了类似的方法并取了"K-means"这个名字。
发展脉络
局限性
- 需要预设 K 值:聚类数量必须事先指定,常用肘部法则确定
- 对初始点敏感:不同的初始化可能得到不同结果
- 只能发现球形簇:假设聚类是凸形、各向同性的
- 对噪声敏感:异常值会显著影响聚类中心
这些局限催生了:K-means++(智能初始化)、DBSCAN(任意形状聚类)、层次聚类(无需预设 K)
工业界地位
K-means 是最常用的聚类算法,因其简单、高效、易于理解:
- 电商:用户画像、商品推荐分群
- 金融:客户价值分层、风险分组
- 图像处理:颜色量化、图像分割
- 生物信息:基因表达数据聚类
为什么首选 K-means?实现简单、计算效率高(O(nkt))、结果直观可解释。在大多数业务场景中,K-means 已足够满足需求。
交互式可视化
调整参数,观察聚类过程如何收敛
- 点击「运行」,观察质心从随机位置逐步移向每个簇的中心
- 改变「K 值」:K 太小,不同簇被合并;K 太大,同一个簇被拆分
- 切换到「月牙形」数据集,观察 K-Means 的失败——它只能发现圆形簇!
聚类状态:
是否收敛: 运行中...
最终误差: --
簇内方差和:
迭代次数:
数学原理
直觉引入:把一堆散落的弹珠按颜色分组——你会先随便选几个"代表",然后把每颗弹珠归到最近的代表,再把代表移到组的中心。反复几次,分组就稳定了。K-Means 就是这个过程的数学版。
目标函数(最小化簇内方差和):
符号解释:
- $K$:簇的数量(需要预先指定)
- $C_j$:第 $j$ 个簇的点集
- $\mu_j$:第 $j$ 个簇的中心(均值)
- $||x_i - \mu_j||^2$:点到簇中心的欧氏距离平方
EM 两步迭代:
E 步(分配):将每个点分配到最近的中心
M 步(更新):重新计算每个簇的中心
数据:(1,1), (2,1), (4,3), (5,4)
初始中心:$\mu_1$=(1,1), $\mu_2$=(5,4)
第1轮 E步:(1,1)→C₁, (2,1)→C₁, (4,3)→C₂, (5,4)→C₂
第1轮 M步:$\mu_1$=(1.5, 1), $\mu_2$=(4.5, 3.5)
第2轮 E步:分配不变 → 收敛!
K-Means++ 改进:初始中心不再随机选,而是让初始中心尽量分散——第一个随机选,后续每个中心以与已选中心距离的平方为概率选取,大幅减少收敛到局部最优的风险。