K-Means Clustering(K 均值聚类)
就是你先随机放 K 个『旗子』,然后让每个数据点站到最近的旗子那里,再把旗子挪到它管辖那群点的中心,反复这样做直到旗子不再动为止。
亦作、亦称:K 均值聚类 · K-Means · k-means · K均值聚类 · K 均值
K 均值聚类是无监督学习领域最具代表性的算法,以简洁高效著称,可将大规模数据自动分组。从图像压缩到用户分群,它是数据探索与特征工程的核心工具之一。
概述
K 均值聚类是无监督学习中应用最广泛的分区式聚类算法。
- 核心目标:将 N 个样本分配到预定义的 K 个簇,最小化簇内平方和(Within-Cluster Sum of Squares,WCSS)
- 无需标签:属于无监督学习,不依赖人工标注,直接从数据结构中发现模式
- 硬分配:每个样本恰好属于且仅属于一个簇(区别于软分配的高斯混合模型)
- 迭代收敛:通过交替执行「分配」与「更新」两步,保证目标函数单调不增,有限步内必然收敛至局部最优
工作原理
K-Means 算法(即 Lloyd 算法)由以下核心步骤组成,循环直至质心不再移动。
- 初始化:从数据中随机选取 K 个点作为初始质心(或使用 K-Means++ 智能初始化)
- 分配步骤(E 步):将每个样本分配给距离最近的质心所属的簇,距离通常采用欧氏距离
- 更新步骤(M 步):将每个簇的质心重新计算为该簇所有成员样本的坐标均值
- 收敛判定:若质心位置变化量低于阈值或达到最大迭代次数,则停止
- 目标函数:J = Σ Σ ‖x − μk‖²,其中 μk 为第 k 个簇的质心
主要变体
K-Means 衍生出多种改进变体,以解决初始化敏感、规模限制等问题。
- K-Means++(2007):Arthur & Vassilvitskii 提出,以加权概率选取初始质心,使结果更稳定,理论上保证 O(log K) 近似比
- Mini-Batch K-Means(2010):Sculley 提出,每次迭代仅使用随机小批量样本,大幅提速,适合亿级数据集
- K-Medoids(PAM):质心限定为实际样本点,对离群值更鲁棒
- Bisecting K-Means:自顶向下递归二分,适合层次化聚类需求
- 球形 K-Means:使用余弦相似度代替欧氏距离,适合文本等高维稀疏数据
应用场景
K 均值聚类在工业界和学术界均有广泛的实际应用。
- 图像分割与压缩:将像素按颜色聚为 K 类,实现色彩量化(vector quantization)或语义区域分割
- 客户分群:根据购买行为、RFM 指标等将用户聚类,支持精准营销
- 文档聚类:对 TF-IDF 或词嵌入向量聚类,辅助新闻分类、主题发现
- 异常检测:距所有质心均较远的样本可视为潜在异常点
- 推荐系统:对用户或物品嵌入向量聚类,降低检索空间(近似最近邻)
- 多模态检索:对图文特征向量预聚类,加速大规模向量索引(如 FAISS IVF)
与相邻概念的区别
K-Means 常与其他聚类方法对比,了解边界有助于选型。
- vs DBSCAN:DBSCAN 基于密度,能发现任意形状的簇并自动剔除噪声点,无需指定 K;K-Means 假设球形簇,需预设 K
- vs 层次聚类:层次聚类产生树状结构(dendrogram),可事后剪枝;K-Means 直接分区,速度更快
- vs 高斯混合模型(GMM):GMM 是软分配,每个样本有属于各簇的概率;K-Means 为 GMM 的硬分配极限情形(协方差矩阵为球形等方差时)
- vs 谱聚类:谱聚类利用图拉普拉斯特征,可处理非凸簇,但计算复杂度更高
局限与误区
K-Means 简单高效,但存在若干重要限制,需在实践中注意。
- K 必须预先指定:算法本身不能自动确定最优 K,需借助肘部法则、轮廓系数或 Gap Statistic 辅助决策
- 初始化敏感:随机初始化可能导致局部最优;建议多次运行取最优或使用 K-Means++ 初始化
- 假设簇为球形:对细长形、月牙形或密度不均的簇效果较差
- 对离群值敏感:极端异常值会显著拉偏质心位置;可预先做异常值处理或改用 K-Medoids
- 误区:认为 K-Means 的收敛结果即全局最优——实际上仅保证局部最优,不同初始化可能给出差异较大的结果
发展脉络
K-Means 算法跨越半个多世纪持续演进,至今仍是聚类领域的基准方法。
- 1956 年:Hugo Steinhaus 提出将多维数据分组以最小化组内平方和的构想,奠定理论雏形
- 1957 年:Stuart Lloyd(Bell 实验室)推导出迭代分配-更新算法,用于脉冲编码调制(PCM)研究,1982 年正式发表于 IEEE Transactions on Information Theory
- 1965 年:E. W. Forgy 独立提出相同算法,并率先以聚类视角描述
- 1967 年:James MacQueen 正式命名「K-Means」并系统化描述,发表于第 5 届伯克利统计研讨会
- 2007 年:Arthur & Vassilvitskii 提出 K-Means++,在理论上证明对初始化的改进效果
- 2010 年:Sculley 提出 Mini-Batch K-Means,将算法扩展至互联网规模数据
- 2010 年代至今:K-Means 与深度学习结合(如 DeepCluster、VQ-VAE 的向量量化层),在无监督表示学习中持续发挥作用
常见误解
日常交流中容易听到的简化说法,未必准确,但能帮助理解误解从何而来。
- 「就是你先随机放 K 个『旗子』,然后让每个数据点站到最近的旗子那里,再把旗子挪到它管辖那群点的中心,反复这样做直到旗子不再动为止。」
- 「很多人以为 K-Means 能自动决定分几组,其实 K 是你事先指定的,选错 K 结果会很差。」
- 「K-Means 假设簇是球形的,遇到细长形或弧形的数据群体它就会『失手』,这时应该考虑 DBSCAN 或高斯混合模型。」
相关术语
和本术语关联紧密的其他词条,便于串联理解。
延伸阅读
从知识库精选 3 篇文章,帮助深入理解该术语。
外部参考
维基百科:查看「K-Means Clustering」词条本页内容为本站原创撰写;维基百科链接仅作延伸参考。