K-means
一、直观理解:先定中心,再把点分给最近的中心,然后重算中心
K-means 把 个点分成 个簇,使每个点到其簇中心的平方距离之和尽量小。算法像两步舞蹈:
- 分配:每个点投靠最近的中心;
- 更新:每个中心挪到本簇点的均值。
反复直到归属不再变或目标函数稳定。它假设簇大致是球状、大小相近,中心用均值表示——因此对离群点敏感:一个极端值就能把中心拽偏。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 大规模数值数据;簇近似凸且球状;需要快速分群与中心画像;作为更复杂方法的基线。 |
| 核心优点 | 原理简单、极快;实现成熟;中心可解释;易与肘部法/轮廓系数配合选 。 |
| 局限与缺点 | 要预先指定 ;对初值敏感;非球状簇(月牙、环)表现差;离群点影响大;只能硬分配。 |
使用前:标准化、去极端异常、多次随机初始化、准备轮廓系数等验证。
三、核心原理
目标函数(SSE / 惯性):
Lloyd 迭代在“分配固定时最优中心是均值、中心固定时最优分配是最近中心”之间交替,使 单调不增,收敛到局部最优。全局最优是 NP 难的,故需多初值。
距离默认欧氏;若用其他 Bregman 散度,仍有类似中心更新形式。
四、关键决策
| 决策点 | 建议 |
|---|---|
| 肘部法 + 轮廓系数 + 业务可解释性 | |
| 初值 | kmeans++(MATLAB 默认常见)或多随机重启 |
| 标准化 | 量纲不同时必须 |
| 离群点 | 先检测,或改 K-medoids/GMM/DBSCAN |
| 空簇 | 重新初始化或降低 |
| 评价 | 轮廓系数、CH 指数、稳定性(多次结果 ARI) |
五、MATLAB 示例
% 三团模拟数据
rng(1);
X = [randn(30,2)+[0 0]; randn(30,2)+[4 0]; randn(30,2)+[2 3]];
Xz = zscore(X);
% 基本 K-means
K = 3;
[idx, C, sumd, D] = kmeans(Xz, K, ...
"Replicates", 10, ...
"MaxIter", 300, ...
"Distance", "sqeuclidean");
figure; gscatter(Xz(:,1), Xz(:,2), idx); hold on;
plot(C(:,1), C(:,2), "kx", "MarkerSize", 12, "LineWidth", 2);
title("K-means 结果"); legend("Location","best");
fprintf("总 SSE = %.3f\n", sum(sumd));
% 肘部法
Ks = 1:6;
sse = zeros(size(Ks));
for i = 1:numel(Ks)
[~, ~, sumd] = kmeans(Xz, Ks(i), "Replicates", 5);
sse(i) = sum(sumd);
end
figure; plot(Ks, sse, "-o");
xlabel("K"); ylabel("SSE"); title("肘部法");
% 轮廓系数
eva = evalclusters(Xz, "kmeans", "silhouette", "KList", 2:6);
fprintf("轮廓系数建议 K = %d\n", eva.OptimalK);
figure; plot(eva);
% 簇画像(在原始尺度上解释更直观)
for k = 1:K
fprintf("簇 %d 样本量 %d, 原始均值:", k, sum(idx==k));
disp(mean(X(idx==k,:), 1));
end
六、如何解释结果
- 中心坐标:还原到原始量纲后描述“典型成员”;
- 规模:各簇人数是否符合业务;
- SSE/轮廓:分离度与紧致度;
- 稳定性:不同随机种子 ARI 是否高;
- 命名:用 2–4 个突出特征命名,避免过度故事化。
七、常见误区
1. 不标准化
大尺度特征垄断距离。
2. 只看肘部一点折就定
肘部常不明显,需多指标与解释。
3. 把局部最优当唯一真相
Replicates 必须加大。
4. 对月牙形数据硬上 K-means
应改谱聚类或 DBSCAN。
5. 用分类准确率评价无标签聚类
没有标签时用内部指标;有标签用 ARI/NMI,但那是验证不是训练目标。
附:建模论文中的写法要点
- 问题对应:用一两句话说明为何该方法匹配题目数据结构与目标(分类/分群/排序/效率)。
- 符号与步骤:按“输入 → 预处理 → 核心计算 → 输出指标”列出编号步骤,公式与代码变量名一致。
- 参数表:列出全部可调参数、取值、选取依据(CV、信息准则、业务约束或灵敏度)。
- 结果呈现:主结果用表格;辅以 1–2 张图(边界、树状图、得分条形图、效率分解等)。
- 稳健性:至少做一种扰动——删点、换权重、换距离、换初值或换阈值,观察结论是否保持。
- 局限:主动写明假设(球状簇、线性可分、CRS、完全补偿等)及适用边界,避免被质询时被动。
若主方法结论与合理基线(如 K-means 对 GMM、加权和对 TOPSIS、CCR 对 BCC)严重冲突,应回到数据质量与指标方向检查,而不是只报告“更好看”的一种结果。
附:计算检查清单
在提交结果前,建议按下列清单快速自检:
- 输入矩阵:行/列含义是否与正文一致,有无缺失、重复行、单位混用。
- 方向与尺度:极小型是否已正向化;聚类/距离类是否已标准化;评价类权重是否归一。
- 参数来源:所有阈值、簇数、核宽、理想解定义能否在正文找到依据。
- 数值稳定:协方差/相关是否接近奇异;DEA 线性规划是否全部求解成功;对数/除零是否加保护。
- 随机性:涉及随机初值的算法是否固定种子并报告多次结果的稳定性。
- 验证协议:分类任务是否严格隔离测试集;重采样/SMOTE 是否仅用于训练折。
- 图表编号:主结论表与图在正文中被引用,而不是只放附录。
- 可复现:给出软件版本(如 MATLAB R20xx)与关键函数名,使读者能重跑最小示例。
不满足清单中任一项时,优先修正流程,再讨论“方法先进性”。对综合评价题,额外检查:更换一种合理权重后,前三名是否大体稳定;若剧烈跳动,应降低对精细名次的措辞强度。
八、小结
K-means 通过交替分配与均值更新最小化簇内平方误差,是最快、最常用的球状簇算法。
它是聚类的默认起点:标准化、多初值、选 、做画像。形状一复杂或噪声一多,就升级到 K-medoids、GMM 或密度方法。