跳到主要内容

K-medoids

一、直观理解:中心必须是“真实的某个人”​

K-means 的中心是均值,可能落在数据中不存在的位置,且被离群点严重拉动。K-medoids 要求每个簇的代表点(medoid)必须是簇内一个真实样本,目标是最小化所有点到其 medoid 的距离之和。

像选班长:班长必须是班里的同学,不能是“平均身高、平均成绩”虚构出来的人;而且要让全班到班长的总距离尽量小。

因为中心是实际点,对任意距离(曼哈顿、编辑距离、相关距离)都自然可定义,鲁棒性通常优于 K-means。

二、适用场景与优缺点​

类型说明
适用场景有离群点;需要可解释的“典型样本”;距离非欧氏;样本量中小。
核心优点对异常值更稳健;medoid 可直接展示;距离度量灵活。
局限与缺点比 K-means 慢(经典 PAM 约 O(K(n−K)2)O(K(n-K)^2) 量级迭代);仍假设簇围绕代表点;要定 KK。

三、核心原理​

设 medoid 集合 {m1,…,mK}⊂{x1,…,xn}\{m_1,\ldots,m_K\}\subset\{x_1,\ldots,x_n\},

J=∑i=1nmin⁡k=1,…,Kd(xi,mk)J=\sum_{i=1}^{n}\min_{k=1,\ldots,K}d(x_i,m_k)

PAM(Partitioning Around Medoids) 思路:

  1. 选 KK 个初始 medoid;
  2. 将点分配到最近 medoid;
  3. 尝试用非 medoid 替换 medoid,若总代价下降则接受;
  4. 重复直至无改进。

也有更快的 CLARA、CLARANS 近似大样本。

与 K-means 对比:更新步骤不是算均值,而是在候选样本中搜最优代表。

四、关键决策​

决策点建议
距离欧氏/曼哈顿/余弦按特征类型
KK轮廓系数(基于相应距离)+ 解释
算法中小 nn 用 PAM;大 nn 用近似或抽样
初值多随机或用 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

六、如何解释结果​

  1. 展示 medoid 原始特征作为簇代言人;
  2. 簇内到 medoid 距离分布看紧致性;
  3. 对比 K-means:离群存在时中心是否更合理;
  4. 报告:距离、算法、Replicates、KK 选择、典型样本表。

七、常见误区​

1. 大数据默认可承受 PAM​

注意时间复杂度,必要时抽样。

2. 以为 medoid 对任意噪声都免疫​

噪声若成簇仍会影响;只是比均值稳。

3. 距离与标准化不匹配​

换曼哈顿仍可能被量纲支配。

4. 把 medoid 当因果代表​

只是距离意义下的中心样本。

5. 忽略 KK 选择​

与 K-means 一样关键。

附:建模论文中的写法要点​

  1. 问题对应:用一两句话说明为何该方法匹配题目数据结构与目标(分类/分群/排序/效率)。
  2. 符号与步骤:按“输入 → 预处理 → 核心计算 → 输出指标”列出编号步骤,公式与代码变量名一致。
  3. 参数表:列出全部可调参数、取值、选取依据(CV、信息准则、业务约束或灵敏度)。
  4. 结果呈现:主结果用表格;辅以 1–2 张图(边界、树状图、得分条形图、效率分解等)。
  5. 稳健性:至少做一种扰动——删点、换权重、换距离、换初值或换阈值,观察结论是否保持。
  6. 局限:主动写明假设(球状簇、线性可分、CRS、完全补偿等)及适用边界,避免被质询时被动。

若主方法结论与合理基线(如 K-means 对 GMM、加权和对 TOPSIS、CCR 对 BCC)严重冲突,应回到数据质量与指标方向检查,而不是只报告“更好看”的一种结果。

附:计算检查清单​

在提交结果前,建议按下列清单快速自检:

  1. 输入矩阵:行/列含义是否与正文一致,有无缺失、重复行、单位混用。
  2. 方向与尺度:极小型是否已正向化;聚类/距离类是否已标准化;评价类权重是否归一。
  3. 参数来源:所有阈值、簇数、核宽、理想解定义能否在正文找到依据。
  4. 数值稳定:协方差/相关是否接近奇异;DEA 线性规划是否全部求解成功;对数/除零是否加保护。
  5. 随机性:涉及随机初值的算法是否固定种子并报告多次结果的稳定性。
  6. 验证协议:分类任务是否严格隔离测试集;重采样/SMOTE 是否仅用于训练折。
  7. 图表编号:主结论表与图在正文中被引用,而不是只放附录。
  8. 可复现:给出软件版本(如 MATLAB R20xx)与关键函数名,使读者能重跑最小示例。

不满足清单中任一项时,优先修正流程,再讨论“方法先进性”。对综合评价题,额外检查:更换一种合理权重后,前三名是否大体稳定;若剧烈跳动,应降低对精细名次的措辞强度。

八、小结​

K-medoids 用真实样本作为簇中心,最小化到 medoid 的距离和,更稳健、更易解释“谁代表这一类”。

有离群点、需要典型个案、或距离非欧时,优先于 K-means;样本特别大时再考虑近似算法或仍回 K-means++。