Sklearn 机器学习 数据聚类 肘部法则选择聚类数目
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖
本博客的精华专栏:
【自动化测试】 【测试经验】 【人工智能】 【Python】
Sklearn 机器学习:数据聚类中的肘部法则(Elbow Method)选择最佳聚类数目
在无监督学习中,聚类(Clustering) 是一项常见任务,而确定最优的聚类数目始终是聚类算法中的一个关键挑战。
本篇博文将围绕 Sklearn
与 KMeans
实践,详细讲解如何通过 肘部法则(Elbow Method) 辅助选择合理的聚类数目。
我们将覆盖如下内容:
- 肘部法则的原理与直觉解释
- Sklearn + KMeans + Elbow Method 实战代码
- 自动寻找拐点与多指标辅助判断
- 方法局限性与补充建议
🔍 一、什么是肘部法则(Elbow Method)?
原理简介
在 KMeans
聚类中,我们需要提前指定聚类数目 k
。不同的 k
会产生不同的聚类结果,我们可以通过 样本到其所属簇中心的距离平方和 来衡量聚类效果。
这个距离平方和被称为:
簇内平方和(Within-Cluster Sum of Squares, WCSS),也常被称为 SSE(Sum of Squared Errors)。
Sklearn 中KMeans
的inertia_
属性就是该值的计算结果,默认使用欧氏距离作为度量方式。
随着聚类数 k
的增加,WCSS
会不断减小,但下降的幅度会逐渐趋缓。此时在曲线上出现“陡降 → 平缓”的拐点,即所谓的“肘部(Elbow)”,通常被视为最优聚类数。
示意图理解
我们可以绘制如下图所示的折线图,x轴为聚类数 k
,y轴为 SSE 值:
SSE│ ●│ ●│ ●│ ●│ ●└────────────────────► k1 2 3 4 5 ...↘ 肘部位置
从图中寻找“SSE 降低幅度明显变缓的点”,就是肘部位置。
⚠️ 注意:当数据聚类结构不明显或维度较高时,肘部可能难以辨识,后文将介绍自动检测方法和其他指标辅助。
🛠️ 二、Sklearn 实战:肘部法则选择聚类数
以下是完整的代码示例,我们使用 make_blobs
构造数据集,并通过肘部法则绘图选择合适的聚类数。
1. 导入必要库
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
2. 构造数据集