机器学习在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、SVM | GCN、MPNN、Attention |
| 我的推荐场景 | 中小数据集,需要快速迭代 | 大数据集,追求SOTA精度 |
我经常跟团队说:「不要盲目追新技术」。关键看你的数据规模和任务类型。举个例子,预测logD(油水分配系数),用传统方法加上几个简单描述符就能做到R²=0.9以上,性价比极高。反倒是用复杂的GNN,计算量上去了,精度才提高零点零几——不值当。
从传统到深度学习:一个统一的视角
下面这张图展示了机器学习在ADMET预测中扮演的角色,以及传统方法与深度学习的统一流程:
说白了,无论是传统ML还是深度学习,做的都是同一件事:从结构到性质的映射。只是特征工程的主体从人变成了网络。你想想看,这在ADMET领域意味着什么?意味着我们可以用更大规模的数据、更复杂的结构信息来建模,那些以前没法用描述符表达的性质(比如代谢稳定性、血浆蛋白结合率)现在有了被预测的可能。
避坑指南:我走过的弯路
我曾经有个项目,盲目上了最火的GNN模型。 用了一个2000个分子的肝毒性数据集,跑GIN(图同构网络)花了三周调参,怎么调AUC都卡在0.78。后来我换成XGBoost加分子指纹,只用了两天就做到0.83。为什么?因为数据量太小,深度学习强行从图结构学出的表征,还不如手工特征的先验知识强。所以我想说的是:不要为了赶时髦而用复杂模型,先看数据集的规模和质量。
另一个常见坑是特征泄露。比如你同时用了描述符和指纹,但描述符里包含了logP,而logP本身又是一个关键ADMET属性——你要是用它去预测CLogP,那就是作弊。我有一年做过一个CYP2D6抑制模型,用了MolLogP作为特征,结果模型AUC达到0.96,我兴奋得不得了,后来才发现MolLogP本身就是用实验测的logP计算出来的,跟我预测的目标有共线性。交叉验证里因为数据划分随机,这种泄露很难发现,只有事后筛查特征相关性才暴露。嗯,这个教训让我后来养成了特征独立性的检查习惯。
小结与实践建议
从我的角度来看,机器学习的角色就是辅助决策、加速筛选、降低成本。说到具体落地,我建议大家这样选型:
- 数据量小于1000:直接上传统模型,比如随机森林或XGBoost。配合ECFP或MACCS指纹,效果就很好。
- 数据量1000~10000:可以尝试简单的GNN或LSTM,但要配合预训练。也可以继续用传统方法,会非常稳健。
- 数据量大于10000:深度学习的优势出来了。考虑用图神经网络或者分子Transformer,但注意数据质量和标签噪声。
- 始终做交叉验证:下一章我会详细讲,但这里提前说一句——不管用什么模型,没有交叉验证的ADMET预测都是耍流氓。我见过太多论文里不交叉验证、直接训练集测试集拆分,结果在外部验证集上崩掉的案例。
如果你刚开始做ADMET预测,一个稳妥的起点是:用RDKit计算2048位ECFP指纹,加上几个物化描述符(MW、logP、TPSA、HBD/HBA),然后用随机森林或XGBoost做10折交叉验证。这套方案我在三个不同数据集上验证过,AUC基本在0.82~0.92之间,性价比极高。