4. 机器学习在ADMET预测中的应用概述
说到ADMET预测,我入行那会儿大家还全靠经验和规则。什么“Lipinski五规则”、“Veber规则”,一个个背得滚瓜烂熟。但说实话,那些规则只能筛掉明显不合格的分子,真到了候选化合物优化阶段,总是差那么一口气。
后来机器学习进来了。我印象最深的是2016年左右,刚用上随机森林预测Caco-2渗透性,效果比当时的手工QSAR模型好了一大截。从那以后,我就彻底成了“数据驱动派”。
这一章,咱们就聊聊机器学习在ADMET里到底能干什么、常用的模型有哪些、应该怎么选。我尽量挑干货讲,不扯虚的。
4.1 机器学习解决了什么问题?
传统ADMET预测主要靠物理化学规则和线性QSAR。规则简单直接,但有个致命问题——它假设分子性质之间没有复杂的相互作用。你想想看,一个分子的代谢稳定性、透膜性、水溶性,它们之间是相互拉扯的,不是割裂的。
机器学习的好处在于:它能自动从数据里找到这些非线性关系。比方说,一个分子带杂环可能降低代谢稳定性,但同时又能提高溶解性——这种“跷跷板”效应,线性模型很难捕捉,但树模型或者神经网络可以。
核心价值三点:
- 非线性拟合能力——不再受规则边界限制,能拟合更复杂的结构-活性关系。
- 多任务学习——用一个模型同时预测多个ADMET终点,比如同时预测清除率和口服生物利用度。
- 可扩展性——数据量越大,效果越好;不像规则模型,数据多了反而矛盾百出。
4.2 主流模型类型一览
ADMET里常见的机器学习模型就那几类,我把它们列了个表。说实话,十几年下来,没有哪个模型是万能的。选模型就像挑工具,得看你的数据量和任务类型。
| 模型类型 | 典型算法 | 适用场景 | 我的看法 |
|---|---|---|---|
| 树集成模型 | 随机森林、XGBoost、LightGBM | 中等数据量(几百~几万样本),特征维度不高 | 最稳健,我80%的项目首选随机森林 |
| 支持向量机 | SVR、SVC | 小数据量(<500样本),特征工程做得好 | 速度快,但调参烦,现在用得少了 |
| 深度神经网络 | MLP、GNN、Transformer | 大数据量(>10万),或者需要学习分子拓扑结构 | 图神经网络是当前热点,但容易过拟合 |
| 贝叶斯方法 | 高斯过程、朴素贝叶斯 | 小样本且需要不确定性估计 | 主动学习里会用到,日常预测不常见 |
我个人习惯:如果样本量 < 1000,先上随机森林;如果样本量在 1000 ~ 10000,试试 XGBoost 并做简单调参;如果样本量 > 10万,再考虑 GNN 或 MLP。千万别一上来就上深度学习,否则很容易在批次效应上翻车——后面章节会重点讲这个问题。
4.3 经典工作流程:从分子到预测值
不管用什么模型,ADMET预测的流程大同小异。我画了一张流程简图,你看一眼就能记住。
这个流程里,最容易出问题的就是第一步和第二步。为什么?因为数据准备好了不代表能直接用——同一批实验测出来的值和另一批可能差很多,这就是批次效应。后面几章会专门拆解。
我自己的经验:永远不要相信直接从文献里扒下来的数据集。不同实验室、不同仪器、不同时间测出的同一种ADMET性质,差异可能大到让你怀疑人生。拿到数据先做可视化,画个主成分分析散点图,看看有没有明显的批次聚类。这一步能帮你省掉后面80%的调试时间。
4.4 特征工程:到底选指纹还是描述符?
这个问题我当年纠结了很久。简单说:
- 分子指纹(比如ECFP、MACCS)适合解释性要求不高的场景,尤其图神经网络里天然用指纹作为节点特征。缺点是指纹维度高,很多特征冗余,直接扔进随机森林会慢。
- 物理化学描述符(比如logP、分子量、氢键供体数)更有物理含义,适合给传统机器学习模型用。缺点是依赖计算软件(比如RDKit、Mordred),而且有些描述符相关性太强,需要做特征筛选。
我的建议:如果数据量小(< 2000),用描述符组合+简单筛选;数据量大,用指纹或者图表示。在实际项目里,我经常两种一起试,然后选交叉验证表现最好的。别迷信某一种,数据说了算。
示例:用RDKit同时生成分子指纹和描述符
from rdkit import Chem
from rdkit.Chem import AllChem, Descriptors, MACCSkeys
mol = Chem.MolFromSmiles('CCO')
# 摩根指纹(ECFP4)
fp = AllChem.GetMorganFingerprintAsBitVect(mol, 2, nBits=2048)
# MACCS密钥
maccs = MACCSkeys.GenMACCSKeys(mol)
# 物理化学描述符
logP = Descriptors.MolLogP(mol)
mw = Descriptors.MolWt(mol)
不过要注意,指纹和描述符本身也可能带有批次效应特征——比如在某些批次的实验里,logP是用不同方法测的。这个坑在第五章会专门讲怎么处理。
4.5 评估指标的选用
分类问题(比如是否hERG毒性)和回归问题(比如清除率数值),用的指标不一样。我列了个常用表:
| 任务类型 | 常用指标 | 说明 |
|---|---|---|
| 二分类 | AUC-ROC、AUC-PR、准确率、F1-score | 类别不平衡时优先看AUC-PR |
| 多分类 | Macro-F1、Cohen's Kappa | 避免简单准确率被多数类淹没 |
| 回归 | R²、RMSE、MAE | R²接近1且MAE小才算好模型 |
4.6 批次效应对机器学习的潜在影响
这一章的压轴话题。机器学习模型本质上是在学习训练数据的分布。如果不同批次的数据分布不一致,模型就会学到“批次相关信息”而非真正的ADMET规律。表现为什么?
- 在训练集上表现很好,但在跨批次测试集上骤降。
- 特征重要性里出现了一些奇怪的描述符(比如实验日期、仪器编号等元数据)。
- 通过UMAP/T-SNE投影,能看到不同批次的分子在潜空间中明显分离。
我在一次预测口服生物利用度的项目中,训练集来自两个实验室的同一套标准化合物。结果模型在第三家实验室的数据上效果极差。后面一查,发现前两个实验室的测量值本身就有系统性偏差——它们各自的溶剂条件、pH缓冲液都不完全一样。这就是典型的批次效应。
后续章节会详细讲:如何检测批次效应、如何用数据校正方法消除、以及如何在模型训练中引入批次信息。但这里先记一个核心原则:不要假设所有ADMET数据是独立同分布的。在机器学习用于ADMET之前,最好先把数据标签和来源批次画个图,心里有点数。
机器学习给ADMET预测带来了准确性和灵活性的提升,但也引入了对数据质量的更高要求。模型选得好不好,一要看你数据量,二要看你数据是否干净。批次效应是数据质量问题中最隐蔽、也最棘手的一种。咱们后面几章就专门啃这块硬骨头。