轮廓系数 Silhouette coefficient 与效应量估计

Last updated on September 13, 2026 am

轮廓系数 Silhouette coefficient 与效应量估计

轮廓系数(Silhouette coefficient / Silhouette width)是衡量一个样本被”分对”到自己所属 cluster 里的程度的一个指标,Peter Rousseeuw 1987 年提出的,最初是用来评估聚类结果好坏的。


对单个样本 i 怎么算

假设已经给每个样本贴了一个 cluster 标签(在你的场景里就是 HOT/COLD 或 pCR/pNR),然后:

  • a(i) = 样本 i 到自己 cluster 里其他所有样本的平均距离
    → 直觉:这个样本和”自己人”有多近
  • b(i) = 样本 i 到最近的另一个 cluster 里所有样本的平均距离
    → 直觉:这个样本和”最近的外人 cluster”有多近

轮廓系数定义为:

s(i) = (b(i) - a(i)) / max(a(i), b(i))

分母 max(a, b) 是把结果归一化到 −1 到 1 的区间。


怎么解读这个数

  • s(i) ≈ 1:a 远小于 b,样本和自己人紧、离外人远 → “分对了,而且分得很好”
  • s(i) ≈ 0:a ≈ b,样本到自己人和到外人的距离差不多 → “在两组边界上,模棱两可”
  • **s(i) < 0**:a > b,样本离外人反而比离自己人更近 → “可能分错了 cluster”

整个数据集的 silhouette = 所有样本 s(i) 的平均值。用来评价”整体上这个分组结构靠不靠谱”。


距离怎么定义

  • 欧氏距离:最常见,直接在原始特征空间或 PCA 空间里算 √Σ(xᵢ − yᵢ)²
  • 1 − 相关性:基因表达数据常用(1 − Pearson 或 1 − Spearman),”相关性高 = 距离近”
  • 1 − 余弦相似度:文本/高维数据常用

例子

假设有两组样本,A 组 3 个、B 组 3 个,A 里有个样本 x:

  • x 到 A 组另两个样本的平均距离 = 2 → a(x) = 2
  • x 到 B 组三个样本的平均距离 = 5 → b(x) = 5
  • s(x) = (5 − 2) / max(2, 5) = 3 / 5 = 0.6 → 分得挺好

如果换一种情况,x 是 A 组里的”边缘样本”:

  • x 到 A 组另两个的平均距离 = 4
  • x 到 B 组三个的平均距离 = 3
  • s(x) = (3 − 4) / max(4, 3) = −0.25 → 这个样本其实离 B 更近,可能”贴错标签”了

轮廓系数 Silhouette coefficient 与效应量估计
https://www.porpaxcc.com/2026/09/13/轮廓系数Silhouette coefficient与效应量估计/
Posted on
September 13, 2026
Licensed under