3.3.1 基线的三重价值
深度模型登场之前,先要立一个诚实的参照。基线(baseline)是为回答“新增的复杂度是否换来真实增益”而设的简单模型。本章的默认基线是 ECFP 指纹加随机森林:前者把分子压成 0/1 位向量(2.5 节),后者在这些比特上生长决策树。这套组合无须 GPU,几分钟跑完一个数据集,却在分子性质预测的对照席上常坐至今(Wu et al., 2018)。基线不是稻草人,它的价值有三重:校准预期、暴露缺陷、意外强势。
校准预期。任何新方法的成绩,只有相对基线的超出才有意义;超出量还必须明显大于划分随机性带来的波动。3.8 节将给出多次重复划分下的方差量级,此处先记一条经验:在这类数据集上,单次划分之间 ROC-AUC 相差一两个百分点并不罕见。低于此的“提升”,无论图表多漂亮,都算不得证据。基线把“多好才算好”从直觉问题变成数值问题。
暴露缺陷。基线是数据泄漏(data leakage)的探测仪。随机森林容量有限,只能利用特征里直接可及的信息;若它在性质预测任务上拿到近乎满分的成绩,第一怀疑对象不是“模型太强”,而是评估流程有洞。典型漏洞有二:随机划分让同一分子或高度相似的骨架同时落在训练集与测试集,测试于是不再考察泛化;特征里混入了与标签同源的信息。泄漏会抬高一切模型的成绩,但朴素基线的反常最容易被认出来——正因它简单,“不该这么好”的直觉才有立足点。对照实验的思路在此完全适用:把标签随机置换后重跑基线,AUC 应回落到 0.5 附近;若仍居高不下,流程必有洞。
意外强势。基线常常输得不那么彻底。MoleculeNet 基准在毒性与生理类数据集上的系统比较显示,ECFP 加随机森林(或逻辑回归)与图卷积网络的成绩处于同一量级,互有胜负(Wu et al., 2018)。分子图的信号,不少就藏在“子结构有无”这类局部模式里,指纹已把它们编进位向量;树集成恰好擅长在稀疏 0/1 特征上做组合判别。这一事实为全章定调:图模型的价值要相对强基线度量,而非相对弱实现。
基线的使用纪律。基线与候选模型共用同一划分、同一指标、同一预处理;报告“提升”时同时报告划分波动(3.8 节);基线成绩反常时,先查评估流程,再谈模型优劣。三条齐备,基线才是对照实验里的对照组,而不是陪跑的稻草人。
3.3.2 随机森林:指纹位上的分裂、装袋与去相关
决策树(decision tree)在 ECFP 位向量上的每一次分裂,都在问一个比特:分子里有没有某个子结构。分裂把样本按“有/无”分作两桶,逐层问下去;一条根到叶的路径就是一条合取规则——“含子结构 A 且不含 B,则预测有毒性”。问哪个比特、问在哪儿,由不纯度(impurity)下降决定。以基尼不纯度为例,结点 D 内两类占比为 π正、π负时:
图 3.3-1 给出一棵两层小树。根节点把 20 个分子按“有无子结构 A”分成 13 与 7 两桶,加权基尼从 0.500 降到 0.363;第二层的增益已经明显变小。单棵树靠贪心逐层挑选,越往下可用信号越薄;换一批分子,选中的比特可能完全不同——单树方差大、不稳定,这正是集成的切入点。
随机森林(random forest)用两重随机性把许多棵深树平均掉(Breiman, 2001)。第一重是自助聚合(bootstrap aggregating, bagging):以有放回抽样的方式从训练集复制出 B 份数据,每份生长一棵树。若各树输出的方差为 σ²、两两相关系数为 ρ,则平均后的方差为:
装袋的成员要刻意长深:单树偏差小、方差大,平均恰好削掉方差;若棵棵剪得很浅,成员高度相似,平均无从谈起。最大深度、每叶最少样本数是少数值得留意的超参,默认配置已接近可用——这是随机森林“开箱即稳”名声的来源。
第二重随机性在每个结点上:分裂时只在随机抽取的 m 个比特里挑选,m 常取特征总数的平方根量级。子结构之间常共现——含稠环的分子多半同时点亮多个芳香环比特;限定候选让各树依赖不同的局部模式,树与树因此去相关。Breiman 给出的泛化误差上界把两件事摆在同一个式子里:树间平均相关 ρ̄ 越低、单树强度 s 越高,森林的界越紧(Breiman, 2001):
预测时 B 棵树表决。二分类把“投正”的树占比当作分数:
这套机制天然适配高维稀疏 0/1 特征。分裂本身就是布尔判断,无须任何缩放;重要子结构哪怕只占少数比特,也会在贪心挑选中浮出;比特间的组合效应——A 单独无效、与 B 并存才有效——由路径深度免费获得,恰是构效关系中“药效团 = 子结构组合”的雏形。代价同样清楚:树贪心、分段常数、不能外推,测试分子落到训练分数未覆盖的区域时,只能给最邻近的桶。
特征重要性(feature importance)把每个结点的不纯度下降记到所选比特头上,全森林求和平均。把高分比特翻译回子结构(2.5 节的指纹位与子结构映射),常能直接读出“哪些官能团在推动毒性预测”,这是树模型给机理研究的一点馈赠。偏置必须记牢:不纯度下降偏向提供更多切分方式的高基数特征——连续特征的重要性会系统性虚高;0/1 比特之间此偏置较弱,但稀有比特与常见比特的切分机会不等,排序仍可能失真。置换重要性(打乱单个特征后看性能下降多少)是更公平的对照。无论哪种,重要性终归是相关性证据,不构成因果断言。
3.3.3 对照:梯度提升的另一条路
同为树集成,梯度提升(gradient boosting)把“并行平均”换成“序列纠错”:每棵新树拟合当前集成损失的负梯度——残差的泛化方向——浅树一小步一小步逼近,学习率控制步长。随机森林用深树各自拟合、互相抵消方差;梯度提升用浅树串行补台、逐步削偏差。XGBoost、LightGBM 是后者的工程化实现,以正则化目标与直方图分裂把这个范式推到大规模表格数据的事实标准位置(Chen & Guestrin, 2016)。分子建模里,二者都可选作第二基线:梯度提升对微弱信号榨取更彻底,随机森林更不易因早期过拟合而骗过验证集(Pedregosa et al., 2011)。
随机森林(并行平均)
深树各自拟合一部分数据,bootstrap 与结点级特征子集让错误互不相关;平均压低方差。超参不敏感,开箱即稳。梯度提升(序列纠错)
浅树逐步拟合负梯度,收缩与子抽样控制过拟合;串行削偏差。性能上限常更高,调参更挑剔。3.3.4 从混淆矩阵到 ROC:阈值扫动出的轨迹
指纹与森林把每个分子映成分数 ŝ(x) ∈ [0, 1]。要谈对错,先要定阈值 t:ŝ ≥ t 判正。给定阈值,四种结局的计数排成混淆矩阵(confusion matrix)——真阳性 TP、假阳性 FP、真阴性 TN、假阴性 FN。其中两个比率撑起后续全部讨论:
让 t 从 +∞ 走到 −∞:起点全判负,(FPR, TPR) = (0, 0);终点全判正,(1, 1);中间每个 t 给一点。这些点连成的阶梯,就是 ROC 曲线(receiver operating characteristic curve)。名字来自信号检测理论——雷达操作员在噪声里分辨信号,画出的正是这条曲线(Fawcett, 2006)。有限样本下它必然是阶梯:每个正样本贡献一次高 1/n₁ 的上台阶,每个负样本贡献一次宽 1/n₀ 的右台阶,n₁、n₀ 为正、负样本数。
ROC 曲线与 AUC。分类器给每个样本输出连续分数 s;对阈值 t,判决 s ≥ t 为正。t 取遍实数时,点 (FPR(t), TPR(t)) 在单位正方形内描出的轨迹为 ROC 曲线;轨迹与横轴围成的面积为 ROC 曲线下面积(area under the ROC curve, AUC),取值 [0, 1]。对角线对应随机排序,AUC = 1/2;完美排序先沿左边界上行、再沿顶边界右行,AUC = 1。
阶梯的粒度还给出一条常被忽略的告诫:有限样本下,AUC 只能取 1/(n₁n₀) 的整数倍(并列再取半)。4 正 6 负的迷你测试集上,AUC 的全部可能取值只有 0、1/24、2/24……分辨率由测试集里少数一方的个数决定。小任务的 AUC 出现细微差异时,先问分辨率,再谈优劣。
图 3.3-2 下方的分数轴给出直觉:10 个样本、4 正 6 负,实心点为正、空心点为负。阈值 t 自右向左扫,每跨过一个标记,ROC 走一步——跨过正样本上移,跨过负样本右移。正样本的标记大多靠右,即排序把正排在负之前,曲线便抬向上角;两个面板记录的是同一组分数、同一串台阶。
ROC 由此把“模型好坏”与“阈值选择”解耦:曲线是模型的全部工作点,工作点是部署时的选择。药物筛选两侧代价不对称——漏掉真活性化合物的代价高;毒性预警则另一侧更痛——误报会拖垮复核流程。同一曲线,取点不同;度量整条曲线的量,就是下一小节的 AUC。
3.3.5 AUC 的三种刻画与等价性
AUC 同时是三件事。其一,字面:ROC 曲线下面积(area under the ROC curve, AUC),
其二,概率。AUC 等于“随机取一个正样本、一个负样本,前者分数更高”的概率,并列计一半:
等价性的证明(先设分数互不相同,并列随后处理)。把全部样本按分数从高到低排序,让阈值从最高分向最低分扫。每跨过一个负样本,ROC 曲线向右移动一小段,宽 1/n₀;这段水平步下方的面积等于当时曲线的高度乘以步宽。当时的高度是 TP/n₁,其中 TP 是此刻已越过的正样本数——恰好等于分数高于该负样本的正样本个数。对全部 n₀ 个负样本求和:
其三,排序质量。式 (3.3-7) 里没有阈值,也没有分数的绝对数值:把分数通过任何严格单调增的函数,AUC 不变。AUC 度量模型的排序,不度量概率校准——投票占比 0.9 与 0.6 只要保持同样的相对次序,AUC 完全相同。同一模型改用 ŝ′ = ŝ³ 再算,AUC 分毫不动;换 Brier 分数这类依赖数值本身的度量,结果立刻不同。这既解释了 AUC 作为默认指标的地位(阈值未定时先比排序),也预告了它的盲区(3.3.6)。
手算例。秩法把式 (3.3-8) 变成四步算术。设五个样本,分数与标签如表 3.3-1。升序编秩后,正样本的秩为 3 与 5,秩和 R₁ = 8;n₁ = 2,n₀ = 3,代入:
| 样本 | 分数 ŝ | 标签 y | 秩 r(升序) |
|---|---|---|---|
| E | 0.3 | 0(负) | 1 |
| D | 0.6 | 0(负) | 2 |
| C | 0.7 | 1(正) | 3 |
| B | 0.8 | 0(负) | 4 |
| A | 0.9 | 1(正) | 5 |
秩法手算 AUC(Mann–Whitney U)。① 全部样本按分数升序排列并编秩 1…n;② 并列分数取平均秩;③ 求正样本秩和 R₁;④ AUC = [R₁ − n₁(n₁+1)/2] / (n₁n₀)。四步皆可在纸面完成,与程序输出的差别只在浮点误差。
习题 3.3-1
六个样本的分数(降序)为 0.9、0.7、0.7、0.5、0.4、0.2,标签依次为正、正、负、负、正、负。用秩法计算 AUC,注意并列分数的处理,并以逐对计数核对。
参考解答升序排列:0.2(负)秩 1;0.4(正)秩 2;0.5(负)秩 3;两个 0.7 并列占据第 4、5 名,各取平均秩 4.5(一正一负);0.9(正)秩 6。n₁ = 3,n₀ = 3,R₁ = 2 + 4.5 + 6 = 12.5。代入式 (3.3-9):AUC = [12.5 − 3×4/2]/(3×3) = 6.5/9 ≈ 0.722。逐对核对:正 0.9 胜全部三个负样本,得 3;正 0.7 与负 0.7 并列计 0.5,另胜 0.5、0.2,得 2.5;正 0.4 仅胜 0.2,得 1。合计 6.5,除以总对数 9,与秩法一致。
把基线与评估接起来,一个最小但完整的对照实验如下:固定划分(骨架划分),指纹喂给随机森林,逐任务计算 ROC-AUC。这一小段代码是 3.4 节起一切图模型的对照锚点。
import deepchem as dc
from sklearn.ensemble import RandomForestClassifier
tasks, (train, valid, test), _ = dc.molnet.load_tox21(
featurizer="ECFP", splitter="scaffold") # 固定划分,供后续所有模型对照
clf = RandomForestClassifier(n_estimators=500, n_jobs=-1) # 深树装袋,结点级子集默认去相关
rf = dc.models.SklearnModel(clf, model_dir="rf", mode="classification")
rf.fit(train) # 树只见 1024 位 0/1,不见图结构
auc = dc.metrics.Metric(dc.metrics.roc_auc_score) # 度量排序,与阈值无关
print(rf.evaluate(test, [auc])) # 基线成绩,写入对照表
| 模型 | 表示 | 划分 | ROC-AUC(逐任务均值) | 备注 |
|---|---|---|---|---|
| 随机森林 500 树 | ECFP,1024 位 | 骨架划分,种子固定 | 以复现为准 | 基线锚点,后续模型同表追加 |
| 图卷积(3.4) | 分子图,端到端 | 同上 | 待填 | 与基线同划分、同指标方可比较 |
这个数字本身没有绝对含义,它的价值全在对照:固定划分、固定指标、固定随机种子,之后每引入一个新模型,就在同一张表上追加一列。3.4 节起的图模型,都要回到这张表上与它相见。
秩法的四步同样可以用三行程序对账——原理先于工具,工具只为复核:
import numpy as np from scipy.stats import rankdata r = rankdata([0.3, 0.6, 0.7, 0.8, 0.9]) # 升序给秩,并列自动取平均秩 y = np.array([0, 0, 1, 0, 1]) # 与表 3.3-1 一一对应 R1, n1, n0 = r[y == 1].sum(), 2, 3 print((R1 - n1*(n1+1)/2) / (n1*n0)) # 0.833…,与手算一致
习题 3.3-2
正文用“跨过负样本的水平步”证明了 AUC 与有利样本对数的等价。请改用格点论证重证:把单位正方形铺成 n₀ 列 × n₁ 行的单位格,第 c 列对应降序排列中第 c 个被越过的负样本,第 r 行对应第 r 个被越过的正样本。证明每个格子对应唯一一个(正, 负)样本对,且该格落在阶梯曲线下方,当且仅当对应正样本的分数更高;再说明并列分数为何恰好各计一半。
参考解答阈值扫到第 c 个负样本时,曲线横坐标为 c/n₀;扫到第 r 个正样本时,纵坐标为 r/n₁。第 (c, r) 格覆盖横区间 [(c−1)/n₀, c/n₀]、纵区间 [(r−1)/n₁, r/n₁],它落在曲线下方,等价于曲线在该横区间上的高度不低于 r/n₁,即“越完第 c 个负样本时,至少已越过 r 个正样本”。而“第 r 个正样本先于第 c 个负样本被越过”恰是说第 r 个正样本的分数高于第 c 个负样本。于是格子在曲线下方 ⟺ 对应样本对中正样本分数更高;n₀n₁ 个格子与全部样本对一一对应,曲线下面积 = 有利格子占比 = 有利对数/(n₁n₀)。并列时,一对正负样本在同一个阈值处同时越步,阶梯走对角步、恰穿相应格子的对角线,上下各半,故计 0.5——与平均秩的处理等价。
3.3.6 AUC 的误读与陷阱
不平衡下的虚高。FPR 的分母是全部负样本。正负比 1 : 100 时,FPR = 0.05 听上去只是“每 20 个负样本冤枉 1 个”;换成查准率(precision)的口径立即现形:TPR = 0.9、FPR = 0.05 时,precision = 0.9π / [0.9π + 0.05(1−π)],π = 0.01 代入约得 0.15——每报 100 个“阳性”,约 85 个是误报。AUC 对这类失衡并不敏感:负样本基数巨大,右下方向的失误在 FPR 轴上几乎不挪动曲线,面积自然好看。
AUC 不承诺任何单个工作点。它是全部阈值的平均;高 AUC 可能由大量无关紧要的阈值区段贡献,而部署时只取一个 t。两条 AUC 相近的曲线完全可以在常用阈值区间交叉,此消彼长。阈值本身该由代价决定:给定漏报与误报的代价比,最优工作点在 ROC 上是斜率由代价比与类别占比共同决定的等代价线的切点(Fawcett, 2006)。决策一旦落到具体阈值与具体代价,应回到该工作点的 TPR、FPR 与查准率;AUC 只是选型阶段的粗筛。
PR 曲线的对照。查准率-查全率曲线(precision-recall curve)只用 TP、FP、FN,不含 TN:负样本基数不再稀释任何量,随机基线的高度就是阳性占比 π。图 3.3-2 右侧同一组分数的 PR 曲线里,基线 0.4 一眼可见。不平衡数据上 PR 曲线对模型差异更敏感,系统比较见 Saito & Rehmsmeier(2015)。惯例是两者都报,不平衡时以 PR 为主叙事。
多任务怎么平均。Tox21 一个数据集含 12 个任务,阳性占比普遍只有百分之几到百分之十几,任务难度参差。两条路:先把 12 个任务的预测并成一个大池算一个 AUC(池化),或逐任务各算 AUC 再取平均。惯例是后者:每个任务是一个独立的化学问题,分数跨任务不可比——任务甲的 0.6 与任务乙的 0.6 不是一个含义;池化还会让占比高、碰巧容易的任务主导总量,掩盖其余任务的失败。MoleculeNet 报告的正是逐任务 AUC 的平均(Wu et al., 2018)。
不平衡数据上读 AUC 的三条纪律。① 先看阳性占比:1 : 100 的任务上,FPR 的轻微变化即可淹没查准率,主叙事应换 PR 曲线;② AUC 是全阈值平均,不承诺任何单个工作点,部署阈值处须复核 TPR、FPR 与查准率;③ 多任务数据集先逐任务算 AUC 再平均,池化会任由高占比任务掩盖其余任务的表现。
习题 3.3-3
论述题:为什么“朴素基线好得离谱”应首先怀疑评估流程,而不是模型能力?请从机理层面给出论证,并举出分子建模中两类典型泄漏及对应的检查手段。
参考解答容量论证:随机森林只能利用特征中直接可及的判别信息,没有通路绕过表示去“悟出”深层规律;它的成绩近似刻画“给定表示下信息的可及程度”。毒性这类终点与二维结构的关系复杂而稀疏,固定指纹上的任何方法都不应接近满分。若朴素基线 AUC ≈ 1,只有两种解释:信号平凡可及(任务已解,无研究价值),或测试信息在训练时可见;前者罕见,后者常见。两类典型泄漏:其一,划分泄漏——随机划分下同一分子或近同骨架横跨训练集与测试集,检查手段为去重、改用骨架划分、比对训练-测试相似度分布;其二,特征或标签同源泄漏——特征在知道结果之后整理而来,检查手段为审视特征生成时点与数据来源。总检查是标签置换试验:打乱 y 重跑基线,AUC 应回落到 0.5 附近,仍高即流程有洞。基线是对照实验的对照组:它的反常读数指向实验装置,而非待试的新方法。
3.3.7 桥:从固定特征到可学习的特征
基线立起之后,问题换了一个形状:ECFP 加随机森林已经吃掉“子结构有无”层面的信号,还能从哪里获取更多?指纹是固定的——编码规则在见到数据之前写死,分子的哪些侧面进入特征、以什么粒度进入,都不随任务调整。生理毒性未必由圆形指纹划定的子结构决定:三维构象、关键原子间的距离、取代基的电性效应,这些信号要么被指纹粗粒化,要么根本没有被表示。端到端的图学习把“造特征”也交给模型——直接在分子图上学习原子与键的表示,让任务自己决定哪些结构模式值得编码。基线已经给出必须超越的数字;下一节从第一块积木讲起:把卷积搬到不规则的图上。
关键术语
- 基线 (baseline)
- 为度量新增建模复杂度是否换来真实增益而设的简单参照模型。
- 数据泄漏 (data leakage)
- 测试信息或与标签同源的信息以任何途径进入训练流程,虚增评估成绩。
- 决策树 (decision tree)
- 以不纯度下降逐层选特征、按阈值分桶的贪心判别结构。
- 随机森林 (random forest)
- 自助样本上生长、结点分裂随机抽特征子集的树集成,表决平均成分数。
- 自助聚合 (bootstrap aggregating, bagging)
- 有放回抽样构造多份数据、平均多个学习器以压低方差。
- 梯度提升 (gradient boosting)
- 逐步拟合当前损失的负梯度、串行纠错的树集成范式。
- 混淆矩阵 (confusion matrix)
- 给定阈值下 TP、FP、TN、FN 四种结局的计数表。
- ROC 曲线 (ROC curve)
- 阈值扫动时点 (FPR, TPR) 在单位正方形内的阶梯轨迹。
- ROC 曲线下面积 (area under the ROC curve, AUC)
- ROC 下面积,等价于随机正样本分数高于随机负样本的概率(并列计半)。
- 查准率 (precision)
- TP/(TP+FP),被预测为正的样本中真阳所占比例。
- 查准率-查全率曲线 (precision-recall curve)
- 不含 TN 的评估曲线,随机基线高度等于阳性占比,不平衡下更敏感。
- 特征重要性 (feature importance)
- 按不纯度下降或置换误差归因到特征的贡献度量,高基数特征易虚高。
参考文献与延伸阅读
- Breiman L. 2001. Random forests. Machine Learning 45:5–32.
- Chen T, Guestrin C. 2016. XGBoost: a scalable tree boosting system. In: Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, 785–794.
- Fawcett T. 2006. An introduction to ROC analysis. Pattern Recognition Letters 27:861–874.
- Pedregosa F, Varoquaux G, Gramfort A, et al. 2011. Scikit-learn: machine learning in Python. Journal of Machine Learning Research 12:2825–2830.
- Saito T, Rehmsmeier M. 2015. The precision-recall plot is more informative than the ROC plot when evaluating binary classifiers on imbalanced datasets. PLoS ONE 10:e0118432.
- Wu Z, Ramsundar B, Feinberg EN, et al. 2018. MoleculeNet: a benchmark for molecular machine learning. Chemical Science 9:513–530.