课程介绍与背景:蛋白配体相互作用预测中的类别不平衡问题概述
为什么我们要聊这个?——先从一个尴尬的现实说起
我个人习惯在做任何项目前,先把问题本身想清楚。蛋白配体相互作用预测,说白了就是判断一个小分子能不能和某个靶点蛋白结合。这事在药物发现里有多重要,不用我多讲。
但你想想看,一个真正的药为什么能工作?它得跟靶点蛋白结合得够好,同时还得不跟其他蛋白乱结合。这里就引出了一个核心难题:在这个预测任务里,正样本(结合)和负样本(不结合)的数量差得太远了。
我记得刚入行做虚拟筛选那会儿,带我的前辈就说过一句话:
“你做一万个分子去筛,能中一个就算你运气不错了。”
这话我到现在还记得。因为在真实的药物筛选场景里,活性分子与无活性分子的比例,往往在 1:100 到 1:10000 之间。这是什么概念?你拿到的数据,正样本可能只有几十条,负样本却堆了上万条。
这就是我们常说的类别不平衡(Class Imbalance)问题。它不是什么新鲜事,但在蛋白配体预测这个领域,它的影响尤为致命。
不平衡问题在蛋白配体预测中的三种表现
我见过很多刚接触这个方向的同学,上来就抄别人的模型跑默认参数,结果精度看起来挺高,一部署就崩了。为什么呢?其实就是没理解不平衡怎么影响实际应用。
我把常见的表现归纳为三种,你对照着看:
| 表现类型 | 具体现象 | 实际后果 |
|---|---|---|
| 分类偏差 | 模型倾向于把所有样本都预测为负类 | 一个真正的活性分子被直接过滤掉,漏掉潜在药物 |
| 指标失真 | 准确率很高,但召回率极低 | 看着模型acc 98%,实际上正样本一个都没抓住 |
| 泛化崩溃 | 在训练集上表现良好,但在新靶点上完全失效 | 模型只学会了区分“大多数”,没有学到真正的结合模式 |
你可能会问:那为什么不用更复杂的模型来硬扛?我试过。我曾经把一个Transformer搬到分子性质预测上,结果因为不平衡太严重,模型直接摆烂——全输出“不结合”。这种“懒汉行为”在深度学习中太常见了。
真实数据长什么样?
拿一个我常用的公开数据集举个例子。你打开PDBBind或者BindingDB,清点一下样本:
总样本数: 125,000
正样本(高亲和力): 1,234 (0.99%)
负样本(低亲和力或无结合): 123,766 (99.01%)
正负比例: 1 : 100.3
这种比例下,如果你不加任何处理就去训练一个二分类器,它很容易学到一个“万能解”——全都判负得99%的准确率。但很明显,这对药物发现毫无帮助。
说到这里,我插一句。我遇到过不少同学拿这种数据去跑xgboost,然后很开心地跟我讲acc有97%。我一问召回率——2%。这就是典型的被指标骗了。
传统的应对方法——它们能顶用吗?
在进入课程正文之前,我想让你先瞄一眼常见的解决思路。我们后面会逐一细讲,这里先做个全景图:
这张图展示了我们后续课程的主干。你可以看到,数据层、算法层、评估层三条线,哪一条都不能少。我在实际项目里踩过的坑,多半都是因为只盯着一条线使劲。
一个绕不开的陷阱:生存偏差
这个问题我不提一下心里不踏实。在蛋白配体数据里,正样本往往来自已经发表的论文或PDB数据库。这意味着什么?
- 它们都是有报道活性的分子——是被“筛选出来”的。
- 那些被筛掉的无活性分子,很少被发表。
- 于是你手头的“负样本”其实是实验者标注的“没兴趣”,而不是真正的“不结合”。
这种生存偏差(Survivorship Bias)在药物数据里极其普遍。我曾经在处理一个GPCR靶点数据集时,发现标注为“负样本”的分子,其实里面有相当一部分根本没有做过实验验证。这就是典型的脏数据加了不平衡,雪上加霜。
为什么传统方法在蛋白配体场景中经常翻车?
你可能会想:既然不平衡是个老问题了,那直接用经典的SMOTE或者随机过采样不就行了?
嗯,我刚开始也这么想。但试过之后发现,在分子数据上,这些方法经常水土不服。
- 分子空间不是欧几里得空间——简单的SMOTE在相邻分子间插值,容易生成物理上不存在的分子结构。
- 结构相似不等于结合相似——两个结构非常相似的配体,可能一个结合一个不结合。过采样增加相似样本,反而会固化模型的错误认识。
- 化学多样性被忽略——蛋白配体预测真正需要的是学到多样性的结合模式,而不是在少量正样本里来回打转。
我记得有一次,我对一个激酶数据集做SMOTE过采样,生成了200个“合成正样本”。结果在测试集上,模型对其中180个预测正确,但对真正的全新配体,预测能力几乎没有提升。说白了,那些合成样本只是噪声,不是知识。
关键洞察:在蛋白配体场景中,类别不平衡的本质不是简单的数量问题,而是信息不平衡。正样本不仅仅少,而且它们的化学空间覆盖度极度稀疏。这是后续课程中所有方法设计的核心出发点。
这门课我们会怎么讲?
我不想给你堆一堆论文里的公式然后说“你回去自己看”。我的想法是,每一章都聚焦一个具体的方法,我会告诉你:
- 这个方法背后的直觉——说白了就是它凭什么能对付不平衡?
- 它适用于什么类型的蛋白配体数据?
- 我在实际项目中用这个方法踩过哪些坑?
- 最后,一个可运行的代码示例——让你能在自己的数据上立即复现。
比如说,我们后面会详细讨论专门的分子过采样方法(比如MoleculeSMOTE),代价敏感损失的设置技巧,以及怎么用AUC-PR而不是AUC-ROC来评估你的模型。这些在一般的机器学习教程里很难找到,但在蛋白配体预测中却是保命技能。
一点题外话——关于这门课的心态
做蛋白配体预测的类别不平衡处理,很多时候不是技术问题,而是决策问题。你要决定:
- 你更担心漏掉一个潜在药物(假阴性)?
- 还是更担心把预算浪费在错误的候选分子上(假阳性)?
这两种权衡,在不同项目阶段完全不同。我早年间接一个合作项目时,就因为没跟对方确认这点,最后做了三版模型才满足需求。所以后面我们讲方法的时候,我都会单独提一句:这个方法偏向哪一类错误?