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的通用流程 1. 数据准备 分子SMILES + 实验值 2. 分子表征 指纹 / 描述符 / 图 3a. 特征工程 归一化/降维/筛选 3b. 数据分割 训练/验证/测试 4. 建模 训练+调参 5. 模型评估 R² / RMSE / AUC / 混淆矩阵 6. 应用 虚拟筛选 / 分子优化 反馈循环:根因分析 → 数据清洗 注意:批次效应可能在数据准备、分子表征、分割环节引入,影响最终预测准确性

这个流程里,最容易出问题的就是第一步和第二步。为什么?因为数据准备好了不代表能直接用——同一批实验测出来的值和另一批可能差很多,这就是批次效应。后面几章会专门拆解。

我自己的经验:永远不要相信直接从文献里扒下来的数据集。不同实验室、不同仪器、不同时间测出的同一种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、MAER²接近1且MAE小才算好模型
我曾经踩过的坑:用准确率评估一个hERG毒性预测模型,数据里只有5%是阳性。模型全预测为阴性,准确率95%,看起来不错,但完全没真本事。后来改成看AUC-PR,才暴露问题。所以务必根据数据分布选择合适的指标。

4.6 批次效应对机器学习的潜在影响

这一章的压轴话题。机器学习模型本质上是在学习训练数据的分布。如果不同批次的数据分布不一致,模型就会学到“批次相关信息”而非真正的ADMET规律。表现为什么?

  • 在训练集上表现很好,但在跨批次测试集上骤降。
  • 特征重要性里出现了一些奇怪的描述符(比如实验日期、仪器编号等元数据)。
  • 通过UMAP/T-SNE投影,能看到不同批次的分子在潜空间中明显分离。

我在一次预测口服生物利用度的项目中,训练集来自两个实验室的同一套标准化合物。结果模型在第三家实验室的数据上效果极差。后面一查,发现前两个实验室的测量值本身就有系统性偏差——它们各自的溶剂条件、pH缓冲液都不完全一样。这就是典型的批次效应。

后续章节会详细讲:如何检测批次效应、如何用数据校正方法消除、以及如何在模型训练中引入批次信息。但这里先记一个核心原则:不要假设所有ADMET数据是独立同分布的。在机器学习用于ADMET之前,最好先把数据标签和来源批次画个图,心里有点数。

小结
机器学习给ADMET预测带来了准确性和灵活性的提升,但也引入了对数据质量的更高要求。模型选得好不好,一要看你数据量,二要看你数据是否干净。批次效应是数据质量问题中最隐蔽、也最棘手的一种。咱们后面几章就专门啃这块硬骨头。