跳到内容

第 13 卷 / 第 5 章 / 第 2 课

5.2 逻辑回归、Log Loss 与阈值:概率模型和行动规则是两层 ​

若目标是预测任务是否请求紧急资源,直接用线性回归可能给出小于 0 或大于 1 的值。逻辑回归把线性 predictor 映射为条件概率,再由决策层根据成本和容量选择阈值。

本课目标 ​

  • 从 Bernoulli likelihood 推导 binary cross-entropy;
  • 用 log-odds 解释系数与线性边界;
  • 处理 separation、类别失衡和数值稳定;
  • 分开 discrimination、calibration 与 threshold utility。

1. 从 log-odds 建模 ​

令 p(x)=P(Y=1∣X=x):

log⁡p(x)1−p(x)=xTβ,

因此:

p(x)=σ(xTβ)=11+e−xTβ.

对特征 xj 增加 1(其他设计列保持),odds 乘以 eβj。这不是概率增加 βj;概率变化依赖当前 p。

交互和非线性 basis 会让原始输入空间边界变复杂,但在 design features 上 log-odds 仍线性。

2. Bernoulli likelihood 与 log loss ​

对 yi∈{0,1}:

P(yi∣xi)=piyi(1−pi)1−yi.

负平均 log-likelihood:

L=−1n∑i[yilog⁡pi+(1−yi)log⁡(1−pi)].

它对自信但错误的概率惩罚很大,是 proper scoring rule。训练 accuracy 不可微且忽略置信程度,不适合作为标准 logistic objective。

直接算 log(sigmoid(z)) 可能 overflow/underflow。下面把二元交叉熵改写为稳定形式,使用 Python 3 + NumPy,可保存为 logloss_demo.py 后运行 python3 logloss_demo.py:

python
import numpy as np

z = np.array([-1000.0, 0.0, 1000.0])
y = np.array([0.0, 1.0, 1.0])
loss = np.maximum(z, 0) - y * z + np.log1p(np.exp(-np.abs(z)))
assert np.isfinite(loss).all()
print(np.round(loss, 6))

预期结果为 [0. 0.693147 0. ]。极端但正确的 logits 损失接近零,中间的 0 对应概率 0.5。把最后一个标签改成 0,损失应变成约 1000;模型越自信,答错时账单越具体。

3. 逻辑回归不要求线性可分 ​

数据不可线性分时,模型仍可找到最大 likelihood/正则化解,只是边界无法完美分类。真正的特殊问题是 perfect/quasi separation:某方向能把训练类别完全隔开时,无正则 MLE 系数可能趋向无穷,有限数值解不稳定。

可采用:

  • L2/L1 正则;
  • 收集边界附近样本;
  • 合并稀疏类别;
  • Firth correction 等专门估计(推断场景);
  • 检查泄漏导致的“完美特征”。

训练 accuracy 100% 可能是 separation,也可能是泄漏。

4. 0.5 不是通用阈值 ​

模型输出 p,行动规则选择 threshold t:

y^=1[p≥t].

若两种正确分类成本为零,误报成本为 CFP、漏报成本为 CFN,预测正类的期望成本是 CFP(1−p),预测负类是 CFNp。比较两者得到阈值 t=CFP/(CFP+CFN)。例如误报成本 1、漏报成本 9,则阈值为 0.1。真实审核还可能有固定成本、容量和群体约束,不能直接套用这个二动作模型。

需要数据估计或选择的阈值应在 validation 上确定,test 只评估冻结规则。基准率变化可能使旧概率失准、precision 改变;若概率已按新总体重新校准且上述成本不变,概率尺度上的成本阈值仍是同一个比值。

5. 类别失衡改变怎样评估 ​

类别少并不自动要求 resampling。先用:

  • log loss/Brier score 看概率;
  • precision-recall 与 recall at capacity;
  • confusion matrix 的分子分母;
  • 与 prevalence/业务规则 baseline 比较。

class_weight="balanced" 改变训练 objective,使少数类 loss 权重更大;它不凭空增加信息,输出概率也可能需要在原目标分布重新 calibration。Oversampling 同样会改变训练先验。

6. Discrimination 与 calibration ​

  • discrimination:正例通常是否排在负例前面;
  • calibration:预测 0.2 的样本长期约有 20% 为正;
  • decision utility:在具体阈值/行动下是否有价值。

AUC 高的模型可能概率过于自信;校准好的弱模型也可能排序不足。报告 reliability curve、Brier/log loss、分组/时间 calibration,并与基准率比较。

Calibration 方法(Platt/logistic、isotonic 等)应使用已训练 base model 在未参与其拟合的数据上的预测,或使用折外预测。校准器再用这些预测和标签拟合;最终评价还要留出独立数据,见 scikit-learn 的校准说明。

7. 多分类 Softmax ​

对互斥 K 类:

P(Y=k∣x)=ezk∑j=1Kezj.

logits 对共同常数不敏感,参数需要 reference 或约束避免不可识别。数值计算使用 log-sum-exp trick。

  • multinomial/softmax 共同训练类别;
  • one-vs-rest 训练 K 个二分类器,概率不天然和为 1;
  • multilabel 问题不应使用互斥 softmax。

8. 缺失、未知类别与截距漂移 ​

类别词表、填充值和 scaling 必须进入 pipeline。部署 prevalence 变化时,即使 likelihood ratio 关系稳定,intercept/calibration 也会改变。监控:

  • score/logit 分布;
  • prevalence 与 label delay;
  • calibration-in-the-large(平均预测 vs 实际率);
  • calibration slope;
  • 群体/时间误差。

9. 系数解释边界 ​

Odds ratio 常被误读成 risk ratio,尤其结果常见时差异明显。非线性 feature、interaction 和正则化使单系数更难独立解释。

预测模型中的条件关联不等于因果。用群体变量改善 calibration/公平性的决定,还涉及适用法律、政策和伤害权衡。

常见误区 ​

  • 逻辑回归要求数据线性可分:不可分仍可拟合;完全可分反而使无正则 MLE 发散。
  • Sigmoid 输出天然校准:模型错设和 regularization 会失准。
  • 类别不均衡就用 class weight:先从决策指标和目标分布判断。
  • 阈值固定为 0.5:应由成本、容量和验证选择。

练习 ​

  1. 将一个系数转为 odds ratio,并在不同基准概率下计算概率变化。
  2. 制造 perfect separation,观察无正则与 L2 解。
  3. 比较 class weighting 前后的 AUCPR 与 calibration。
  4. 在固定审核容量下选择阈值,再用独立 test 评估。

小结 ​

逻辑回归把线性 predictor 解释为 log-odds,并用 Bernoulli likelihood 学概率。概率是否可信、阈值是否合适和行动是否有价值,需要分三层验证。

下一课回到求解过程:凸目标也可能因尺度和 conditioning 难以优化,正则项还会改变目标与系数语义。

Built with VitePress | Software Systems Atlas