1. ADMET 预测概述与交叉验证的重要性
ADMET 预测,说白了就是帮我们回答一个问题:这个化合物到底能不能成药?
吸收(Absorption)、分布(Distribution)、代谢(Metabolism)、排泄(Excretion)和毒性(Toxicity)——这五个词加起来,是药物研发能不能走下去的关键。我做了七八年的 ADMET 预测,亲眼见过不少活生生的例子:体外活性数据漂亮得不行,一上动物实验就出问题,要么肝毒性爆表,要么生物利用度低得离谱。
嗯,为什么会这样?
核心原因很简单:你建立的预测模型,没有经过严格可靠的验证。或者说得再直白一点——你拿来做模型评估的样本,跟模型训练时看到的样本太“像”了,导致评估结果虚高。
这就是交叉验证要解决的核心问题。
一句话总结:ADMET 预测模型的可靠性,取决于你如何验证它。交叉验证不只是一个技术细节,它是保证模型泛化能力、避免“过拟合欺骗”的第一道防线。
1.1 为什么 ADMET 预测比活性预测更需要交叉验证?
我刚开始接触 ADMET 建模时,总觉得跟做活性预测(比如 pIC50 预测)没什么区别。但很快发现——这两者根本不是一回事。
| 对比维度 | 活性预测 | ADMET 预测 |
|---|---|---|
| 数据量 | 通常较大(>10万) | 较小(几千~几万) |
| 标签异质性 | 实验室统一标准 | 实验条件差异大 |
| 分布偏移 | 相对可控 | 化学空间分布极不均匀 |
| 过拟合风险 | 中等 | 极高 |
你看,ADMET 数据集通常来自不同实验室、不同批次的实验,数据噪声大、结构多样性差。这时候你还拿传统的数据随机分割来验证,结果很容易“好看但不真实”。
我自己踩过最深的一个坑,就是用随机打乱的 5 折交叉验证评估了一个 CYP 抑制模型,R² 接近 0.85,结果一到外部测试集直接掉到 0.3 以下。后来复盘才发现——数据里有大量的同系物聚在一起,随机分割把相似结构分到了训练和测试两边,评估结果虚高。
1.2 交叉验证在 ADMET 中的核心作用
交叉验证不是万能的,但它能帮你解决三个最实际的问题:
- 评估真实性:通过多次训练-测试划分,你能更真实地估计模型在未见数据上的表现。
- 稳定性诊断:不同折的结果波动大,说明模型对数据的某些子集敏感,你需要看看是不是数据本身有问题。
- 超参数选择:没有可靠的验证,你根本不知道模型参数该往哪个方向调。交叉验证能给出一个相对稳定的评价标准。
我个人习惯,在任何一个 ADMET 项目开始时,先画一张验证策略的流程图。现在我就把它画出来。
这张图概括了我在项目中实际采用的验证流程。从数据准备到最终的指标报告,每一步都有明确的输入输出。
一个小技巧:我建议你在做 ADMET 项目时,把上面的流程固化成一个脚本模板,每次启动新任务就自动执行一次。省得自己漏掉步骤。
1.3 常见的验证陷阱,你中了几个?
我记得有一次给一个新团队做培训,我问他们用了什么验证方式,所有人回答都是“5折交叉验证”。再一问——数据随机分割。这几乎是个教科书级的问题。
常见的陷阱包括:
- 随机分割假象:ADMET 数据通常有很强的化学空间聚类,随机分割会高估模型性能。
- 单次划分赌运气:只用一次 train/test split 就下结论,结果严重依赖划分的随机性。
- 忽略时间依赖性:很多 ADMET 数据是分批产生的,时间维度上的分布偏移是真实存在的。
- 交叉验证与特征选择混在一起:在外部循环之外做特征选择,相当于提前“看了答案”。
警告:如果你在交叉验证的循环内部使用了整个数据集的统计信息(比如归一化时的均值和方差),你的评估结果已经产生偏差了。务必在每一折内部分别计算。
1.4 交叉验证怎么选?我的推荐清单
我根据自己的项目经验,总结了一个选型参考表。场景不同,验证策略完全不同。
| 场景 | 推荐验证策略 | 折数建议 |
|---|---|---|
| 数据量 < 500,且结构多样 | 留一法(LOO)或 10 折 | n 或 10 |
| 数据量 500 ~ 5000 | 分层 K 折(按骨架或活性区间) | 5 ~ 10 |
| 数据量 > 5000 | K 折 + 独立外部测试集 | 5 |
| 有时间顺序的数据 | 时间感知序列分割 | 按时间点划分 |
| 超参数需要同时调优 | 嵌套交叉验证 | 外 5 内 3 或 外 5 内 5 |
你可能会问:为什么折数要跟着数据量走?
因为折数越多,每次训练的样本量越接近全体,偏差越小,但方差会增大。数据量少的时候,这种 trade-off 需要你仔细权衡。
我的一个核心建议:永远不要在 ADMET 预测上用“默认”的随机交叉验证。你至少要搞清楚你的数据是不是有化学空间上的聚类,或者时间上的分布漂移。否则你得到的 R²、AUC 再漂亮,也只是自欺欺人。
好了,这一章我们聊了 ADMET 预测的背景、交叉验证为什么如此重要,以及验证策略的整体框架。后面的章节我会深入每一种验证方法的具体实现和代码细节。