逻辑回归(Logistic Regression)全面解析
逻辑回归是脱胎于线性回归的分类算法,它通过引入 Sigmoid 函数将线性回归的连续输出映射为 0 到 1 之间的概率值,从而解决"属于哪一类"的离散分类问题,同时也是深度学习的基础。
核心要点
- 逻辑回归的本质:在线性回归的基础上叠加一个 Sigmoid(或 Softmax)函数,将线性输出转换为概率。
- 解决的问题:分类问题,即预测离散标签、输出有限个互斥类别。
- 与线性回归的关系:线性回归解决"多少"的问题(预测连续数值),逻辑回归解决"属于哪一类"的问题(预测离散类别)。
- 深度学习关联:逻辑回归本质上是一个没有隐藏层的单层神经网络;逻辑回归 + Softmax 是现代神经网络最常用的输出层结构。
- 工业价值:逻辑回归虽然简单,但可解释性强、训练快、不容易过拟合,目前在工业界仍被大量使用。
一、为什么需要逻辑回归:分类问题的引入
1. 什么是分类问题
在现实中,大量问题的本质是离散选项的选择题:
- 邮件是否是垃圾邮件(是/否)
- 肿瘤是良性还是恶性(良性/恶性)
- 用户是否会点击广告(会/不会)
这些任务的输出只能是有限个互斥类别中的某一个。将这类预测离散标签、输出有限个互斥类别的任务称为分类。
二分类是最常见的形式,但也存在多分类问题,例如手写数字识别中,一个数字可能是 0 到 9 中的任意一个。
2. 为什么不能用线性回归处理分类问题
一个直观的想法是:既然分类问题输出"是/否",那能不能用线性回归输出一个数字,大于 0.5 就当作 1,小于 0.5 就当作 0?
这样做有两个重大缺陷:
| 缺陷 | 说明 |
|---|---|
| 输出范围失控 | 线性回归理论上输出 $(-\infty, +\infty)$ 的任意数值,但分类问题需要输出在 0 到 1 之间(以判断大于或小于 0.5)。若线性回归预测出 1 万或 -50,则毫无意义。 |
| 受异常值影响严重 | 如果数据中出现一个极其巨大的异常样本,会严重拉偏整个回归线,导致预测准确率极度下降。 |
3. 解决方案
仍然以线性回归为基础,叠加一个"变形器",将线性回归的输出限制到 0 到 1 之间。这个变形器就是 Sigmoid 函数。这就是逻辑回归的基本思路。
二、Sigmoid 函数:从线性输出到概率
1. Sigmoid 函数公式
为了将线性回归输出的任意实数映射到 0 到 1 之间的概率值,逻辑回归引入 Sigmoid 函数:
$$\sigma(Z) = \frac{1}{1 + e^{-Z}}$$
其中 $Z$ 就是线性回归的输出结果,$e$ 是自然常数。
2. Sigmoid 函数的性质
- 可以把任意数值(无论多大或多小)映射为 0 到 1 之间的数字。
- 当线性回归输出为 0 时,Sigmoid 函数值正好是 0.5。
- 输出大于 0 时,函数值趋向于 1;输出小于 0 时,函数值趋向于 0。
- 0 到 1 之间的输出可以表示概率,具有天然的概率含义。
3. 逻辑回归的完整表达式
将线性回归的结果 $Z = WX + b$ 代入 Sigmoid 函数:
$$\hat{y} = P = \frac{1}{1 + e^{-(WX + b)}}$$
这可以理解为:线性回归负责计算分数,Sigmoid 负责把分数转换为概率。
4. 为什么选择 Sigmoid 函数而非其他函数
能将数字映射到 0 到 1 之间的函数很多,但 Sigmoid 函数具有以下独特优势:
- 输出天然具有概率含义:严格限定在 0 到 1 之间。例如输出 0.8 表示模型有 80% 的把握预测该样本为正类。
- 自带决策分界点:Sigmoid(0) = 0.5。线性回归输出大于 0 时判为正类,小于 0 时判为负类。决策边界就是 $WX + b = 0$。
- 处处可导且导数形式极简:$\sigma'(Z) = \sigma(Z) \times (1 - \sigma(Z))$。只需一次减法和一次乘法即可算出导数,对计算机非常高效,使梯度下降计算效率极高。
- 对比阶跃函数的优势:如果直接用 if-else 实现"小于 0 输出 0、大于 0 输出 1",得到的阶跃函数不可导,无法计算梯度,也就无法更新参数。
三、逻辑回归的损失函数:为什么不能直接用 MSE
1. 线性回归使用 MSE 的可行性
线性回归使用 MSE(均方误差)作为损失函数时,其曲线是一个光滑的碗状凸函数。无论参数初始值设置在何处,通过梯度下降都能找到全局最低点(全局最优)。
2. 逻辑回归中 MSE 的问题
在逻辑回归中,因为引入了非线性的 Sigmoid 函数,损失函数变得不再是凸函数:
- 可能有很多局部小坑:梯度下降可能掉入局部最优点而非全局最优点,这与参数初始值的设置密切相关。
- 局部区域过于平缓:即使在无小坑的区域,梯度也可能极小、趋近于零,导致模型误以为已找到最优解。
这两种情况都会导致模型到不了全局最优点。其中,梯度逐渐变小直至消失称为梯度消失;若梯度越训练越大、无法收敛,则称为梯度爆炸。用 MSE 作为逻辑回归的损失函数,容易引入平缓区域或小坑问题,导致无法到达最低点。
3. 分类问题对损失函数的期望
对于一个二分类任务,模型输出概率 $P$,合理的损失函数应满足:
- 当真实标签为 1(正类)时:
- 预测概率越接近 1 → 损失越小
- 预测概率越接近 0 → 惩罚越大
- 例如:明明是垃圾邮件,模型给了 0.9 的概率说明预测很准;若只给了 0.3 的概率,则说明几乎预测错了。
- 当真实标签为 0(负类)时:
- 预测概率越接近 0 → 损失越小
- 预测概率越接近 1 → 惩罚越大
- 例如:不是垃圾邮件,应输出非常接近 0 的概率(如 0.1、0.003),如果模型给出 0.9,则需通过损失函数加大惩罚。
常见误区:$P = 0.5$ 并不是损失最大的时候。损失最大发生在"预测完全说反"时。$P = 0.5$ 表示模型相当于随机猜测(抛硬币),此时模型几乎没有作用。
四、推导交叉熵损失函数的三个数学工具
以下推导涉及三个数学工具。对概率论熟悉的读者可以跳过纯数学推导,只需记住最终结论。
1. 工具一:对数(Log)
在机器学习中,log 和数学中的 ln 含义相同,均以自然常数 $e$ 为底(而非以 10 为底)。
对数函数的重要性质:
- 单调递增函数:想让某个概率最大,只需让其对数最大即可,优化过程更简单。
- 能把乘法转化为加法:$\log(a \times b) = \log a + \log b$。
- 多个 0 到 1 之间的概率连乘会越乘越小、趋近于 0,导致计算机无法精确表示。取对数可将连乘变为连加,解决精度问题。
对 $-\log x$ 的图像观察:
- 当 $x$ 无限趋近于 1 时,$-\log x$ 趋近于 0(损失为 0)。
- 当 $x$ 趋近于 0 时(即反向预测错误时),$-\log x$ 趋向正无穷,惩罚越大。
- 对数函数的特性正好匹配分类问题对损失函数的期望。标签为正时取 $-\log$,标签为负时取相反方向即可。
2. 工具二:伯努利分布(Bernoulli Distribution)
分类问题的本质是只有两个结果(像抛硬币一样:正面或反面)。
- 假设结果为 1 的概率为 $P$,则结果为 0 的概率为 $1 - P$。
- 即 $P(Y=1) = P$,$P(Y=0) = 1 - P$。
使用一个巧妙的公式把两种情况结合起来:
$$P(Y|X) = \hat{y}^Y \times (1 - \hat{y})^{(1-Y)}$$
其中 $Y$ 为真实标签(只可能是 0 或 1),$\hat{y}$ 为模型预测值。
这个公式的原理:
- 当 $Y = 1$(正类)时:公式变为 $\hat{y}^1 \times (1 - \hat{y})^0 = \hat{y}$,只保留前半部分。
- 当 $Y = 0$(负类)时:公式变为 $\hat{y}^0 \times (1 - \hat{y})^1 = 1 - \hat{y}$,只保留后半部分。
这样就把两种情况的 if-else 判断统一为一个公式,从而可以进行梯度求导。
3. 工具三:最大似然估计(Maximum Likelihood Estimation)
概率与似然的区别
- 概率:在已知模型参数的情况下,预测未知数据出现的可能性。例如假设硬币是均匀的(朝上概率 0.5),问连续抛十次恰好出现七次正面的概率是多少。
- 似然:在已知观测数据结果的情况下,反向推断模型参数是否合理。例如实际抛了十次硬币,观测到七次正面、三次反面,那么在此观测下硬币朝上的概率 $P$ 等于多少最合理?如果抛 1000 次出现了 700 次正面,则硬币大概率是不均匀的。
最大似然估计的核心思路
既然事情已经发生了,就推断让这件事发生概率最大的参数就是最好的参数。目标是找到一组参数,使这组数据出现的似然函数值最大。
似然函数 = 所有样本预测正确的概率的乘积。用符号 $\prod$ 表示连乘。
将伯努利分布公式代入后对似然函数取对数:
- 连续的乘积容易让结果趋近于 0,取对数后将乘法转换为加法。
- 找到使似然函数最大的参数组合。
从最大似然到损失函数
机器学习中需要最小化损失,因此在似然函数前加负号,并对所有样本取平均(删除样本数 $m$ 的影响),就得到逻辑回归的损失函数——交叉熵损失函数(Cross-Entropy Loss)。
五、交叉熵损失函数详解
1. 公式结构
交叉熵损失函数看似复杂($Y$ 只能是 0 或 1),实际理解起来非常简单:
- 当 $Y = 1$ 时:只需计算 $-\log(\hat{y})$——预测概率越接近 1,损失越小;越接近 0,损失越大。
- 当 $Y = 0$ 时:后半部分起作用,即 $-\log(1 - \hat{y})$——预测概率越接近 0,损失越小;越接近 1,损失越大。
2. 交叉熵的关键优势
交叉熵是一个严格的凸函数,无论权重初始值设置在哪里,都能让模型通过梯度下降找到最低点(全局最优)。
六、梯度下降:逻辑回归的简洁之美
1. 直观疑问
表面上看,逻辑回归的损失函数(含 Sigmoid 和交叉熵)形式复杂,梯度计算也应该很复杂。但经过推导可以发现:
Sigmoid 的导数与交叉熵的导数在计算过程中大量约分抵消,最终的结果与线性回归的梯度形式几乎一模一样。
2. 线性回归与逻辑回归的梯度对比
- 线性回归梯度形式:$W$ 的梯度为 $\frac{1}{m} \sum (\text{预测值} - \text{真实值}) \cdot X_j$;$b$ 的梯度为 $\frac{1}{m} \sum (\text{预测值} - \text{真实值})$。
- 逻辑回归梯度形式:完全一致,只是预测值的计算方式不同。
核心区别:线性回归中预测值为 $WX + b$;逻辑回归中预测值需要先算 $WX + b$ 再套上 Sigmoid 函数。
因此,虽然损失函数的公式看起来非常复杂,但逻辑回归的梯度计算非常简单,与线性回归几乎相同。
七、实战案例:使用逻辑回归预测乳腺癌
1. 数据集与操作流程
使用 sklearn 内置的乳腺癌数据集,任务是预测肿瘤是良性还是恶性(二分类问题)。
操作步骤:
- 引入相关包并下载数据。
- 划分训练集和测试集。
- 由于逻辑回归对量纲(特征尺度)敏感,必须做标准化处理。
- 重要原则:标准化时只允许对训练集做 fit(拟合),然后将训练集的标准化参数应用到测试集的 transform 上,防止数据泄露。
- 对模型进行训练并查看结果。
2. 实验结果
- 直接预测准确率可达 0.98,非常高。
- 该数据集包含 500 多个样本、30 多个特征,特征之间量纲差异非常大,因此标准化是必须的。
- 训练集准确率也很高,说明模型具有较好的泛化能力,数据本身具有一定程度的线性可预测性。
3. 概率输出的可视化
逻辑回归不仅能输出类别预测(良性或恶性),还能输出每个样本属于该类别的概率(0 到 1 之间)。
可视化结果中:
- 红色表示恶性样本,蓝色表示良性样本。
- 恶性样本的概率输出趋近于 0 附近,意味着"预测为良性"的概率接近为零,根据 $1 - P$,它是恶性的比例接近 1。
- 良性样本的概率输出趋近于 1 附近。
- 几乎所有样本分布在两端,说明训练较为准确。
- 在 0.5(模棱两可)附近重叠的样本非常少,即使有少数的分散颜色,也代表了预测错误的样本。整体区分能力很强,模棱两可的样本非常少。
八、模型评估:为什么不能只看准确率
1. 准确率的局限
线性回归的评估相对简单(看误差或 R²),但分类任务仅看准确率是不够的。
举例:有 1 万个样本,其中 99% 是良性肿瘤。如果模型对所有样本都预测为"不是恶性肿瘤",准确率仍然高达 99%。但这个模型毫无意义,因为它没有识别出任何恶性肿瘤。
2. 混淆矩阵(Confusion Matrix)
混淆矩阵按照真实类别和预测类别将预测结果进行排列:
| 预测为正(恶性) | 预测为负(良性) | |
|---|---|---|
| 真实为正(恶性) | TP(真正例) | FN(假负例) |
| 真实为负(良性) | FP(假正例) | TN(真负例) |
- 对角线上的 TP 和 TN 是预测正确的两种情况。
- FN(假负例):实际为正(恶性),预测为负(良性)——预测错了。
- FP(假正例):实际为负(良性),预测为正(恶性)——预测错了。
不同场景下错误类型的严重程度不同
在医疗场景中,漏报(FN)比误报(FP)更严重:
- 漏报(FN):实际是恶性肿瘤(应输出 1),但模型输出 0(说不是恶性肿瘤)→ 延误患者治疗,后果严重。
- 误报(FP):实际不是恶性肿瘤(应为 0),但模型预测为恶性肿瘤 → 患者额外花一些钱做二次检查,发现是误诊后可以接受。
因此在不同的业务场景中,我们更关注的评估指标是不同的。
3. 三个核心衡量指标
精确率(Precision)
$$精确率 = \frac{TP}{TP + FP}$$
- 含义:在你预测为正类的样本中,真正是正类的比例(预测的质量)。
- 分母是实际被预测为正类的所有样本(TP + FP)。
- 精确率越高,说明模型预测为正类的结果越可信。
召回率(Recall)
$$召回率 = \frac{TP}{TP + FN}$$
- 含义:在真正是正类的样本中,有多少个被你成功预测出来了(覆盖能力)。
- 分母是真实类别为正类的所有样本(TP + FN)。
- 召回率越高,说明漏报越少。
F1 指标
F1 是精确率和召回率的调和平均,只有当两者都高时 F1 才高。
4. 决策阈值的影响
降低决策阈值可以提高召回率,减少漏报。
- 例如将决策阈值从 0.5 调低到 0.4,意味着更多样本会被判为正类,漏报更少。
- 不同的决策阈值可以显著影响模型的召回率、精确率等指标。
九、ROC 曲线与 AUC
1. ROC 曲线的作用
为了知道在不同业务场景下应把决策阈值设置成什么最合理,可以使用 ROC 曲线。ROC 曲线的原理是:把所有决策阈值下模型的表现都画出来,从而便于选择最优阈值。
2. ROC 曲线的坐标
- 横轴(假正率,FPR):明明是负类,却被模型说成正类的比例。
- 纵轴(真正率,TPR):是正类,且模型也说它是正类的比例(即召回率)。
3. 极端阈值情形
| 阈值设置 | 含义 | 结果 |
|---|---|---|
| 阈值 = 0 | 概率 ≥ 0 就判为正类 | 真正率 = 100%,假正率 = 100%(所有样本都被判为正,模型无意义) |
| 阈值 = 1 | 概率 ≥ 1 才判为正类 | 真正率 ≈ 0,假正率 ≈ 0(几乎所有样本都被判为负,模型无意义) |
| 理想点 | 左上角 (0, 1) | 所有正类召回且所有负类零误报 |
4. 阈值变化的轨迹
- 阈值从 0 渐渐调至 0.2、0.5:模型表现几乎相同,即只要输出概率大于 0.2 或 0.5 都判为正类,模型已将所有正类召回,负类误报率也极低。
- 阈值调大至 0.8:召回率下降到约 81%,因为介于 0.5 到 0.8 之间的正类样本不再被召回;但误报率几乎不变。
- 阈值调至 1:所有正类都被舍弃,真正率归零。
对于该模型,阈值设置在 0.2 到 0.5 之间都可以。
5. AUC(Area Under Curve)
AUC 是 ROC 曲线下方的面积。用于比较不同模型的表现能力:
- AUC 越大 → 曲线越接近左上角 (0, 1) → 模型区分正负类的能力越强,与阈值选择越无关,泛化能力越强。
- 理想情况下曲线经过 (0, 1) 点,AUC 几乎等于 1(坐标轴构成边长为 1 的正方形,面积 = 1)。
- AUC ≈ 0.5 → 模型相当于随机猜测(瞎猜),没有实际意义。
- AUC < 0.5 → 模型有严重问题,几乎完全不可用。
ROC 曲线和 AUC 以可视化方式综合了前述各指标,帮助判断哪个逻辑回归模型表现更优。
十、拓展到多分类:Softmax 回归
1. 从 Sigmoid 到 Softmax
前面的内容围绕二分类问题。面对多分类问题(如动物种类识别、手写数字识别 0 到 9),只需将 Sigmoid 函数升级为 Softmax 函数,即可得到 Softmax 回归(也叫多项逻辑回归)。
2. Softmax 的工作原理
- 为每个类别计算一个独立的得分。
- 通过 Softmax 函数将所有得分转换为概率分布,使所有类别的概率总和等于 1。
- 取概率最大的类别作为预测输出。
例如手写数字识别中,若最大的概率是类别 8,则模型输出分类结果为 8。这样就解决了多分类问题。
十一、逻辑回归与深度学习的关系
逻辑回归不仅是传统机器学习算法,也与深度学习有深厚渊源:
- 逻辑回归本质上是一个没有隐藏层的单层神经网络:输入层、偏置项等结构与神经网络一致,区别仅在于激活函数(或输出函数)用的是 Sigmoid 或 Softmax。
- 逻辑回归 + Softmax 函数构成了现代神经网络最常用的输出层结构。
掌握了逻辑回归的内容,学习神经网络时将更加轻松。
十二、总结与线性回归对比
线性回归 vs 逻辑回归
| 对比维度 | 线性回归 | 逻辑回归 |
|---|---|---|
| 解决的问题 | 回归问题(预测连续数值) | 分类问题(预测离散标签) |
| 模型输出 | 任意实数 | 0 到 1 之间的概率值 |
| 损失函数 | MSE | 交叉熵损失 |
| 评估指标 | MSE、RMSE、R² | 精确率、召回率、F1、ROC 曲线 AUC |
核心要点回顾
- 逻辑回归在本质上是在线性回归基础上加了一个 Sigmoid 或 Softmax 函数。
- 分类问题不能只看准确率,要根据业务场景关注精确率、召回率、F1 等指标。
- 逻辑回归虽然简单,但可解释性强、训练快、不容易过拟合,在工业界被大量使用。
- 面临多分类问题时,将 Sigmoid 改为 Softmax 即可实现 Softmax 回归。
- 到神经网络中也会见到非常相似的结构和概念,逻辑回归为学习深度学习打下重要基础。