Logistic Regression
逻辑回归使用 sigmoid 函数将特征的加权和转换为类别概率。了解它如何训练、如何以赔率解读结果,以及如何使用阈值。
逻辑回归是一种用于分类的监督学习方法,它将输入特征的加权和传入逻辑函数(即 sigmoid 函数),以估计输入属于某个类别的概率。它的名称中包含“回归”,是因为模型根据特征回归类别的对数几率,但它实际用于分类:垃圾邮件过滤器、信用模型或筛查测试都会通过阈值将概率转换为是或否的判断。Joseph Berkson 从 1944 年起将其发展为通用统计模型,并创造了“logit”一词;它至今仍是表格数据分类的标准基线,因为训练只需几秒、能够输出概率,而且权重可直接解读为对几率的影响。
逻辑回归的工作原理#
模型会像线性回归一样计算分数 z = w·x + b,然后将其映射为概率 p = 1 / (1 + e⁻ᶻ)。sigmoid 函数会将任意分数压缩到 0 到 1 的范围,在 z = 0 时返回 0.5,并在 z 朝任一方向增大时趋近于 1 或 0。求逆后可以看出分数的含义:z 等于对数几率 log(p / (1 − p)),因此模型假设正类的对数几率会随每个特征线性变化,其决策边界是一条直线、一个平面或一个超平面。某个特征增加一个单位,会使几率乘以 eʷ,其中 w 是该特征的权重;这就是医学和信用研究会将逻辑回归结果报告为几率比的原因。
训练时通过最大似然估计设置权重,这等同于最小化对数损失(也称二元交叉熵):−[y·log(p) + (1 − y)·log(1 − p)],并对训练数据取平均。损失函数是凸函数,因此只有一个最小值;但它没有闭式解,所以 L-BFGS、牛顿法或梯度下降等求解器会通过迭代找到最小值。如果超平面能完美分隔类别,且没有惩罚项,权重就会趋于无穷大;因此库默认会添加正则化:scikit-learn 的 LogisticRegression会施加 L2 惩罚,C = 1.0,C 值越小,正则化越强。由于对数损失会奖励准确的概率,设定合理且经过适当正则化的逻辑回归通常会输出校准良好的概率;Brier 分数等指标就是用于衡量这一特性。
决策阈值#
阈值会将每个概率转换为标签,而 0.5 只是默认值。调整阈值会在精确率和召回率之间进行权衡:癌症筛查模型会降低阈值,以减少漏诊肿瘤;垃圾邮件过滤器则会提高阈值,以避免隐藏合法邮件。ROC 曲线会绘制不同阈值下的这种权衡,而曲线下面积衡量模型将正例排在负例之前的能力。下面的示例使用 scikit-learn 自带的威斯康星州乳腺癌数据集训练逻辑回归,并比较两个阈值:
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score, recall_score
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
X, y = load_breast_cancer(return_X_y=True)
y = 1 - y # make malignant (originally 0) the positive class
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
# Standardize the 30 features, then fit weights by minimizing log loss
model = make_pipeline(StandardScaler(), LogisticRegression())
model.fit(X_train, y_train)
# Predicted probability of malignancy, turned into labels at two thresholds
proba = model.predict_proba(X_test)[:, 1]
for threshold in (0.5, 0.1):
pred = (proba >= threshold).astype(int)
print(
f"Threshold {threshold}: precision {precision_score(y_test, pred):.3f}, recall {recall_score(y_test, pred):.3f}"
)在默认阈值 0.5 下,模型标记出的肿瘤全都是恶性肿瘤(精确率 1.000),且测试集的 53 个恶性肿瘤中有 2 个被漏掉(召回率 0.962)。在阈值 0.1 下,模型检测出全部 53 个恶性肿瘤(召回率 1.000),同时也将 90 个良性肿瘤中的 11 个标记为恶性(精确率 0.828)。
多分类与神经网络分类器#
对于两个以上互斥类别,多项逻辑回归会为每个类别计算一个分数,并通过 softmax 函数将分数转换为总和为 1 的概率,再使用交叉熵损失进行训练;一对多方法则为每个类别单独训练一个二分类模型。对于多标签问题(一个输入可以同时带有多个标签),则为每个类别使用独立的 sigmoid 函数。
大多数分类神经网络的输出层都是将这些模型之一应用于前面各层学到的特征,例如以线性层和 softmax 作为结尾的图像分类网络。YOLO26检测头的每个分类分支都以一个 1×1 卷积层结束,该层会在每个网格位置为每个类别输出一个 logit;sigmoid 会将每个 logit 转换为独立的类别分数,并使用二元交叉熵进行训练,因此每个类别分数都是根据该位置特征进行的逻辑回归。预测模式的 conf 参数默认值为 0.25,是应用于这些分数的决策阈值。
应用场景#
- 临床风险评分:模型根据年龄、血压和化验结果估计患病、出现并发症或再次住院的概率;几率比可以让临床医生了解每个因素会使风险增加多少。
- 信用评分:贷款机构会使用逻辑回归构建信用评分卡,因为它可以向申请人和监管机构解释每个特征对评分的影响。
- 广告点击预测:Google 2013 年关于其生产级点击率系统的论文介绍了使用 FTRL-Proximal 算法在线训练的逻辑回归,该算法会使模型保持稀疏,用于估计用户点击广告的概率。
- 客户流失预测:订阅业务会估计每位客户在下一周期取消订阅的概率,并向风险最高的客户提供挽留优惠。
逻辑回归与相关方法的比较#
- 对 0/1 标签进行线性回归:对类别标签拟合平方误差会产生小于 0 或大于 1 的预测值;即使是正确分类的远离决策边界的点也会影响拟合,而 sigmoid 函数和对数损失可以避免这个问题。
- 支持向量机 (SVM):线性 SVM 同样会学习一个超平面,但它通过最小化合页损失来最大化间隔,并输出到决策边界的距离,而非概率。
- 朴素贝叶斯:这是一种生成式分类器,用于建模各类别中特征的生成方式;它与逻辑回归这一判别式分类器构成经典组合。Ng 和 Jordan(2001)指出,朴素贝叶斯只需较少训练样本就会趋近于较高的渐近误差,而逻辑回归在数据充足后会达到更低的误差。
- 感知机:对相同的加权和应用阶跃函数,只输出 0 或 1,并且仅在错误分类训练样本时更新权重。










