聚类工具箱 — 没有标准答案的问题如何做出可辩护的选择
R — 原文 (Reading)
"我们希望'物以类聚',即同一簇的样本尽可能彼此相似,不同簇的样本尽可能不同。换言之, 聚类结果的'簇内相似度'(intra-cluster similarity)高且'簇间相似度'(inter-cluster similarity)低。"
— 周志华,《机器学习》第9章 9.2节 "性能度量"
"聚类性能度量大致有两类。一类是将聚类结果与某个'参考模型'(reference model)进行比较, 称为'外部指标'(external index);另一类是直接考察聚类结果而不利用任何参考模型,称为'内 部指标'(internal index)。"
— 周志华,《机器学习》第9章 9.2节
"DBSCAN 将'簇'定义为:由密度可达关系导出的最大的密度相连样本集合。"(D 中不属于任何簇 的样本被认为是噪声或异常样本)
— 周志华,《机器学习》第9章 9.5节 "密度聚类"
I — 方法论骨架 (Interpretation)
聚类是无监督的:没有"正确答案"可供比对,所以整个方法论围绕两个问题重组——怎么判断结果好不好,以及用什么方式切分才匹配数据形状。
评估侧是一条二岔口:手上有参考模型(如领域专家给的划分)就走外部指标(两两配对计数:同簇同参考、同簇异参考……);没有参考就走内部指标——用簇内平均距离 avg、簇内最远距离 diam、簇间最近距离 dmin、簇中心间距 dcen 组装出 DB 指数(越小越好)或 Dunn 指数(越大越好)这类自洽判据。
算法侧是三大范式按数据几何形态分流:
- 原型聚类(k均值/LVQ/高斯混合):假设簇能被一组原型(均值向量/概率成分)刻画——适合团状凸簇;k 均值最小化平方误差是 NP 难,贪心迭代只保证局部解。
- 密度聚类(DBSCAN):假设簇由样本分布的紧密程度确定——能刻出任意形状的簇,还能顺带标出噪声点;靠邻域参数 (ε, MinPts) 定义核心对象与密度可达链。
- 层次聚类(AGNES 自底向上 / DIANA 自顶向下):产出树状图,在不同层切割得到不同粒度的簇——适合需要多分辨率解读的场景。
距离度量是横贯三者的底层选择:先审属性有没有"序",有序算闵可夫斯基,无序用 VDM,混合拼接,必要时允许违反直递性的非度量距离。
A1 — 书中的应用 (Past Application)
案例 1: 西瓜数据集 4.0 五连演算 (c27)
- 问题: 同一份数据(30 样本、密度×含糖率),不同聚类范式给出的结果差多少?
- 方法论的使用: 作者依次跑五种算法并给出逐步数值:k 均值(x₁ 距三中心 0.369/0.506/0.166 入 C₃,第五轮收敛);LVQ(利用类别监督信息拉推原型 p₅=(0.725;0.445)→(0.722;0.442));高斯混合 EM(后验 γ₁₁=0.219 加权更新参数);DBSCAN(ε=0.11, MinPts=5,从 13 个核心对象出发生成四簇);AGNES(dmax 链接建树状图,特定层切割得 7 簇)。
- 结论: 三大范式在同一数据上的簇划分各不相同且都"说得通"——聚类结果的合理性永远相对于所选范式与参数而言。
- 结果: 这套五连演算成为横向比较聚类方法的通用沙盘,也直观展示了"同一数据多种合法切分"的现实。
案例 2: 人马非度量距离 (c26)
- 问题: 相似度度量必须满足数学公理吗?
- 方法论的使用: 作者构造场景——希望"人""马"分别与"人马"相似但彼此很不相似;令 d(人,人马)、d(马,人马) 都小而 d(人,马) 大,则三角不等式被打破。数学上取 d₃=3 即满足直递性,但从语义看 d₃ 应远大于 d₁ 与 d₂。
- 结论: 距离公理可以为任务语义让路——"非度量距离"是合法选项,必要时可通过距离度量学习从数据中学出合适距离。
- 结果: 确立了"度量服务语义而非相反"的原则,成为审距离这一步的最高裁决。
案例 3: 聚类为何新算法最多——作者的自我剖白
- 问题: 为什么聚类领域的"新算法"出现最多最快、知识却不够系统化?
- 方法论的使用: 作者在阅读材料中直陈原因:"聚类不存在客观标准;给定数据集,总能从某个角度找到以往算法未覆盖的某种标准从而设计出新算法"——并承认因此本章只能采用"列举式"叙述。
- 结论: NFL 定理"脱离具体问题谈优劣无意义"在聚类中的重演:每个内部指标都是一种"客观标准"的主张,而主张之间不可通约。
- 结果: 为"警惕把簇当真实类别"这条边界纪律提供了全书级别的理论背书。
A2 — 触发场景 (Future Trigger) ★
用户会在什么情境下需要这个 skill?
- 用户拿到无标记数据要做分群,第一个问题就是"该分成几类 / 怎么定 k"。
- 用户纠结算法选型:"kmeans 还是 dbscan?""层次聚类什么时候用?"——通常因为不知道自己的数据是团状还是任意形状、有没有噪声。
- 用户跑完聚类不知道怎么向老板/审稿人证明结果合理:"聚类效果怎么评估?轮廓系数怎么看?"
- 用户的特征表里混着性别/城市等无序类别列,直接编码成数字算欧氏距离,结果可疑。
- 用户把聚类簇直接当真实类别使用("簇 1 就是高价值客户"),需要有人提醒证据强度。
语言信号 (用户的话里出现这些就应激活)
- "聚类分几类?" / "k 值怎么定?" / "how many clusters"
- "kmeans 还是 dbscan?" / "kmeans vs dbscan" / "该用什么聚类算法"
- "怎么评估聚类效果?" / "clustering evaluation" / "轮廓系数" / "silhouette score"
- "DB 指数 / Dunn 指数 / dendrogram 怎么看"
- "聚类出来的簇就是用户画像吗?" / "cluster 当类别用行不行"
与相邻 skill 的区分
- 与
ml-task-matching的区别: task-matching 管"这个任务该不该用聚类"以及有监督方法间的选型;本 skill 在已决定聚类之后运作——评估、选范式、选距离、定 k 全流程。NFL 原则是两者的共同上游。 - 与
ml-dimensionality的区别: dimensionality 处理高维灾难下的降维/特征选择(聚类前的高维预处理常先经它);本 skill 不做维度压缩,只做无标记数据的分组与评估。高维数据上"距离趋同"的症状出现时先走降维再回来聚类。 - 与
ml-diagnosis的区别: diagnosis 是有监督的偏差-方差归因,依赖训练/验证误差信号;聚类没有这种信号,诊断逻辑完全不同(内部指标 + 任务语义复核)。两者不可互相替代。
E — 可执行步骤 (Execution)
当 skill 被激活后, agent 应按以下步骤执行:
澄清任务与约束
- 完成标准: 明确回答三个问题——聚出来做什么用途(客户分层/异常初筛/探索性可视化)?有没有参考模型(专家标注、既有分群)可用作对照?业务上是否要求标出噪声点?答案将决定后续所有分支。
- 判停条件: 若发现实际是有标签分类任务 → 移交
ml-task-matching,本 skill 终止。
选评估指标
- 完成标准: 有参考模型 → 外部指标(Jaccard/FM/RI 两两配对族);无参考 → 内部指标(DB 指数越小越好、Dunn 指数越大越好,轮廓系数逐样本看归属强度)。同时声明所选指标的偏好立场——它只是"某种角度"的标准,不是客观真理。
按数据形状选算法范式
- 完成标准: 给出明确选型及理由——团状凸簇、要快、要可解释 → k 均值(注意其最小化平方误差是 NP 难、贪心仅局部解、对初始中心敏感,需多组初值择优);任意形状 + 有噪声要剔除 → DBSCAN(ε, MinPts 需调,密度均匀假设要核对);要多粒度树状解读 → AGNES 层次聚类(合并后不可回溯,单/全/均链接的选择影响链式效应)。
审距离度量
- 完成标准: 逐一检查参与距离计算的属性——有序属性 → 闵可夫斯基(p=2 欧氏、p=1 曼哈顿);无序属性 → VDM,禁止硬编码数字算伪距离;混合属性 → 闵氏+VDM 拼接;重要性不均 → 加权距离。若任务语义需要组合相似性(人马型),显式采用非度量距离并说明违反直递性的理由。
- 判停条件: 发现存在无序属性被连续化编码 → 先修复编码再继续,禁止带着伪序往下跑。
定 k 并复评
- 完成标准: 对 k 做指标扫描(内部指标随 k 的曲线找拐点),结合任务语义约束(业务最多能运营几个群)收敛到候选值;报告须包含多个 k/多种子/多算法的结果对比,而非单次运行。明确声明"聚类没有客观标准",最终取舍以任务需求为裁判。
防越界解读
- 完成标准: 输出中显式区分"统计上稳定的簇结构"与"业务上可用的类别";建议对关键簇做抽样人工复核后才赋予业务含义。
B — 边界 (Boundary) ★
不要在以下情况使用此 skill
- 数据有标签、目标是预测 → 这是分类不是聚类,走监督学习管线。
- 主要诉求是把高维数据压到二维看一眼 → 那是降维可视化(
ml-dimensionality),聚类只是可选的事后加工。 - 核心诉求是异常检测的完整方法论 → 聚类可作异常初筛(远离所有簇中心/密度极低处),但不等于异常检测本身。
作者在书中警告的失败模式
- 距离度量误用 (x37): 无序属性硬算闵氏距离会凭编码数字产生伪远近({飞机,火车,轮船} 编码 1/2/3 后"飞机-火车<飞机-轮船"毫无依据);应改 VDM 或混合距离。反向陷阱同样存在:坚持三角不等式反而表达不了组合语义。
- "聚类没有客观标准"(NFL 重演): 给定数据集总能找到某个角度发明新算法——所以任何"最优聚类"的说法都隐含了标准选择;换一个内部指标结论可能反转。
- 贪心与不可回溯: k 均值只给局部解且依赖初始中心(换个初始化面目全非);AGNES/DIANA 合并或分拆后不能回溯调整——单次运行的结果不足以支撑结论。
- 把簇当真实类别: 簇是算法在某种距离与某种标准下的产物,与真实类别(若存在)可以完全错位;书中特别指出 LVQ 才借助监督信息辅助聚类,纯无监督结果没有这种保障。
作者的盲点 / 时代局限
- 成书于 2015-2016:谱聚类仅在阅读材料提及,深度聚类(自编码器嵌入 + 聚类)、HDBSCAN 等现代密度方法缺失;但"范式三分 + 距离审查 + 无客观标准"的骨架可直接外推。
- 高维场景着墨少:维数灾难让距离失效的问题在本章未展开(ch10 补),高维聚类前应先降维——这是读者需自行拼接的一环。
- 大规模聚类的工程扩展(mini-batch kmeans、分布式 DBSCAN)不在讨论范围。
容易混淆的邻近方法论
- 聚类 vs 分类: 聚类是无监督的"物以类聚",分类是有标记的学习;两者术语相近(都叫"簇划分/类别")但证据等级天差地别。
- 外部指标 vs 内部指标: 外部指标衡量与参考的一致性,内部指标衡量自洽性——前者强不代表后者好(参考本身可能平庸),反之亦然,不可混用。
- DBSCAN 的噪声 vs 异常检测: DBSCAN 把不属于任何簇的样本标为噪声/异常,但这只是聚类的副产品;系统的异常检测另有方法体系。
相关 skills
- depends-on: ml-task-matching(确认任务确实无监督)
- contrasts-with: ml-diagnosis(有监督归因 vs 无监督评估)
- composes-with: ml-dimensionality(高维先降维再聚类), ml-pitfall-audit(x37 度量误用审计的前置)
审计信息
- 验证通过: V1 ✓ / V2 ✓ / V3 ✓
- 素材单元: c27, c26 / x37(扩充批A 新增单元,阶段 1.5 池外补充)
- skill_version: 0.0.1
- 蒸馏时间: 2026-08-24