机器学习在ADMET预测中的角色:从传统方法到深度学习

大家好,我是老赵,做ADMET预测这行快十年了。今天咱们聊聊机器学习在这个领域到底扮演什么角色,以及从传统方法到深度学习,这条路是怎么走过来的。

为什么ADMET预测需要机器学习?

传统上,药物研发里评估ADMET靠的是实验。体外实验、动物实验,周期长、成本高。我早年在一个项目里,花了八个月合成了一百多个化合物,送去做hERG测试——结果只有三个过线。那感觉,说白了就是「白干了」。从那以后,我开始认真思考:能不能用计算模型提前筛掉那些明显有问题的分子?

后来我逐渐意识到,ADMET性质本质上是一种从分子结构到生物活性的映射。而这个映射,恰恰是机器学习擅长的事。你给它一堆分子描述符和对应的实验数据,它能自己学会规律。

传统机器学习方法:经典但有效

早期我们用的就是随机森林、支持向量机、梯度提升树这些。它们的特点是:特征要人工设计,模型解释性好,数据量不大也能跑。

我记得2016年做过一个Caco-2渗透性预测模型,训练集只有800个化合物。当时试了神经网络,结果极其不稳定,表现还不如随机森林。后来我分析,问题出在特征维度太高(用了2500个分子指纹),而样本量不够。换成随机森林,配合特征筛选,最后AUC做到了0.87。

常用的传统模型有这些:

模型优点我在项目中踩过的坑
随机森林鲁棒性强,自带特征重要性超参数调优时n_estimators设太大,训练时间翻倍,效果没提升
SVM适合小样本,核技巧灵活曾经对Caco-2数据用RBF核,结果过拟合——R²从0.85掉到0.62,交叉验证才暴露问题
XGBoost能力强,支持缺失值早期版本不支持GPU,六十万化合物训练了三天三夜,后来换成LightGBM才活过来
朴素贝叶斯计算超快,适合初步筛选遇到特征强相关时效果极差,比如Morgan指纹和MACCS指纹一起用,反倒降低了AUC

传统方法的局限很明显:你得手工设计描述符。比如脂溶性用logP,分子量用MW。但有些ADMET性质跟分子形状、电子分布相关,手工特征很难刻画全。

深度学习的崛起:自动特征工程

2017年之后,深度学习开始在ADMET预测中爆发。核心优势是什么?自动从分子结构学习表征。你不用再绞尽脑汁设计特征,给模型一个SMILES字符串或者分子图,它自己就能提取出有用信息。

主流深度学习架构:

  • 图神经网络(GNN):把原子当节点,键当边,做消息传递。对分子结构天然匹配。
  • 分子图Transformer:引入注意力机制,能捕捉长程相互作用,比如蛋白-配体间的疏水接触。
  • SMILES-RNN/LSTM:把分子当成文本序列,用循环神经网络建模。简单直接,但容易遗忘全局拓扑。
  • 3D卷积网络:将分子叠到格点上,输入三维CNN。适合处理结合口袋预测。

我个人习惯:对于hERG分类任务,先用GNN做预训练(比如用ZINC15自监督),再小样本微调,效果通常比从头训练好10%左右。我一个朋友甚至用这个方法在一个只有200个阳性的数据集上拿到了0.94的AUC。

不过深度学习也不是万能药。对一个只有500个样本的数据集,直接上DeepMind那种大模型会直接崩掉——我试过,验证集AUC只有0.61,还不如随机森林的0.82。所以数据量跟模型复杂度要匹配,这是基本原则。

传统方法与深度学习的对比

维度传统ML深度学习
特征工程需要专家设计描述符自动学习表征
数据量需求几百到几千样本即可通常需要上万样本
可解释性特征重要性、SHAP值清晰较难,GNNExplainer等工具尚不成熟
计算开销CPU分钟级GPU小时级
代表性模型RF、XGBoost、SVMGCN、MPNN、Attention
我的推荐场景中小数据集,需要快速迭代大数据集,追求SOTA精度

我经常跟团队说:「不要盲目追新技术」。关键看你的数据规模和任务类型。举个例子,预测logD(油水分配系数),用传统方法加上几个简单描述符就能做到R²=0.9以上,性价比极高。反倒是用复杂的GNN,计算量上去了,精度才提高零点零几——不值当。

从传统到深度学习:一个统一的视角

下面这张图展示了机器学习在ADMET预测中扮演的角色,以及传统方法与深度学习的统一流程:

机器学习在ADMET预测中的角色 分子结构(SMILES/图) 手工特征(描述符) 传统模型(RF/XGBoost) 自动特征提取(GNN/CNN) 深度神经网络模型 ADMET预测结果 可吸收性、毒性风险、代谢稳定性…… 数据量小 → 走传统路线 数据量大 → 走深度学习

说白了,无论是传统ML还是深度学习,做的都是同一件事:从结构到性质的映射。只是特征工程的主体从人变成了网络。你想想看,这在ADMET领域意味着什么?意味着我们可以用更大规模的数据、更复杂的结构信息来建模,那些以前没法用描述符表达的性质(比如代谢稳定性、血浆蛋白结合率)现在有了被预测的可能。

避坑指南:我走过的弯路

我曾经有个项目,盲目上了最火的GNN模型。 用了一个2000个分子的肝毒性数据集,跑GIN(图同构网络)花了三周调参,怎么调AUC都卡在0.78。后来我换成XGBoost加分子指纹,只用了两天就做到0.83。为什么?因为数据量太小,深度学习强行从图结构学出的表征,还不如手工特征的先验知识强。所以我想说的是:不要为了赶时髦而用复杂模型,先看数据集的规模和质量。

另一个常见坑是特征泄露。比如你同时用了描述符和指纹,但描述符里包含了logP,而logP本身又是一个关键ADMET属性——你要是用它去预测CLogP,那就是作弊。我有一年做过一个CYP2D6抑制模型,用了MolLogP作为特征,结果模型AUC达到0.96,我兴奋得不得了,后来才发现MolLogP本身就是用实验测的logP计算出来的,跟我预测的目标有共线性。交叉验证里因为数据划分随机,这种泄露很难发现,只有事后筛查特征相关性才暴露。嗯,这个教训让我后来养成了特征独立性的检查习惯。

小结与实践建议

从我的角度来看,机器学习的角色就是辅助决策、加速筛选、降低成本。说到具体落地,我建议大家这样选型:

  1. 数据量小于1000:直接上传统模型,比如随机森林或XGBoost。配合ECFP或MACCS指纹,效果就很好。
  2. 数据量1000~10000:可以尝试简单的GNN或LSTM,但要配合预训练。也可以继续用传统方法,会非常稳健。
  3. 数据量大于10000:深度学习的优势出来了。考虑用图神经网络或者分子Transformer,但注意数据质量和标签噪声。
  4. 始终做交叉验证:下一章我会详细讲,但这里提前说一句——不管用什么模型,没有交叉验证的ADMET预测都是耍流氓。我见过太多论文里不交叉验证、直接训练集测试集拆分,结果在外部验证集上崩掉的案例。

如果你刚开始做ADMET预测,一个稳妥的起点是:用RDKit计算2048位ECFP指纹,加上几个物化描述符(MW、logP、TPSA、HBD/HBA),然后用随机森林或XGBoost做10折交叉验证。这套方案我在三个不同数据集上验证过,AUC基本在0.82~0.92之间,性价比极高。