模型校准实验看起来很直接:训练分类器、计算置信度、再画一张可靠性图。但真正开始比较方法后,我发现一些很小的实现选择足以改变结论。
校准集不能顺手复用
温度参数需要在独立数据上拟合。如果同一批样本既用于选择温度,又用于报告最终误差,结果会比真实情况乐观。我的做法是先固定训练集、校准集和测试集,再把划分索引保存下来。
分箱只是估计手段
期望校准误差(ECE)通常写作:
其中 是第 个置信度区间。不同分箱数量与边界会产生不同估计,因此我同时报告等宽分箱、等频分箱和不依赖分箱的 Brier 分数。
重复实验比更多小数位重要
单次随机种子下的改进可能来自采样波动。现在的实验脚本会显式记录随机种子,并在汇总时给出均值与标准差:
from dataclasses import dataclass
@dataclass(frozen=True)
class RunConfig:
seed: int
calibration: str
bins: int = 15
一个指标只有在计算过程和不确定性都被说明时,才适合进入结论。
这次复盘最大的变化,是把“跑出更低的 ECE”改成“解释这个改进在什么条件下成立”。后者慢一些,但更接近研究问题。