← 返回题目列表

K-means 怎么确定簇数 K?肘部法和轮廓系数是什么?

高频 中等 第 11 / 25 题 更新于 2026/07/28
无监督学习K-means肘部法轮廓系数

简化版

K-means 必须预先指定簇数 K,但真实数据往往不知道该分几类。常用几种方法确定 K:① 肘部法(Elbow)——画出「不同 K 对应的簇内平方和 SSE」曲线,SSE 随 K 增大而下降,找下降速度突然变缓的「拐点(肘部)」 作为 K;② 轮廓系数(Silhouette)——综合衡量「簇内紧凑度」和「簇间分离度」,取值 [-1,1],选轮廓系数最大的 K;③ 其他:Gap Statistic、Calinski-Harabasz、Davies-Bouldin 指数等;④ 结合业务先验(如就想分成 3 档用户)。实践中常肘部法 + 轮廓系数 + 业务一起判断。

详细版

主要方法:

方法思路怎么选 K
肘部法SSE 随 K 下降,看拐点取下降变缓的「肘部」K
轮廓系数簇内紧凑 + 簇间分离取轮廓系数最大的 K
Gap Statistic对比实际 SSE 与随机分布期望取 Gap 最大处
CH 指数簇间/簇内方差比取最大
DBI 指数簇内散度/簇间距离取最小
业务先验领域知识定簇数直接指定

肘部法(Elbow):

SSE(K) = 簇内平方和,随 K 增大单调下降
画 SSE-K 曲线,找「下降突然变缓」的拐点 → 肘部对应的 K
  • 缺点:拐点有时不明显、主观。

轮廓系数(Silhouette): 对每个样本

s = (b - a) / max(a, b)
   a = 该点到「同簇」其他点的平均距离(越小越紧凑)
   b = 该点到「最近的其他簇」所有点的平均距离(越大越分离)
  • s∈[-1,1],越接近 1 越好;取所有样本 s 的平均最大的 K。

完整版教学

一、为什么选 K 是个难题

K-means 的致命前提是必须先告诉它分几类(K)。但聚类是无监督的,我们通常不知道数据里到底有几个自然的簇。选错 K,聚类结果就没意义——K 太小会把不同类硬揉一起,K 太大会把一个自然簇拆碎。所以「怎么定 K」是 K-means 绕不开的问题,有一系列启发式方法帮忙,但没有绝对标准答案,往往要结合多个指标和业务判断。

二、肘部法:找 SSE 曲线的「拐点」

肘部法(Elbow Method) 是最常用、最直观的。思路基于簇内平方和 SSE(inertia)

  • SSE 衡量簇的紧凑度,随着 K 增大单调下降(簇越多,每个簇越小越紧凑,SSE 越低)。
  • 极端情况 K = 样本数时,每个点自成一簇,SSE = 0——但这毫无意义。

所以不能只求 SSE 小,而要找**「性价比拐点」**:画出 SSE 随 K 变化的曲线,观察——

SSE
 │\
 │  \
 │    \___
 │        \____      ← K 增大,SSE 下降变缓
 │            肘部(拐点) K*
 └──────────────────→ K

在拐点之前,增加 K 能大幅降低 SSE(说明确实该多分);在拐点之后,增加 K 的收益骤减(说明再分是在拆碎自然簇)。这个「下降突然变缓的拐点」就像手肘,对应的 K 就是较优簇数。

缺点:拐点有时不明显、很平滑,看不出明确的肘部,选择带主观性。这时要靠别的指标。

三、轮廓系数:同时看「紧凑」和「分离」

轮廓系数(Silhouette Coefficient) 更严谨——它同时考虑聚类的两个理想性质:簇内要紧凑、簇间要分离。对每个样本 i 计算:

s(i) = (b(i) - a(i)) / max(a(i), b(i))
  • a(i):样本 i 到同簇其他点的平均距离——衡量「簇内紧凑度」,越小越好(离自己人近)。
  • b(i):样本 i 到最近的其他簇中所有点的平均距离——衡量「簇间分离度」,越大越好(离别的簇远)。

解读 s(i) ∈ [-1, 1]:

  • 接近 +1:a 很小、b 很大 → 样本紧贴自己簇、远离其他簇 → 聚类很好
  • 接近 0:a≈b → 样本在两个簇边界上 → 分配模糊。
  • 接近 -1:a>b → 样本离别的簇比离自己簇还近 → 可能分错了

把所有样本的 s 取平均,得到整体轮廓系数。对不同 K 分别算,选轮廓系数最大的 K。 它比肘部法更客观(有明确数值可比),是常用的主力指标。

四、其他指标

  • Gap Statistic:把实际数据的 SSE 和「随机均匀分布数据」的期望 SSE 对比,比较两者差距(Gap),经典做法常用一标准误规则选较小 K,而不是机械取最大值。
  • Calinski-Harabasz 指数(CH):簇间方差 / 簇内方差的比值,越大越好,计算快。
  • Davies-Bouldin 指数(DBI):簇内散度与簇间距离的比,越小越好
  • 这些都是「簇内紧凑 + 簇间分离」的不同量化,可交叉参考。

Calinski–Harabasz 越大越好,Davies–Bouldin 越小越好,但两者和轮廓系数一样依赖距离与簇形状。Gap Statistic 将观测簇内离散度与无结构参考分布比较,其经典一标准误规则倾向选择更小、更简洁的 K。

指标方向主要边界
CH越大越好偏好紧凑、分离的簇
DBI越小越好受最相似簇对影响
Gap一标准误规则依赖参考分布与模拟误差

不同指标给出不同 K 并不矛盾,它们的几何偏好不同。面试中应将 K 说成候选模型选择,而不是某个分数可唯一恢复的天然真值。

选 K 不是只做一次 argmax 或 argmin。先确定候选范围,再在相同重启预算下比较指标。若最优值附近差异落在重采样波动内,应优先考虑更稳定或更简单的 K。业务可执行的分群数量是约束,但不能反过来把没有几何证据的切分包装成天然类别。

五、别忘了业务先验

很多实际场景根本不需要「数据驱动」地找 K,而是业务直接决定

  • 要把用户分成「高、中、低」三档价值 → K=3。
  • 运营要做 5 个营销分组 → K=5。
  • 图像压缩要 16 种颜色 → K=16。

这时业务需求就是 K,不必纠结指标。聚类是为业务服务的,数据指标和业务需求要结合——指标给建议,业务定最终。

六、实践建议与坑

  • 多指标结合:肘部法看大致范围、轮廓系数定具体值、再看业务是否合理,别只信一个。
  • 按语义处理尺度:量纲不可比时通常缩放距离特征,否则被大尺度特征主导。
  • 多次运行:K-means 依赖初始化,每个 K 都多跑几次(或 K-means++)取稳定结果再比较。
  • SSE 别单独用:它随 K 单调下降,只能配肘部法看拐点,不能「越小越好」地选 K。
  • 簇形状不对时指标会误导:不少距离或质心型指标偏爱紧凑、分离的簇,数据是非球形时(该用 DBSCAN)它们的建议不可靠。

七、用一组候选 K 做完整决策

K=1..5 的 SSE 分别为 120,70,45,38,34,相邻下降量是 50,25,7,4,K=3 后收益明显变缓,肘部候选是 3。若平均轮廓系数对应为 0.41,0.56,0.63,0.59,0.52,它也支持 K=3;若业务只能维护两个客群,就要量化 K=2 少掉的结构是否值得运营成本。

证据K=2K=3K=4
SSE704538
Silhouette0.560.630.59
重采样后簇匹配稳定率91%88%61%
业务动作数234

Gap Statistic 常用的原始选择规则不是机械取最大值,而是选最小的 K,使 Gap(K) ≥ Gap(K+1)-s(K+1),在收益与不确定性之间取较简单模型。所有 K 都应采用一致的预处理、初始化次数和随机种子策略,否则比较混入了额外变量。

业务允许范围 → SSE 找候选区间 → Silhouette/CH/DBI 交叉
              → 重采样看稳定性 → 解释簇画像 → 定 K

心法:K 不是由一条曲线“算出来”的真理,而是几何结构、稳定性和业务粒度共同形成的模型选择。

八、常见误区与追问

  • 误区:SSE 最小对应最佳 K。 K 等于样本数时 SSE 可为 0,因此必须考虑复杂度和边际收益。
  • 误区:Gap Statistic 就是选择 Gap 最大点。 经典规则还利用下一点标准误,倾向选择足够好的较小 K。
  • 追问:轮廓系数最大就能直接上线吗? 还要检查簇大小、稳定性、业务解释和后续行动成本。
  • 追问:每个 K 只跑一次可以吗? K-means 受初始化影响,应多次重启并用一致预算比较。
  • 追问:没有明显肘部说明什么? 可能不存在清晰球形簇,需检查尺度、特征、算法假设或接受多解。

九、加强记忆

K-means 必须预先定 K,选 K 方法:① 肘部法——画 SSE 随 K 下降的曲线,取下降突然变缓的拐点(肘部) 为 K,缺点是拐点常不明显、主观② 轮廓系数 s=(b-a)/max(a,b)——a=簇内平均距离(紧凑,越小越好)、b=到最近其他簇的平均距离(分离,越大越好),s∈[-1,1] 越接近 1 越好,取轮廓系数最大的 K,比肘部法客观;③ 其他:Gap Statistic、CH(越大越好)、DBI(越小越好);④ 业务先验直接定 K。实践:多指标 + 业务结合、先标准化、多次运行、SSE 别单用;数据非球形时这些指标都不可靠。