类别不平衡处理方法在蛋白配体中的应用 - 第2节

2.1 什么是类别不平衡?——先从一个真实案例说起

我记得刚入行那会儿,接手了公司一个激酶抑制剂的虚拟筛选项目。数据漂亮,模型也挺新,一跑结果,精确率95%,召回率也是95%。我当时心里还挺得意,觉得一次就做成了。结果领导看了一眼,问我:“你知道正样本和负样本比例是多少吗?”我翻了一下标签统计,当场就愣住了——活性化合物只有0.5%,非活性占了99.5%。

换句话说,模型只要学会“全判非活性”,就能拿99.5%的准确率。精确率和召回率双双95%,完全是假象。我那时才真正意识到,类别不平衡(Class Imbalance)这玩意儿,不是你在课本上看一条定义就能躲过去的。

所谓类别不平衡,说白了就是分类任务中,不同类别的样本数量差距悬殊。在药物发现里,活性分子和非活性分子的比例,经常是1:100甚至1:100000。拿这种数据直接训练,模型很快就被“多数类”带跑了——它觉得“多数类”就是世界的全部。

概念 通俗解释 蛋白-配体场景中的体现
多数类(Majority Class) 样本量占绝对优势的类别 非活性配体(decoy,负样本)
少数类(Minority Class) 样本量很少的类别 活性配体(active,正样本)
不平衡比(IR) 多数类样本数 / 少数类样本数 IR = 10 ~ 1000+ 常见于高通量筛选数据

2.2 它对模型的影响有多大?

有些人觉得不平衡顶多是“精度下降”。我告诉你,远不止这么简单。它会在模型行为上引发三个非常隐蔽的问题。

2.2.1 模型变成“复读机”

大多数深度学习模型用的损失函数,比如交叉熵,默认给每个样本的权重是一样的。少数类在整个训练批里几乎没存在感,损失被多数类淹没。模型学来学去,最后只学会一个无脑策略:无脑输出多数类。

结果就是:

  • 准确率看着很高(比如99%)
  • 但少数类的召回率几乎为0
  • 模型压根没有学到“活性”是什么,它只是复读机

我曾经在复现一个论文的蛋白-配体二分类模型时遇到过同样的事。论文声称AUC=0.97,我用相同的ROC曲线一算,确实差不多。可当我画出混淆矩阵,发现正样本的召回率只有3%。为什么?因为论文只报告了AUC,没告诉你实际召回率。这就是“复读机”掩耳盗铃的表现。

我曾经踩过的坑: 只盯AUC或Accuracy,结果模型上生产环境后,完全抓不出一个真正的活性分子。后来改成了兼顾Precision-Recall曲线来评估,才算落地。

2.2.2 概率校准漂移

Sigmoid输出不再是真实的概率,而是一个极度偏向多数类的校准值。你设定阈值0.5,结果99.9%的样本都落在0.5以下,活性信号被平滑掉了。比如说,你原来希望“置信度>0.8的分子优先实验”,但因为校准偏移,0.8对应的是极低的可能性。

2.2.3 梯度被稀释

拿GNN(图神经网络)来举例吧,配体和蛋白构建的交互图里,假设一个batch里有100个复合物,其中只有2个是活性的。反向传播时,正样本梯度的力量很快就被负样本淹没了。模型更不敢更新关于“氢键、疏水口袋方向”的参数,因为这些特征在80%的非活性结合中也是常规存在。

2.3 典型场景:活性与非活性

先说最简单的二元场景——活性vs非活性。你手里有个激酶靶点PDB结构,配体数据库里既有已知活性配体,也有疑似非活性配体。标签怎么来?

  • 实验标签: IC₅₀ < 1 μM 为活性;IC₅₀ > 10 μM 为非活性;中间值扔掉,避免“模糊区”
  • 虚拟筛选标签: 对接打分、分子动力学结合自由能等输出结果,这本身带着噪声

无论哪种,活性样本收集的成本都太高。做一轮实验花的钱和精力,足够你收集成百上千的非活性分子。结果就是,活性永远是那个少数类。

一个小建议: 对于实验标签,不要让中间活性(活性不确定的分子)参与分类,只保留两端差异大的,否则不平衡会加剧,且引入噪声。这是我在一次激酶筛选中被教训出来的经验。

2.4 典型场景:虚拟筛选

虚拟筛选(Virtual Screening, VS)是蛋白-配体发现中极典型的不平衡场景。你要做的事情是:从几百万个分子里找出大概率有活性的苗头分子。几千个分子用于训练,几百万个分子用于预测。

VS阶段 不平衡特点 典型IR
训练数据(已知库) 活性已知,但活性样本少 1:100 ~ 1:1000
测试/候选库 活性未知,非活性占绝大多数 1:10000 ~ 1:100000
实际实验验证 筛选出的Top分子再验证,但仍有大量假阳性 1:10 ~ 1:100

我记得去年做的一个VS项目,训练集里活性配体只有200个,非活性配体20万个,IR=1000。第一轮训练,模型直接瘫痪。用原始数据训练,预测结果几乎全是非活性。我尝试了过采样+权重调整组合,才把Top-50 Hits的真实活性率从0%拉到12%。

虚拟筛选场景下,不平衡带来的核心痛点是:

  1. 正样本太稀缺,模型学不出足够泛化的活性模式
  2. 候选库中有大量decoy(假阴性非活性),数量级悬殊导致假阳性爆炸
  3. 评估很贵,你不能等全部预测做完才看效果,在早期就得了解不平衡问题的严重性

2.5 到底该怎么应对?一个简要框架

我先给你一个宏观路线图,后面章节会一个个拆解。这个框架是我在做化学信息学项目时,自己沉淀出来的三个层级方案。

类别不平衡应对策略框架(蛋白-配体场景) 第1层:数据层面 · SMOTE / ADASYN 过采样 · 随机欠采样 / Tomek Links · 分子生成(GAN / VAE) 第2层:算法/模型层面 · 类别权重 (Focal Loss) · 多任务联合学习 · 深度距离度量学习 第3层:评估与选择 · PR AUC / F1 / MCC · 保留排序 / Top-K富集率 · 混淆矩阵可视化 建议:三管齐下,而不是只走一条路 · 先做数据增强或重采样,解决数据层面信息缺口 · 再用损失权重/目标函数惩罚模型对多数类的偏袒 · 最后用PR曲线/富集率做客观评估,不能只看Accuracy 对应的课程章节: 数据层 → 第3-10章;算法层 → 第11-18章;评估层 → 第19-23章 ⚡ 避坑指南:先做数据层面——它最直接且不引入模型改动风险。 我曾直接跳进算法层调损失函数,调了一周发现不如一开始多生成几 个活性构象的SMOTE来得快。

2.6 小结:别忽视不平衡,也别被它吓住

类别不平衡不是bug,它是蛋白-配体数据的天然属性。你没法绕过它,但可以在理解它之后,从容应对。记住三个要点:

  • 定义很直接: 正样本远少于负样本,IR >= 10就值得警惕
  • 影响很隐蔽: 模型变复读机、概率偏移、梯度稀释,三种“慢性病”
  • 场景很现实: 活性筛选和非活性筛选在虚拟筛选里几乎是永恒的不平衡冲突