逻辑回归
逻辑回归看似名字里有”回归”,实际是二分类算法——用线性决策边界加上 sigmoid 函数,把特征压缩成一个介于 0 到 1 之间的概率值,再根据阈值判定类别。它是广告 CTR 预估、信用风控、医学诊断中最常用的基线模型,也是神经网络的”单神经元”原型。前置阅读:监督学习、数值优化基础。
把逻辑回归想象成一个带刻度的天平:
- 线性回归是直接称重量——输出是任意实数,可以很大也可以很小。
- 逻辑回归给天平加了一个”概率刻度盘”(sigmoid 函数):无论线性部分输出多大或多小,刻度盘指针永远指在 0 到 1 之间。指针越靠近 1,越像正例;越靠近 0,越像负例;正好在 0.5 就是决策边界。
- 决策边界是一条直线(或超平面)——sigmoid 只是把线性得分 压缩成概率,但”在边界哪一侧”完全由线性部分决定,所以边界本身是线性的。
一个关键点:逻辑回归不是”预测 0 或 1”,而是”预测属于正例的概率”。概率加上阈值(默认 0.5)才得到类别——这种概率输出让它比 SVM 更适合需要”置信度”的场景(如排序、风险评分)。
从线性回归到逻辑回归:为什么要套一层 sigmoid?
Section titled “从线性回归到逻辑回归:为什么要套一层 sigmoid?”线性回归直接输出实数 ,但分类任务需要的是概率(0 到 1 之间)或类别标签。直接把线性回归的输出当概率用有两个问题:第一,实数可以小于 0 或大于 1,不满足概率的取值范围;第二,线性函数对极端值过于敏感,离群点会把预测推到很远的地方。
sigmoid 函数 恰好解决这两个问题:它把整条实数轴单调地压进 (0, 1),而且两端饱和(输入很大或很小时导数趋近 0),对极端值有”缓冲”作用。把 sigmoid 套在线性得分外面,就得到一个合法的概率输出。
给定特征向量 x 和权重 w、偏置 b,先算出一个线性得分:
z 是任意实数,可以很大(强正例)或很小(强负例)。这个 z 在统计上有一个重要含义:它是对数几率(logit)的估计。对数几率定义为 ,即”正例与负例概率之比的对数”。sigmoid 是 logit 的反函数,所以逻辑回归本质上是在假设”对数几率是特征的线性函数”——这是一个比”直接假设概率是线性函数”温和得多、也更合理的假设。
Sigmoid 压缩
Section titled “Sigmoid 压缩”把 z 喂进 sigmoid 函数(也叫 logistic 函数),得到概率:
sigmoid 的性质:当 z 很大时 exp(-z) 趋近 0,p 趋近 1;当 z 很小时 exp(-z) 趋近无穷,p 趋近 0;当 z 等于 0 时 p 等于 0.5。它是一条 S 形曲线,把整条实数轴平滑地压进 0 到 1 区间。sigmoid 的导数有一个优美的性质 ,在推导梯度时会用到。
预测时根据概率与阈值比较:当 p 大于等于 0.5 预测为正例,否则为负例。等价地,当 z 大于等于 0 预测为正例——决策边界就是 z 等于 0 对应的那个超平面。阈值不一定要取 0.5:在欺诈检测、疾病筛查等场景,常把阈值调低(如 0.1)以牺牲精度换取更高召回率(recall,即正例中被正确检出的比例)。
交叉熵损失:为什么不用均方误差?
Section titled “交叉熵损失:为什么不用均方误差?”训练时用交叉熵损失(也叫对数损失 / log loss)衡量预测概率与真实标签的差距:
其中 y 是真实标签(0 或 1),p 是预测概率。直觉:当 y 等于 1 而 p 接近 0 时,log(p) 是很大的负数,损失爆炸式增大——模型在正例上自信地预测错误,会被狠狠惩罚。这正是我们想要的行为。
为什么不用线性回归的均方误差(MSE)?两个原因:第一,用 MSE 时损失函数关于权重是非凸的(因为 sigmoid 的非线性),存在多个局部最优,梯度下降容易卡住;第二,MSE 在预测”自信地错”时梯度反而会变小(因为 sigmoid 在两端饱和),学习极慢。交叉熵损失巧妙地与 sigmoid 配合,让梯度恰好消掉 sigmoid 的导数项,得到一个干净且有界的形式。
交叉熵损失对参数是凸函数(在权重空间只有一个全局最优),所以可以用梯度下降稳定求解。链式法则给出损失对 z 的梯度:
这个形式极其简洁——预测概率减去真实标签。当预测对了(p≈y)梯度接近 0,当预测错了(p 远离 y)梯度很大,自动把注意力分配给难分样本。进一步对权重求导:
这正是代码实现里 grad_w = X.T @ (p - y) 的来源。
最大似然视角
Section titled “最大似然视角”从统计学角度看,逻辑回归的参数求解用的是最大似然估计(Maximum Likelihood Estimation, MLE):在假设 的前提下,找一组 w、b 让所有训练样本的标签出现的”似然”(likelihood,即在模型下观察到这组数据的概率)最大。对所有样本取对数似然、取负号,恰好等价于最小化交叉熵损失。所以”最小化交叉熵”和”最大似然估计”是同一件事的两个说法——前者是优化语言,后者是统计语言。
实际训练几乎总是加正则项防止过拟合(overfitting,即模型在训练集上表现好但泛化差):
- L2 正则(Ridge):损失加 ,惩罚大权重,让权重整体偏小但都不为 0。sklearn 默认。
- L1 正则(Lasso):损失加 ,惩罚权重绝对值之和,会产生稀疏解(很多权重恰好为 0),天然做特征选择,适合超高维稀疏数据(如文本 one-hot)。
- ElasticNet:L1 和 L2 的加权组合,兼顾稀疏性与稳定性。
sklearn 里正则强度由参数 C 控制,C 是正则化系数 λ 的倒数,C 越小正则越强。
多分类扩展:Softmax 回归
Section titled “多分类扩展:Softmax 回归”把 sigmoid 推广到多类就是 softmax 回归(也叫多项逻辑回归):算出每个类的线性得分,用 softmax 函数 softmax(z)_i = exp(z_i) / Σ_j exp(z_j) 归一化成概率分布,损失换成多类交叉熵。softmax 回归本身就是Transformer输出层的原型——大语言模型预测下一个 token 时,最后一层就是 softmax 回归。
sigmoid 的 S 形曲线可以用以下 Mermaid 图直观感受(z 轴是线性得分,p 轴是输出概率):
sklearn 训练逻辑回归并查看概率
Section titled “sklearn 训练逻辑回归并查看概率”from sklearn.linear_model import LogisticRegressionfrom sklearn.datasets import make_classificationfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import classification_report, roc_auc_score
# 生成二分类数据并切分训练/测试集X, y = make_classification(n_samples=1000, n_features=5, random_state=42)X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2, random_state=42)
# C 是正则化强度的倒数:C 越小正则越强model = LogisticRegression(C=1.0, max_iter=200)model.fit(X_tr, y_tr)print("准确率:", model.score(X_te, y_te))
# predict_proba 输出每个类的概率,第二列是正例概率proba = model.predict_proba(X_te[:3])print("前 3 个样本的正例概率:", proba[:, 1].round(3))
# AUC(ROC 曲线下面积)衡量概率排序质量,对类别不平衡更鲁棒y_pred_proba = model.predict_proba(X_te)[:, 1]print("AUC:", roc_auc_score(y_te, y_pred_proba).round(3))
# classification_report 给出 precision / recall / f1print(classification_report(y_te, model.predict(X_te)))sklearn 概率校准
Section titled “sklearn 概率校准”逻辑回归的概率虽然形状对,但在极端值附近常偏”软”。需要精确概率时(如风险定价)可做校准:
from sklearn.calibration import CalibratedClassifierCV
# method='sigmoid' 即 Platt scaling,'isotonic' 是非参数方法calibrated = CalibratedClassifierCV(model, method='isotonic', cv=5)calibrated.fit(X_tr, y_tr)print("校准后 AUC:", roc_auc_score(y_te, calibrated.predict_proba(X_te)[:, 1]).round(3))L1 正则做特征选择
Section titled “L1 正则做特征选择”# penalty='l1' 会把不重要特征的权重压到恰好为 0sparse_model = LogisticRegression(penalty='l1', solver='liblinear', C=0.1)sparse_model.fit(X_tr, y_tr)print("非零权重个数:", (sparse_model.coef_ != 0).sum(), "/", X.shape[1])print("权重:", sparse_model.coef_.round(3))numpy 手写 sigmoid 与交叉熵梯度
Section titled “numpy 手写 sigmoid 与交叉熵梯度”import numpy as np
# 4 个样本、3 个特征的 toy 数据X = np.array([[2, 1, 0], [1, 0, 1], [0, 2, 3], [3, 3, 1]])y = np.array([1, 0, 0, 1]) # 标签w = np.zeros(3); b = 0.0; lr = 0.1 # 初始化权重
def sigmoid(z): return 1 / (1 + np.exp(-z))
for epoch in range(500): z = X @ w + b p = sigmoid(z) # 交叉熵对 z 的梯度恰好是 (p - y),极其简洁 grad_w = X.T @ (p - y) / len(y) grad_b = np.mean(p - y) w -= lr * grad_w; b -= lr * grad_b
if epoch % 100 == 0: loss = -np.mean(y * np.log(p + 1e-9) + (1 - y) * np.log(1 - p + 1e-9)) print(f"epoch {epoch}: loss = {loss:.4f}")print("训练后权重:", w.round(3), "偏置:", round(b, 3))PyTorch 版本(自动求导)
Section titled “PyTorch 版本(自动求导)”import torchimport torch.nn as nn
# 逻辑回归在 PyTorch 里就是一个线性层 + sigmoid(或直接用 BCEWithLogitsLoss)X_t = torch.randn(1000, 5)y_t = torch.randint(0, 2, (1000, 1)).float()
linear = nn.Linear(5, 1)criterion = nn.BCEWithLogitsLoss() # 内部集成了 sigmoid,数值更稳定optimizer = torch.optim.Adam(linear.parameters(), lr=0.01)
for epoch in range(200): logits = linear(X_t) # 线性得分 z,不套 sigmoid loss = criterion(logits, y_t) # BCEWithLogitsLoss = sigmoid + 交叉熵 optimizer.zero_grad() loss.backward() # 自动求导,无需手写梯度 optimizer.step()- 默认加 L2 正则:sklearn 的
LogisticRegression默认带 L2 正则(参数 C 控制强度,C 是正则化系数的倒数)。高维稀疏特征(如文本 one-hot)务必保留正则,否则容易过拟合。 - 类别不平衡时调整 class_weight:当正负样本比例悬殊(如欺诈检测 1:100),设
class_weight='balanced'让模型自动给少数类更大权重,否则模型会倾向全预测多数类。也可配合类别不平衡处理的采样方法。 - 概率需要校准:逻辑回归的输出概率通常比较”软”,在极端值附近不够自信。需要精确概率时(如风险定价),可用 Platt scaling 或 isotonic regression 做概率校准。
- 特征要做缩放:带 L1/L2 正则时,特征量纲不一致会让正则惩罚失衡——先标准化(
StandardScaler)。详见特征工程。 - L1 正则做特征选择:L1 会把不重要特征的权重压到恰好为 0,天然产出稀疏解,适合超高维场景。
- 非线性关系要手工构造特征:逻辑回归决策边界是线性的。若特征与 logit 不是线性关系,可加多项式特征(
PolynomialFeatures)或分箱。 - 大样本用 saga / lbfgs 求解器:
sklearn默认lbfgs适合中小数据;百万级样本或 L1/ElasticNet 选saga(支持在线增量训练);流式数据考虑SGDClassifier(loss='log_loss')。 - 看系数先看符号再看大小:权重的正负表示该特征对正例是促进还是抑制,大小受特征量纲影响——标准化后系数才可直接比较。
- 用 AUC 而非准确率评估不平衡数据:准确率(accuracy,分类正确的比例)在类别不平衡时会误导(全预测多数类也能很高)。AUC 衡量的是概率排序质量,对不平衡更鲁棒。详见交叉验证与评估。
- 广告 CTR 预估:Facebook、Google 的经典 CTR 模型(LR + 海量人工特征)曾是工业标配,后被 GBDT+LR、深度模型(DeepFM 等)取代,但 LR 仍是基线和 Embedding 堆叠的最后一层。详见推荐系统。
- 信用风控评分卡:银行信用卡审批用 LR 构建评分卡——因为监管要求模型可解释,权重要能换算成”分数”,线性模型天然满足。监管法规(如欧盟 GDPR 的”解释权”、美国 ECOA 的反歧视要求)使得 LR 在金融风控中地位难以撼动。
- 医学诊断与风险预测:根据年龄、血压、胆固醇等指标预测患病概率,输出概率而非硬标签,便于医生结合阈值判断。Logistic 回归是 Framingham 心脏病风险评分的基础。
- 垃圾邮件过滤:经典文本分类任务,朴素贝叶斯之外 LR 同常有效,且在工程上更易调参与部署。
- 神经网络的输出层:二分类神经网络最后一层就是 “1 个线性单元 + sigmoid + 交叉熵”,逻辑回归本质上就是一个神经元。多分类则换成 softmax——GPT、BERT 等大模型的最后一层都是 softmax 回归。
- LLM 可解释性研究中的线性探针:近年来研究者常用逻辑回归作为”探针”(linear probe),冻结大模型的中间层表示,在其上训练一个 LR 来检测该层是否编码了某种特定信息(如句法角色、事实知识、情感倾向)。这种做法已成为机制可解释性(mechanistic interpretability)的标准工具之一。
典型类库与工具
Section titled “典型类库与工具”| 类库 | 语言 | 说明 |
|---|---|---|
| sklearn.linear_model.LogisticRegression | Python | 最常用实现,支持 L1/L2/ElasticNet、多分类、类别权重 |
| sklearn.linear_model.SGDClassifier | Python | 在线 / 增量式 LR(loss='log_loss'),适合流式大数据 |
| statsmodels.Logit | Python | 统计学风格,输出 p 值、置信区间、伪 R²,适合需要统计推断的场景 |
| glmnet | R / Python / Julia | Lasso/Elastic Net 高效实现,处理大规模稀疏数据出色 |
| vowpal_wabbit | C++ / Python | 在线学习式 LR(FTRL 优化器),适合超大规模流式训练(每秒百万级样本) |
| xgboost / lightgbm | Python | GBDT 模型,常与 LR 组成 GBDT+LR 融合方案,LR 当融合层 |
| PyTorch nn.Linear + BCEWithLogitsLoss | Python | 自动求导实现,适合研究实验和端到端融合 |
| 术语 | 英文 | 解释 |
|---|---|---|
| 逻辑回归 | Logistic Regression | 用线性得分加 sigmoid 输出概率的线性分类器 |
| Sigmoid 函数 | Sigmoid / Logistic Function | 将任意实数压缩到 0 到 1 的 S 形函数 1/(1+exp(-z)) |
| 对数几率 | Logit | 概率经 log(p/(1-p)) 变换后的值,sigmoid 的反函数 |
| 交叉熵损失 | Cross-Entropy Loss / Log Loss | 衡量预测概率分布与真实标签差异的损失函数 |
| 决策边界 | Decision Boundary | 把不同类别分开的超平面,逻辑回归中是线性的 |
| Softmax 回归 | Softmax Regression / Multinomial LR | 逻辑回归的多分类推广,输出各类概率分布 |
| L1 正则 | L1 Regularization / Lasso | 惩罚权重绝对值之和,产生稀疏解,可做特征选择 |
| 概率校准 | Probability Calibration | 调整模型输出概率使其更接近真实频率 |
| 最大似然估计 | Maximum Likelihood Estimation, MLE | 逻辑回归参数求解的统计依据,等价于最小化交叉熵 |
| 线性探针 | Linear Probe | 冻结表示后在其上训练线性分类器,用于检测表示中编码的信息 |
| 凸优化 | Convex Optimization | 损失函数关于参数是凸的,保证梯度下降收敛到全局最优 |
| AUC | Area Under ROC Curve | 衡量二分类概率排序质量的指标,对类别不平衡鲁棒 |
2025-2026 前沿进展
Section titled “2025-2026 前沿进展”注:本节的 WebSearch 工具因配额受限未能实时检索,以下综合自截至 2025 年初的公开研究与技术趋势,部分方向可能已有更新进展,建议结合最新文献核实。
1. 大模型时代的”线性探针”(Linear Probing)成为可解释性标配
随着大语言模型(LLM)和视觉-语言模型的兴起,逻辑回归以”线性探针”的身份焕发第二春。研究者冻结 Transformer 的中间层激活,在其上训练一个 LR,用来检测某一层是否编码了特定信息(语法角色、事实关联、毒性倾向、视觉概念等)。相比非线性探针,LR 的权重可以直接当作”该特征是否被编码”的证据,可解释性极强。2023 年 Anthropic 提出的稀疏自编码器(Sparse Autoencoder, SAE)和后续的字典学习(dictionary learning)方法,本质上也是在线性表示空间里分解概念,与 LR 的理论根基一脉相承。
2. softmax 回归 = LLM 的”最后一公里”
GPT、Claude、Gemini 等大模型的最后一层都是 softmax 回归——把解码器输出的隐向量线性映射到词表大小的 logits,再 softmax 成概率。这个”超大 softmax 回归”的权重矩阵(词表可达 10 万~50 万维)是模型参数量的重要组成部分,催生了 ** tied embeddings**(输入输出共享权重)、adaptive softmax(按词频分层加速)、SpecDec / Medusa 等推测采样(speculative sampling)加速技术。理解 softmax 回归的数学性质,是理解 LLM 输出分布、温度采样(temperature)、top-k/top-p 采样的前提。
3. 概率校准研究从”事后补救”走向”训练时内建”
传统做法是训练后用 Platt scaling 或 isotonic regression 校准概率。2024-2025 年的趋势是把校准直接融入训练:focal loss(原为解决类别不平衡提出)被重新发现对校准也有帮助;temperature scaling(温度缩放,用一个标量温度调节 logits 的锐度)成为深度模型校准的事实标准。在医学影像、自动驾驶等高风险场景,FDA 和监管机构对”模型置信度是否可靠”的要求越来越严,推动校准研究持续活跃。
4. 差分隐私逻辑回归与公平性约束
在数据隐私法规(GDPR、CCPA)和 AI 安全叙事的推动下,差分隐私(Differential Privacy, DP)训练的 LR 成为联邦学习(federated learning)的标配基线——医院间共享患者数据时用 DP-LR 做联合风控建模。同时,公平性约束(fairness constraints)被加入 LR:限制不同人群(性别、种族)间的误报率差异,确保模型决策不歧视。sklearn 风格的 Fairlearn、AIF360 等库提供了在 LR 上施加公平约束的接口。
5. 稀疏高维场景下的在线 LR 仍是工业基线
尽管深度学习在 CTR、推荐领域大行其道,FTRL(Follow-The-Regularized-Leader)优化的在线 LR 仍是搜索广告和实时竞价的基础设施之一。原因是其推理开销极低(一次稀疏向量点乘)、模型可热更新、概率输出可直接参与拍卖排序。2024 年 Google、Meta 等公司仍在优化 FTRL 的实现,使其在 GPU 上也能高效训练。
6. 向量数据库与 LR 的结合
检索增强生成(RAG)兴起后,一种新的应用模式出现:用 embedding 模型把文档编码成向量,再用一个轻量 LR 在向量上做分类或重排。相比端到端微调 embedding 模型,LR 推理快、可热更新,适合需要频繁调整业务规则的场景(如内容审核策略迭代)。
- Hosmer & Lemeshow,《Applied Logistic Regression》:逻辑回归的经典教材,系统讲解建模、诊断与应用,统计社科领域的标准参考。
- Bishop,《Pattern Recognition and Machine Learning》第 4 章:从广义线性模型角度统一讲解逻辑回归与 softmax 回归,推导严谨。
- Murphy,《Probabilistic Machine Learning: An Introduction》第 10 章(2022 新版):从指数族分布推导逻辑回归,并对比其他线性分类方法,是上一版《ML: A Probabilistic Perspective》的全面更新。
- Friedman, Hastie & Tibshirani,《The Elements of Statistical Learning》第 4.4 节:从最大似然与 logistic 损失角度讲解,衔接 L1/L2 正则与集成学习。
- McMahan et al.,“Ad Click Prediction: a View from the Trenches” (KDD 2013):Google 工程 paper,讲述大规模在线 LR(FTRL)训练 CTR 模型的实战经验。
- Belrose et al.,“Tuned Lens”(2023):用线性探针(LR)分析 Transformer 各层的中间表示,是理解 LLM 内部状态的代表性工作。
- Guo et al.,“On Calibration of Modern Neural Networks” (ICML 2017):提出 temperature scaling,至今仍是深度模型概率校准的奠基性参考。