K-medoids
一、直观理解:中心必须是“真实的某个人”
K-means 的中心是均值,可能落在数据中不存在的位置,且被离群点严重拉动。K-medoids 要求每个簇的代表点(medoid)必须是簇内一个真实样本,目标是最小化所有点到其 medoid 的距离之和。
像选班长:班长必须是班里的同学,不能是“平均身高、平均成绩”虚构出来的人;而且要让全班到班长的总距离尽量小。
因为中心是实际点,对任意距离(曼哈顿、编辑距离、相关距离)都自然可定义,鲁棒性通常优于 K-means。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 有离群点;需要可解释的“典型样本”;距离非欧氏;样本量中小。 |
| 核心优点 | 对异常值更稳健;medoid 可直接展示;距离度量灵活。 |
| 局限与缺点 | 比 K-means 慢(经典 PAM 约 量级迭代);仍假设簇围绕代表点;要定 。 |
三、核心原理
设 medoid 集合 ,
PAM(Partitioning Around Medoids) 思路:
- 选 个初始 medoid;
- 将点分配到最近 medoid;
- 尝试用非 medoid 替换 medoid,若总代价下降则接受;
- 重复直至无改进。
也有更快的 CLARA、CLARANS 近似大样本。
与 K-means 对比:更新步骤不是算均值,而是在候选样本中搜最优代表。
四、关键决策
| 决策点 | 建议 |
|---|---|
| 距离 | 欧氏/曼哈顿/余弦按特征类型 |
| 轮廓系数(基于相应距离)+ 解释 | |
| 算法 | 中小 用 PAM;大 用近似或抽样 |
| 初值 | 多随机或用 K-means++ 思想挑远点 |
| 标准化 | 欧氏/曼哈顿前仍建议 |
五、MATLAB 示例
rng(1);
X = [randn(25,2); randn(25,2)+[4 0]; [8 8]; [8.2 7.8]]; % 含离群
Xz = zscore(X);
K = 2;
% kmedoids 需要 Statistics and Machine Learning Toolbox
[idx, C] = kmedoids(Xz, K, ...
"Distance", "euclidean", ...
"Replicates", 5, ...
"Algorithm", "pam");
figure; gscatter(Xz(:,1), Xz(:,2), idx); hold on;
plot(C(:,1), C(:,2), "kp", "MarkerSize", 14, "MarkerFaceColor","y");
title("K-medoids(黄点为 medoid)");
% 与 kmeans 中心对比
[idx2, C2] = kmeans(Xz, K, "Replicates", 5);
figure; gscatter(Xz(:,1), Xz(:,2), idx2); hold on;
plot(C2(:,1), C2(:,2), "kx", "MarkerSize", 14, "LineWidth", 2);
title("K-means 中心(可能被离群拉偏)");
% 轮廓
eva = evalclusters(Xz, "kmedoids", "silhouette", "KList", 2:5);
fprintf("K-medoids 轮廓建议 K=%d\n", eva.OptimalK);
% 打印 medoid 在原始数据中的行号(便于写“典型样本”)
for k = 1:K
% 找到与 C(k,:) 相同的样本
[~, row] = min(sum((Xz - C(k,:)).^2, 2));
fprintf("簇 %d 的 medoid 约原第 %d 个样本:", k, row);
disp(X(row,:));
end
六、如何解释结果
- 展示 medoid 原始特征作为簇代言人;
- 簇内到 medoid 距离分布看紧致性;
- 对比 K-means:离群存在时中心是否更合理;
- 报告:距离、算法、
Replicates、 选择、典型样本表。
七、常见误区
1. 大数据默认可承受 PAM
注意时间复杂度,必要时抽样。
2. 以为 medoid 对任意噪声都免疫
噪声若成簇仍会影响;只是比均值稳。
3. 距离与标准化不匹配
换曼哈顿仍可能被量纲支配。
4. 把 medoid 当因果代表
只是距离意义下的中心样本。
5. 忽略 选择
与 K-means 一样关键。
附:建模论文中的写法要点
- 问题对应:用一两句话说明为何该方法匹配题目数据结构与目标(分类/分群/排序/效率)。
- 符号与步骤:按“输入 → 预处理 → 核心计算 → 输出指标”列出编号步骤,公式与代码变量名一致。
- 参数表:列出全部可调参数、取值、选取依据(CV、信息准则、业务约束或灵敏度)。
- 结果呈现:主结果用表格;辅以 1–2 张图(边界、树状图、得分条形图、效率分解等)。
- 稳健性:至少做一种扰动——删点、换权重、换距离、换初值或换阈值,观察结论是否保持。
- 局限:主动写明假设(球状簇、线性可分、CRS、完全补偿等)及适用边界,避免被质询时被动。
若主方法结论与合理基线(如 K-means 对 GMM、加权和对 TOPSIS、CCR 对 BCC)严重冲突,应回到数据质量与指标方向检查,而不是只报告“更好看”的一种结果。
附:计算检查清单
在提交结果前,建议按下列清单快速自检:
- 输入矩阵:行/列含义是否与正文一致,有无缺失、重复行、单位混用。
- 方向与尺度:极小型是否已正向化;聚类/距离类是否已标准化;评价类权重是否归一。
- 参数来源:所有阈值、簇数、核宽、理想解定义能否在正文找到依据。
- 数值稳定:协方差/相关是否接近奇异;DEA 线性规划是否全部求解成功;对数/除零是否加保护。
- 随机性:涉及随机初值的算法是否固定种子并报告多次结果的稳定性。
- 验证协议:分类任务是否严格隔离测试集;重采样/SMOTE 是否仅用于训练折。
- 图表编号:主结论表与图在正文中被引用,而不是只放附录。
- 可复现:给出软件版本(如 MATLAB R20xx)与关键函数名,使读者能重跑最小示例。
不满足清单中任一项时,优先修正流程,再讨论“方法先进性”。对综合评价题,额外检查:更换一种合理权重后,前三名是否大体稳定;若剧烈跳动,应降低对精细名次的措辞强度。
八、小结
K-medoids 用真实样本作为簇中心,最小化到 medoid 的距离和,更稳健、更易解释“谁代表这一类”。
有离群点、需要典型个案、或距离非欧时,优先于 K-means;样本特别大时再考虑近似算法或仍回 K-means++。