← 返回题目列表

K-means 有哪些缺点?K-means++ 解决了什么问题?

高频 中等 第 10 / 25 题 更新于 2026/08/02
无监督学习K-meansK-means++初始化

简化版

K-means 的主要缺点:① 必须预先指定 K② 对初始中心敏感——随机初始化可能收敛到很差的局部最优;③ 对离群点敏感——均值容易被极端点拉偏;④ 只能发现球形(凸)、大小相近的簇——对非球形、密度不均、大小悬殊的簇效果差;⑤ 对特征缩放敏感(基于欧氏距离);⑥ 硬聚类(每点只属一个簇,无隶属度)。K-means++ 专门解决「初始中心敏感」——它不再纯随机选初始中心,而是让初始中心尽量相互远离(按距离平方为概率选下一个中心),使初始化更均匀合理,从而更快收敛、更少陷入差的局部最优。

详细版

K-means 缺点及应对:

缺点说明应对
需指定 KK 是超参肘部法/轮廓系数/业务
初始中心敏感随机初始化→差的局部最优K-means++、多次运行取最优
离群点敏感均值被极端点拉偏K-medoids、先去离群点
只能球形簇欧氏距离假设凸簇DBSCAN、谱聚类、GMM
特征缩放敏感距离被大特征主导先标准化
硬聚类每点只属一簇GMM(软聚类、概率隶属)

K-means++ 初始化:

1. 随机选第 1 个中心
2. 对每个点算它到「已选中心」的最近距离 D(x)
3. 以 D(x)² 为概率选下一个中心(离已有中心越远越可能被选)
4. 重复到选够 K 个中心,再跑标准 K-means
  • 效果:初始中心分散、不扎堆 → 收敛更快、结果更稳、更少陷差的局部最优。

完整版教学

一、K-means 的缺点全景

K-means 简单高效,但假设和机制带来一系列局限。面试常要求「说全缺点并知道怎么应对」,逐条讲清。

回答这题可采用机制—失败模式—补救的结构:均值解释离群点敏感,平方欧氏距离解释尺度与形状偏好,非凸目标解释初始化敏感。这样既能说明缺点来源,也能避免把替代算法说成无条件更优。

根因典型失败针对性处理
均值与平方损失极端值拉偏中心稳健预处理、K-medoids
Voronoi 硬划分非凸或重叠簇表达差DBSCAN、谱聚类、GMM
非凸联合目标多次结果不同K-means++、多重启

二、缺点一:必须指定 K

聚类本是探索性的,但 K-means 强制先定簇数。选错 K 结果就无意义。应对是用肘部法、轮廓系数、Gap Statistic 等启发式,或结合业务先验(详见选 K 专题)。有些算法(如 DBSCAN)不需要预先定簇数,这是它们相对 K-means 的优势。

三、缺点二:对初始中心敏感(最重要,K-means++ 的靶子)

K-means 的目标函数 SSE 是非凸的,有很多局部最优。标准 K-means 用随机初始中心,不同的初始点会收敛到不同质量的局部最优——运气不好时初始中心扎堆或落在边缘,会得到很差的聚类。

坏初始化:两个初始中心恰好落在同一个真实簇里
   → 那个簇被劈成两半,另两个真实簇被迫合并 → 糟糕结果

这是 K-means 结果不稳定的主因。两种应对:

  1. 多次随机初始化,取 SSE 最小的结果(sklearn 的 n_init)。
  2. 用 K-means++ 智能初始化(见第七节)——更根本的解法。

四、缺点三:对离群点敏感

更新步用均值做中心,而均值容易被离群点拉偏——一个远处的极端点能把簇中心明显带跑,扭曲聚类。应对:

  • 先检测并去除离群点再聚类。
  • K-medoids(PAM):中心取簇内使簇内总不相似度最小的实际样本(medoid) 而非均值,中位点对离群点更鲁棒(代价是更慢)。

均值的影响不受界:一个点可随数值增大持续拉动中心。例如 [0,1,2,100] 的均值是 25.75,删除 100 后均值变为 1,这就是敏感的数值含义。

K-medoids 的中心必须是实际样本并最小化总不相似度。它通常更稳健,但候选样本间的距离比较也使计算成本高于均值更新。

五、缺点四:只能发现球形、大小相近的簇

K-means 用欧氏距离 + 均值中心,隐含假设每个簇是凸的、各向同性的球形、大小/密度相近。对以下情况会失败:

  • 非球形簇(月牙形、环形、细长条):K-means 会用球形硬切,分错。
  • 密度/大小差异大的簇:大簇被拆、小簇被并。
  • 簇间有噪声:噪声被硬分到某簇。

这类数据要用 DBSCAN(基于密度,任意形状 + 识别噪声)、谱聚类、层次聚类、GMM(椭圆形簇)

六、缺点五、六:缩放敏感与硬聚类

  • 对特征缩放敏感:基于欧氏距离,大尺度特征会主导,量纲不可比且无领域权重时通常先缩放
  • 硬聚类:每个点被硬性分给唯一一个簇,没有「属于某簇的概率/隶属度」。边界模糊的点被强行归类。想要软聚类(概率隶属)用 高斯混合模型 GMM——它给出每个点属于各簇的概率。

缩放不等于无条件标准化:年龄与收入量纲悬殊时通常需要缩放,但已有领域权重、稀疏二值特征或周期变量时,应选择符合语义的变换和距离。

硬标签也不等于真实边界确定。GMM 可输出后验责任度,但这些数值依赖高斯混合假设与拟合质量,并非天然校准的业务概率。

七、K-means++:解决初始中心敏感

K-means++ 是对初始化的改进,核心思想:初始中心应该尽量相互远离、均匀铺开,而不是随机扎堆。做法:

1. 从数据中随机选第 1 个中心
2. 对每个样本 x,计算它到「已选中心里最近那个」的距离 D(x)
3. 以正比于 D(x)² 的概率,选下一个中心
   → 离已有中心越远的点,越可能被选为新中心
4. 重复 2~3 直到选够 K 个初始中心
5. 用这组初始中心跑标准 K-means

为什么有效:按 D(x)² 加权选点,使新中心倾向于落在远离已有中心的区域,从而初始中心分散在数据各处、覆盖不同的真实簇,避免扎堆在同一个簇里。效果:

  • 收敛更快(初始就接近好解)。
  • 结果更稳、更少陷入差的局部最优(初始化质量高)。
  • 对平方欧氏目标,K-means++ 的初始化势函数在期望意义下有对数因子近似界,但不保证单次运行全局最优。

K-means++ 是许多实现(包括 sklearn)的常用默认初始化方式,几乎不增加成本却明显改善效果——它只解决「初始化」这一个缺点,其他缺点(球形假设、离群点、需定 K)依然存在。

八、用离群点和 D² 采样看清“修了什么”

一维簇含 [0,1,2,100] 时,均值中心是 25.75,明显被 100 拉走;若使用 medoid,则会选使总距离较小的实际样本 1 或 2,而不是把“medoid”误称成逐维中位数。K-medoids 因要在候选样本间比较距离,通常比均值更新昂贵。

设已选中心 c 后,三个候选点到最近中心的距离为 1,2,5,K-means++ 的 D² 权重是 1,4,25,最远点被选中的概率为 25/30≈83.3%。它是“更可能”选远点,不是确定性地每次选最远点。

问题缓解方法没有解决的部分
初始化差K-means++、多重启仍可能局部最优
离群点拉均值稳健预处理、K-medoids计算成本上升
非凸簇DBSCAN、谱聚类需要新的假设与参数
大规模数据MiniBatch K-means近似更新可能损失质量
K-means++ 只选初始中心 → 之后仍运行 Lloyd 分配/更新
                     → 仍需指定 K、缩放与结果验证

记忆钩子:K-means++ 的“++”只加强初始化,不会把 K-means 变成能抗离群、识别任意形状的算法。

九、常见误区与追问

  • 误区:K-means++ 每次都选择最远的点。 它按最近距离的平方进行随机抽样,远点只是概率更高。
  • 误区:K-means++ 保证得到全局最优。 它改善期望初始化质量,后续非凸优化仍可能落入局部解。
  • 追问:medoid 和中位数一样吗? medoid 是使簇内总不相似度最小的实际样本,不等同逐维中位数。
  • 追问:多次重启应该按什么选结果? 在相同预处理和 K 下通常选训练 inertia 最小者,再用稳定性与业务指标验证。
  • 追问:什么时候 MiniBatch 值得用? 样本很大且完整 Lloyd 成本过高时,用小批近似换速度与内存。

十、加强记忆

K-means 六大缺点:① 必须指定 K(肘部法/轮廓系数/业务应对);② 对初始中心敏感——SSE 非凸、随机初始化易陷差的局部最优(多次运行或 K-means++);③ 对离群点敏感——均值被极端点拉偏(K-medoids 用中位点、先去离群);④ 只能发现球形/大小相近的簇——非球形、密度不均要用 DBSCAN/谱聚类/GMM⑤ 对特征缩放敏感(必须标准化);⑥ 硬聚类无隶属度(软聚类用 GMM)。K-means++ 专治缺点②:按到已有中心的距离平方 D(x)² 为概率选下一个初始中心,让初始中心相互远离、均匀铺开,从而收敛更快、结果更稳、更少陷差局部最优——现已是默认初始化,但只解决初始化,其他缺点仍在。