思路与直觉
本章目标
- 用直观方式理解 KMeans 的中心式聚类思路——"先猜质心位置,再反复逼近"。
- 理解为什么 KMeans 在
make_blobs球形数据上效果极好,但在弯曲结构上会失败。 - 通过与 DBSCAN 的对比,建立 KMeans 在聚类算法图中的定位。
重点方法与概念速览
| 名称 | 类型 | 作用 |
|---|---|---|
| 中心式聚类 | 核心直觉 | 每个簇由一个质心代表,样本归属于最近的质心 |
| 交替逼近 | 迭代机制 | 反复"分点→移心→分点→移心"直到稳定 |
| 预设 | 前置约束 | 必须在运行前指定期望的簇数——算法不会自己决定 |
| 球形偏好 | 隐假设 | KMeans 的簇边界是 Voronoi 多边形——每个簇被最近质心"吸引" |
make_blobs | 理想数据 | 各簇围绕质心球形散布——完全符合 KMeans 的模型假设 |
1. 为什么需要 KMeans
KMeans 是最直观的聚类方法之一。它的想法很简单:
如果数据中包含
个自然的分组,每个组应该围绕某个中心聚集。找到这 个中心,也就找到了这 个组。
理解重点
- KMeans 把聚类问题转化成了"找
个最有代表性的中心"——每个点只需回答"离哪个中心最近"。 - 这个直觉在日常中随处可见——城市群围绕核心城市、卫星围绕行星——只不过 KMeans 用数学严格化了这个过程。
- 正因为假设了"中心代表",KMeans 偏好各向同性(球形)的簇——中心到各方向的吸引力均等。
2. 用"反复调整"理解迭代过程
KMeans 的工作方式可以想象成:
- 随便猜
个中心——可以在数据点中随机选 - 分地盘——每个点归离自己最近的中心管辖
- 挪中心——每个中心移到它所辖区域内所有点的正中间
- 重新分地盘——因为中心挪了,有些点该换归属
- 继续挪——重复"分地盘→挪中心",直到中心不再大幅移动
理解重点
- 这就像"一座城市、多所学校"的学区调整——先划片区(分配),再根据学生分布调整学校位置(更新),反复多次直到稳定。
- 每一步都会让"学生到学校的总走路距离"减少(或至少不增加)——目标函数单调递减。
- 但最终结果取决于"第一稿学校选址"——在不同位置起步,可能收敛到不同结果。
3. 为什么 KMeans 在球形数据上表现好
当前数据来自 make_blobs(n_samples=400, centers=4, cluster_std=0.8):
- 4 个簇各自围绕一个质心球形散布——这正是 KMeans 假设的数据形态
- 各簇方差相近(均为
cluster_std=0.8)——到中心的距离在各簇间可比 - 簇间距离远大于簇内散布——"分地盘"时几乎不会产生歧义
理解重点
make_blobs的每个簇从采样——每个维度方差相同,形成完美的圆形散点(二维下)或球形散点(高维下)。 - 这与 KMeans 基于平方欧氏距离的 Voronoi 划分天然吻合——每个点到哪个中心最近一目了然。
- 这就是为什么 KMeans 在这类数据上几乎总是正确——数据形态与算法假设高度一致。
4. k-means++ 的直觉:让中心先散开
如果一开始
k-means++ 的策略可以直观理解为:
- 已经选中的中心附近,不再轻易选下一个——给远离现有中心的点更高的选中概率
- 这样选出的
个初始中心在数据中分布更均匀——每个真实簇至少抓到一个初始中心的机会大幅提高
理解重点
- 这就像在公园里均匀摆放摊位——已经有人在某处摆了摊位,下一个就该往还有空档的地方去。
k-means++不是选"离当前中心最远"那个点(那会被孤立噪声点欺骗),而是"距离与概率挂钩"——远者优先但不独享。
5. 与 DBSCAN 的直觉对比
| 维度 | KMeans | DBSCAN |
|---|---|---|
| 核心问题 | 离哪个中心最近? | 哪些区域足够密集且彼此连通? |
| 簇的形状假设 | 球形/凸形(Voronoi 划分) | 任意形状(仅需密度连通) |
| 簇数 | 必须预设 | 由密度结构自动决定 |
| 噪声处理 | 强制分配——每个点必属一簇 | 天然识别为标签 |
| 质心 | 有(cluster_centers_) | 无 |
| 预测新样本 | 支持(predict(X_new)) | sklearn 不支持 |
| 理想数据 | make_blobs(球形高斯簇) | make_moons(弯曲不规则结构) |
理解重点
- KMeans 和 DBSCAN 不是"谁更强"——它们分别适合形状截然不同的数据。
- 将 KMeans 用于
make_moons:Voronoi 直线边界会沿月牙弧形切开——不是 KMeans 有问题,而是数据形态不匹配算法假设。 - 将 DBSCAN 用于
make_blobs:表现通常也不错(只要能找到合适的eps),但 KMeans 更简洁高效——此时 KMeans 是更好的选择。
可视化

常见坑
- 不加思考地使用 KMeans 处理任意形状的数据——数据是月牙形时 Voronoi 直线边界必然出错。
- 忘记预设
是 KMeans 的刚性约束——选错 等于强制拆分或合并真实簇。 - 把每次运行得到的不同
labels_编号理解为模型不稳定——编号是任意的,簇的结构才重要。 - 不标准化数据——让特征量纲差异主导质心距离计算。
小结
- KMeans 的直觉核心是中心式聚类:预设
个质心 → 反复"分配-更新"交替 → 收敛到局部最优。 make_blobs球形高斯簇与 KMeans 的模型假设完美匹配——这是展示其优势的最佳教学数据。- KMeans 与 DBSCAN 在直觉上截然相反:一个从全局中心出发划分,一个从局部密度出发连通——选哪个取决于数据形态,而非算法优劣。