跳到主要内容

07 无监督亚型发现

04 章的分类问题假设你已经知道每个样本的标签(Tumor / Normal,响应 / 不响应)。本章面对的是相反的问题:你怀疑你的样本里藏着几个未知的生物学亚型,想用算法把它们找出来。这是无监督学习,本质是数据驱动的分群。

无监督 vs 有监督的本质差异

维度04 章有监督分类07 章无监督亚型
输入是否有 label没有
训练目标学习"特征→label"的映射找特征空间中的"自然分群"
评估test 集 AUC / F1silhouette / 一致性指标 / 下游验证
失败模式过拟合(train 高 test 低)找出来的群在生物学上没意义
论文形态"我们用 X 模型把 A vs B 分得 AUC=0.95""我们发现 N 个新亚型,与生存差异显著相关"

无监督结果永远需要下游验证才有发表价值。光说"我找到了 4 个亚型"是不够的,必须证明这 4 个亚型在某些独立维度上有意义(生存、突变模式、临床特征)。

三种主流无监督方法

方法思路特点
ConsensusClusterPlus重采样投票,统计样本对"被分到一起的频率"选 k 有数学化指标,适合"我不确定有几类"的场景
NMF把表达矩阵分解成 features × k 和 k × samples假设亚型对应"非负基因 program",生物学上更自然但慢
iClusterPlus多组学整合(表达 + 甲基化 + CNV)适合多组学,只做表达稍微杀鸡用牛刀
k-means / hclust 单跑简单直接无验证,容易陷入随机性

实务建议:单组学表达数据用 ConsensusClusterPlus 当 baseline,因为它有一套成熟的 k 选择指标和可视化。NMF 用作交叉验证(看不同方法是否找到同样的亚型)。iClusterPlus 留给多组学项目。

ConsensusClusterPlus 核心思路

重复 reps 次:
随机抽 80% 样本子集
在子集上跑 hclust(k=2,3,...,maxK)
记录每对样本是否被分到同一类
统计每对样本"在所有重采样里被分到一起的频率" = 一致性矩阵 M_k
理想 M_k 应该是块对角:同亚型的样本对 → ≈ 1, 跨亚型 → ≈ 0

这个"投票"思想能筛掉 hclust 单跑时偶然的不稳定。reps 是关键参数:demo 用 200 看趋势,生产 / 论文必须 1000 起步。

三指标选最优 k

CDF 法(图 1)

每个 k 的一致性矩阵 M_k 上三角(去对角)取出来,画 CDF。理想形状:中段平坦 + 两端陡升。最像直角的 k 即最优,因为这意味着所有样本对要么稳定共聚要么稳定分开,没有"中等一致性"的灰色地带。

Δ(area) 法(图 2)

把每个 k 的 CDF 下面积算出来 = AUC(k),然后看 Δ_k = (AUC_k - AUC_{k-1}) / AUC_{k-1}。当 Δ_k 第一次 < 5%(经验阈值)时,前一个 k 即拐点最优。直观理解:再加一类带来的"分群质量提升"已经不显著了。

Silhouette(图 4)

用一致性距离 1 - M_k 计算每个样本的 silhouette score:

  • s_i > 0 该样本与同组比与最近异组更相似 → 聚得好
  • s_i < 0 反向,潜在误分配
  • mean silhouette > 0.5:很好;0.3-0.5:中等;< 0.3:弱聚类结构

实务:三指标都看,挑共识最强的 k。Δ(area) 给数学拐点,silhouette 给样本级质量,CDF 给整体形状,三者合起来才稳。

真实示例 — TCGA-LIHC

配套脚本 ml07_subtype_sci.R 在 02 章产物的 5000 HVG 上跑:

Rscript scripts/machine-learning/ml07_subtype_sci.R

跑完输出 derived/subtype_consensus_cluster/ 下:

  • cdf.png / delta_area.png / consensus_panel.png(选 k 三件套)
  • subtype_assignment.csv(每样本的最优 k 亚型)
  • subtype_km.png(亚型生存差异 KM)

在线一键复现

不想本地装 R 环境?把 02 章产物上传到 consensus-cluster 工具:

  • matrix.csv:行=特征,列=样本(02 章 expr_vst_hvg5000.csv 转置即可)
  • known_labels.csv(可选):两列 sample / label,用于 ARI 验证

工具自动跑 ConsensusClusterPlus + 选最优 k + silhouette + PCA + ARI,输出与脚本一致的 6 张 SCI 图。

consensus-cluster 公开 demo

公开 demo 用 200 features × 150 samples 子集 · 自动选 k*=4 · mean silhouette=0.818 · ARI vs Tumor/Normal=0.380。

ARI — 与已知标签对齐

很多场景下你有部分先验:比如 BRCA 想看 ConsensusClusterPlus 找出的亚型与公认的 PAM50 是否对应。Adjusted Rand Index(ARI):

  • ∈ [-1, 1],1 = 完美一致,0 = 随机水平
  • 0.7:发现亚型与已知标签强一致(说明数据和方法都靠谱)

  • 0.4-0.7:中等(部分对应,可能是发现亚型在已知大类下的细分)
  • < 0.4:弱(可能发现了正交于已知标签的新分群信号)

⚠️ ARI 低不是失败。如果你已知的是 PAM50 5 类但算法找了 3 类,ARI 必然偏低,这反映方法和已知划分的粒度不同,而非算法错。结合下游验证一起看才是正解。

无监督结果发表前必查 4 件事

ConsensusClusterPlus 给出的 N 个亚型在生物学上有意义吗?发表前一定查:

1. 生存差异(KM + log-rank)

亚型间 OS 是不是有显著差异?把 subtype_assignment.csv 拿到 km-survival 工具或 04 章脚本,跑 N-class log-rank。显著(p < 0.05)且 HR 单调 = 强信号;否则亚型可能只是聚类技术伪影。

2. 临床特征对齐

亚型 vs stage / grade / age 做卡方 / ANOVA。如果亚型只与 stage 高度相关,你"发现"的可能就是 stage 而非新生物学。

3. 突变 / 拷贝数模式差异

亚型间是否有差异 mutation pattern?用 maftools-mutation 工具按亚型分组对比。亚型特异 driver 是发表亮点。

4. 外部队列复现

最关键的一条。在另一个独立队列(GEO / ICGC)上用同一份 marker gene 列表 / signature 重跑分群,看亚型是否重现。外部不复现 = 不可发表

常见坑

不做标准化直接跑 — 高表达基因主导聚类,你"找到的亚型"其实是 housekeeping 的噪声。consensus-cluster 工具默认 z-score。

拿全 60K 基因直跑 — 噪声压倒信号,聚类结果不稳。先用 02 章 HVG 选 5000 → 03 章选 top 500-1000 → 再跑无监督。

reps 太少 — demo 用 200 看趋势,论文 / 投稿 1000 是底线。reps=50 时的"最优 k"在重跑时可能完全不同。

只看 Δ(area) 选 k — 数学拐点未必生物学有意义。结合 silhouette + 下游生存 + 文献已知亚型综合判断。

ARI 当唯一金标准 — ARI 低不等于聚类失败,可能是发现了正交分群。看下游验证。

同一份样本跑多次找最佳 k — 这是 cherry-picking。固定 seed,固定 reps,接受首次结果;否则 type I error 失控。

聚类后再去做特征选择 — 这是循环逻辑(用聚类结果定义类,再找区分这些类的特征)。如果要找亚型 marker,用 04 章工具,把亚型当 label 跑分类,得到的 importance 才是合理的"亚型特异基因"。

在线工具

consensus-cluster

在线跑 consensus-cluster — 上传特征矩阵 + 可选已知标签,自动选 k + 三件套图 + ARI 验证。

本章状态

✅ Wave 3 正文完成(2026-05-27)。consensus-cluster 工具已上线公开 demo:https://biof3.com/tools/#consensus-cluster

AI 陪学

让 AI 陪我学这一篇

AI 会读这篇文章后给你 3-5 步学习计划, 逐步陪你学完,最后出 1-3 道题验证你掌握得怎么样。 登录后 AI 才能记住你的进度。

静态文件

离线资料下载

手册 HTML / PDF 已在后台预生成,点击后直接下载网站静态资源。