K-means 为什么对初始化敏感?K-means++ 怎么改进?
简化版
K-Means 优化非凸目标,初始中心会影响收敛到哪个局部最优。k-means++ 用与最近中心距离平方成比例的概率选新中心,通常比纯随机稳定,但仍应多次初始化并按惯性、稳定性和业务可解释性选择结果。
详细版
- Lloyd 算法在分配与更新两步间迭代。
- 目标函数单调不增但不保证全局最优。
- 随机抽样可能把多个中心放进同一高密度区。
- k-means++ 倾向让初始中心彼此分散。
- n_init 应与数据规模和稳定性预算一起设置。
完整版教学
一、问题定义与核心直觉
第一次中心通常随机取样,之后计算每个点到最近已选中心的平方距离 D²,并按 D² 加权抽取。远离现有中心的区域更可能被覆盖,从而减少坏初始化。
更低 inertia 不总是更好的业务分群:极小簇或异常点可能吸引一个中心。应同时检查簇规模、重采样一致性和未来画像,而非只保留数值最小的一次。
二、机制与公式
J=sum_i ||x_i-mu_(z_i)||^2
P(select x_i)=D(x_i)^2/sum_j D(x_j)^2
Lloyd 的分配步在固定中心下最小化每点距离,更新步在固定分配下用均值最小化平方误差,因此目标单调不增;联合问题非凸,所以不同初始中心可能到达不同固定点。
三、带数字的推演
三次初始化的 inertia 为 1200、980、975,但后两次 ARI 仅 0.42,且 975 的方案产生 0.2% 极小簇。若业务要求稳定分群,可能选择 980 的受约束方案而非盲选 975。
这里后两次 inertia 只差 0.5%,而结构一致性与最小簇规模差异更大,说明不能把训练目标最小的一次自动当作可用分群。k-means++ 只改善起点分散程度,不替代稳定性与业务约束。
四、方案对比
| 方案 | 优势 | 代价或边界 |
|---|---|---|
| 随机初始化 | 成本最低 | 坏局部解概率高 |
| k-means++ | 通常收敛快且稳定 | 仍有随机性与额外初始化成本 |
| 领域种子 | 可注入已知原型 | 可能固化人为偏见 |
五、工程执行流程
训练折缩放 -> 固定 K -> 多随机种子 k-means++ -> 记录 inertia/轮数
-> 对齐标签比较稳定性 -> 检查空簇和极小簇 -> 固化中心与预处理
n_init 越大,错过好起点的概率通常越低,但初始化和 Lloyd 迭代成本也近似累加。应记录最佳目标随重启次数的收益曲线,并在收益趋稳后选择预算,而不是固定照搬某个默认值。
六、边界条件与上线代价
高维空间距离集中会削弱 D² 选点优势;先做合适的表示或降维,往往比无限增加 n_init 更有效。
流式或大数据场景可用并行初始化和 MiniBatchKMeans,但必须记录抽样顺序与随机种子以复现中心。
关键判断:初始化决定 K-Means 从哪里下山:k-means++ 负责把起点分散,多次初始化负责降低偶然性。
七、常见误区与追问
-
误区:K-Means 每次都得到同一结果。 非凸目标使初始化可能导向不同局部解。
-
追问:k-means++ 如何选中心? 按到最近已选中心的平方距离加权抽样。
-
误区:n_init=1 足够,因为用了 k-means++。 它降低风险但不消除随机性。
-
追问:只看 inertia 可以吗? 还要检查稳定性、簇规模和业务画像。
-
追问:如何复现? 保存随机种子、库版本、预处理和最终中心。
八、加强记忆
初始化决定 K-Means 从哪里下山:k-means++ 负责把起点分散,多次初始化负责降低偶然性。验收不能只报最小 inertia,还要报告结果是否稳定、是否产生无意义小簇。