[机器学习]KMeans 算法中如何确定簇的数量K值

361 阅读3分钟

KMeans 算法中如何确定簇的数量(K值)?

在 K-Means 算法中,簇的数量 K 需要预先指定。但实际应用中,K 通常是未知的,需要通过一定方法确定。以下是几种常用的方法,其中手肘法是最经典的一种。


一、手肘法(Elbow Method)

原理

手肘法的核心思想是:随着簇数量 K 的增加,数据点与所属簇质心的距离之和(称为总平方误差,SSE)会逐渐减小(理论上是无限接近0, 也就是每个数据点都是一个簇)。

但当 K 增大到真实簇数量时,SSE 的下降幅度会显著降低,形成类似“手肘”的拐点,此时的 K 即为合理值。

公式

总平方误差(SSE)的计算公式:

SSE=∑i=1K∑x∈Ci∥x−μi∥2SSE=i=1∑K​x∈Ci​∑​∥x−μi​∥2

其中:

  • CiCi​ 是第 ii 个簇
  • μiμi​ 是第 ii 个簇的质心
步骤
  1. 对不同的 K 值(如 K=1,2,...,10K=1,2,...,10)分别运行 K-Means 算法。
  2. 计算每个 K 对应的 SSE。
  3. 绘制 K 与 SSE 的关系曲线,观察拐点(SSE 下降幅度骤减的点)。
示例图

K=3 时,SSE 下降明显变缓,因此选择 K=3

SSE
  |
  |*****  
  |     *****  
  |          *****  
  |               ------(拐点)  
  +-----------------------  
    1 2 3 4 5 6 7 8 9 10  
              K值
优缺点
  • 优点:简单直观,易于实现。

  • 缺点

    • 拐点可能不明显(尤其在数据分布复杂时)。
    • 依赖主观判断,需人工观察曲线。


二、其他方法

  1. 轮廓系数(Silhouette Coefficient)

    • 衡量每个数据点与自身簇和其他簇的相似度,取值范围为 [−1,1][−1,1]。

    • 步骤

      • 对不同的 K 值计算所有样本的平均轮廓系数。
      • 选择轮廓系数最大的 K 值。
    • 优点:量化评估聚类效果,无需人工观察。

    • 缺点:计算复杂度较高,适用于中小数据集。

  2. Gap Statistic

    • 通过比较实际数据与随机均匀分布数据的聚类效果差异,选择差异最大的 K 值。
    • 优点:无需人工判断,适用于复杂数据。
    • 缺点:计算成本高。
  3. 业务需求驱动

    • 根据实际场景需求选择 K。例如:

      • 客户分群时,需按业务目标确定分组数量(如高/中/低价值客户)。
      • 图像压缩时,根据颜色数量限制设定 K

手肘法 Python 代码实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

# 生成模拟数据(3个真实簇)
X, y = make_blobs(n_samples=500, centers=3, cluster_std=0.8, random_state=42)

# 尝试不同的 K 值(1到10)
sse = []
k_values = range(1, 11)
for k in k_values:
    kmeans = KMeans(n_clusters=k, init='k-means++', n_init=10, random_state=42)
    kmeans.fit(X)
    sse.append(kmeans.inertia_)  # inertia_ 属性即为 SSE

# 绘制手肘图
plt.figure(figsize=(8, 5))
plt.plot(k_values, sse, 'bo-', linewidth=2, markersize=8)
plt.xlabel('Number of Clusters (K)')
plt.ylabel('SSE')
plt.title('Elbow Method for Optimal K')
plt.axvline(x=3, color='r', linestyle='--', label='Elbow Point (K=3)')
plt.legend()
plt.show()
输出结果
  • 图中会在 K=3 处出现明显拐点,表明数据真实簇数为3。

三、如何选择方法?

场景推荐方法
数据分布简单,需快速判断手肘法
数据分布复杂,需量化评估轮廓系数 / Gap Statistic
有明确的业务目标业务需求驱动

总结

  • 手肘法是确定 K 值的经典方法,通过观察 SSE 下降趋势的拐点选择 K
  • 若拐点不明显,可结合轮廓系数或 Gap Statistic 进行验证。
  • 实际应用中,常将数学方法与业务需求结合,选择最合理的 K 值。