返回 经典机器学习 思维导图
中文·English
📊 经典机器学习ID: kmeans

K-Means 算法

K-Means Algorithm
🎯核心定义
K-Means (K 均值) 是将 nn 个样本划分为 KK 个互斥硬簇的经典聚类算法, 通过坐标下降最小化簇内平方和 (WCSS) 目标 J=k=1KxCkxμk2J = \sum_{k=1}^{K} \sum_{x \in C_k} \Vert x - \mu_k \Vert^2。每轮交替两步: ① 分配步 — 固定质心, 每个样本 xx 指派给最近质心 c(x)=argminkxμkc(x) = \arg\min_k \Vert x - \mu_k \Vert; ② 更新步 — 固定分配, 质心取簇内均值 μk=1CkxCkx\mu_k = \tfrac{1}{|C_k|} \sum_{x \in C_k} x。两步都只减不增 JJ, 故必收敛, 但只能收敛到局部最优; 每轮复杂度 O(nKd)O(nKd), 总复杂度 O(nKdT)O(nKdT) (TT 为迭代轮数)。
💡使用场景
无标签数据的探索性分群 (用户/商品聚类、画像)、图像颜色量化、向量量化、作为 GMM 硬分配的特例对照; 面试常考目标函数手推、收敛性、初始化与 K 的选择。
解决的核心痛点
相比层次聚类需 O(n2)O(n^2) 的相似度矩阵内存, K-Means 线性时间可扩展至百万级样本; 相比 GMM 无需估计协方差, 简单、快、易实现。代价是只能产出凸形 (球形) 硬簇, 对非凸簇与密度不均数据效果差, 且结果强依赖初始化 (见 K-Means++)。
🎯5 个高频面试考点 (Exam Points)
1
手推 K-Means 目标函数 J=kxCkxμk2J = \sum_{k} \sum_{x \in C_k} \Vert x - \mu_k \Vert^2? 为什么分配步与更新步能保证 JJ 单调不增、算法必收敛?
2
推导质心更新公式 μk=1CkxCkx\mu_k = \tfrac{1}{|C_k|} \sum_{x \in C_k} x: 固定分配后对 μk\mu_k 求导置零得最优解; K-Means 是凸优化吗?
3
K-Means 与 GMM 的区别 (硬分配 vs 软分配)? K-Means 与 KNN 有什么本质不同?
4
K-Means 为什么只能收敛到局部最优? 初始化如何影响结果? 缓解手段有哪些 (K-Means++、多次随机重启、K-Medoids)?
5
K-Means 的时间复杂度是多少? 如何选 K (肘部法、轮廓系数)? 为什么对异常值敏感、对非凸簇失效?
📖 关联深度指南:📄 clustering-and-knn
更新于 2026-08-12
🎯
检验攻克程度:针对「K-Means 算法」专属刷题排雷
做单选排雷题、推导选项机制,答错自动收录进专属错题本。
🚀 开始本考点专项刷题
上一个知识点Bagging vs Boosting vs Stacking下一个知识点K-Means++ 与 K 选择

🔗 更多 经典机器学习 知识点卡片

AdaBoost 算法手推Bagging 与随机森林HMM 参数学习 Baum-WelchGBDT 负梯度拟合