逻辑回归(Logistic Regression)
1. 逻辑回归的引出
在现实世界中,许多问题都涉及到分类任务。例如:
- 判断一封邮件是否为垃圾邮件;
- 预测某人是否会患某种疾病;
- 确定图片中是否包含某种特定物体。
这些问题的输出通常是离散的(例如“是/否”或“0/1”)。传统的线性回归虽然适合连续输出的任务,但无法直接处理分类问题。因此,我们需要一种适合分类任务的模型,这便引出了逻辑回归(Logistic Regression)。
逻辑回归是一种适用于二分类和扩展到多分类任务的模型,其核心思想是通过引入逻辑函数(Logistic Function),将线性模型的输出映射到概率空间,使模型能够解决分类问题。
2. 逻辑回归的背景与意义
背景
逻辑回归最初起源于生物统计学领域,用于描述事件的发生概率。例如:
- 一种药物的有效性(有效/无效);
- 生物体存活的概率。
随着机器学习的普及,逻辑回归成为了分类任务中的经典算法之一,被广泛应用于各个领域。
意义
- 简单易实现:逻辑回归模型具有明确的数学定义,训练过程高效,易于实现。
- 可解释性强:逻辑回归的系数能够直观解释特征对分类的影响。
- 广泛适用性:适用于许多需要概率输出的分类任务,如医学诊断、信用评分等。
- 构造基础模型:逻辑回归常作为复杂模型的基石,例如神经网络。
3. 逻辑回归的定义
逻辑回归是一种概率模型,用于预测某事件发生的概率 P ( y = 1 ∣ x ) P(y=1|x) P(y=1∣x) 。其核心思想是将输入特征通过线性模型映射到一个实数值,再通过Sigmoid函数将其压缩到 [ 0 , 1 ] [0, 1] [0,1] 区间,表示为概率。
模型公式
- 线性模型:
z = θ T x = θ 0 + θ 1 x 1 + θ 2 x 2 + ⋯ + θ n x n z = \theta^T x = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \dots + \theta_n x_n z=θTx=θ0+θ1x1+θ2x2+⋯+θnxn
其中:
- x x x 是输入特征向量;
- θ \theta θ 是模型参数(权重和偏置)。
- Sigmoid函数:
h θ ( x ) = 1 1 + e − z h_\theta(x) = \frac{1}{1 + e^{-z}} hθ(x)=1+e−z1
Sigmoid函数的性质:
- 当 z → + ∞ z \to +\infty z→+∞ , h θ ( x ) → 1 h_\theta(x) \to 1 hθ(x)→1 ;
- 当 z → − ∞ z \to -\infty z→−∞ , h θ ( x ) → 0 h_\theta(x) \to 0 hθ(x)→0 。
- 预测概率:
P ( y = 1 ∣ x ) = h θ ( x ) , P ( y = 0 ∣ x ) = 1 − h θ ( x ) P(y=1|x) = h_\theta(x), \quad P(y=0|x) = 1 - h_\theta(x) P(y=1∣x)=hθ(x),P(y=0∣x)=1−hθ(x)
- 分类决策: 设定阈值 α \alpha α ,一般取 α = 0.5 \alpha = 0.5 α=0.5 :
y = { 1 if h θ ( x ) ≥ α 0 if h θ ( x ) < α y = \begin{cases} 1 & \text{if } h_\theta(x) \geq \alpha \\ 0 & \text{if } h_\theta(x) < \alpha \end{cases} y={10if hθ(x)≥αif hθ(x)<α
可视化图示
- Sigmoid函数图:展示输入 z z z 映射到概率 h θ ( x ) h_\theta(x) hθ(x) 的曲线(从 -6 到 6 的 S 型函数)。
4. 逻辑回归的代价函数
4.1 为什么不能直接使用均方误差作为代价函数?
在线性回归中,我们使用均方误差(MSE)作为代价函数:
J ( θ ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta) = \frac{1}{m} \sum_{i=1}^m \left( h_\theta(x^{(i)}) - y^{(i)} \right)^2 J(θ)=m1i=1∑m(hθ(x(i))−y(i))2
但是,在逻辑回归中,使用 MSE 存在两个问题:
- 非凸性问题:MSE 会导致代价函数变为非凸函数,梯度下降可能无法找到全局最优解。
- 不符合概率模型的假设:逻辑回归是基于最大似然估计的,而 MSE 不满足这种统计假设。
4.2 交叉熵损失函数(Cross-Entropy Loss)
逻辑回归采用交叉熵作为代价函数,它基于最大似然估计:
J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = -\frac{1}{m} \sum_{i=1}^m \left[ y^{(i)} \log h_\theta(x^{(i)}) + \left(1 - y^{(i)}\right) \log \left(1 - h_\theta(x^{(i)})\right) \right] J(θ)=−m1i=1∑m[y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]
- 当 y = 1 y = 1 y=1 :代价为 − log h θ ( x ) -\log h_\theta(x) −loghθ(x) ,即模型预测的概率 h θ ( x ) h_\theta(x) hθ(x) 越接近 1,损失越小;
- 当 y = 0 y = 0 y=0 :代价为 − log ( 1 − h θ ( x ) ) -\log \left(1 - h_\theta(x)\right) −log(1−hθ(x)) ,即模型预测的概率 h θ ( x ) h_\theta(x) hθ(x) 越接近 0,损失越小。
可视化图示
- 损失函数曲线:分别展示 y = 1 y=1 y=1 和 y = 0 y=0 y=0 的损失随 h θ ( x ) h_\theta(x) hθ(x) 变化的曲线。
4.3 代价函数的性质
- 凸函数:交叉熵损失是一个凸函数,便于梯度下降找到全局最优解。
- 偏导数公式:
∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{m} \sum_{i=1}^m \left( h_\theta(x^{(i)}) - y^{(i)} \right) x_j^{(i)} ∂θj∂J(θ)=m1i=1∑m(hθ(x(i))−y(i))xj(i)
这与线性回归的梯度更新公式形式类似,只是误差的定义不同。
5.逻辑回归的梯度下降法
梯度下降是逻辑回归模型训练中常用的优化算法,用于通过最小化代价函数来寻找模型参数 θ \theta θ 。以下是逻辑回归中梯度下降的具体过程:
5.1 梯度下降的目标
逻辑回归的目标是最小化代价函数 J ( θ ) J(\theta) J(θ) ,通常使用交叉熵损失函数:
J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = -\frac{1}{m} \sum_{i=1}^m \left[ y^{(i)} \log h_\theta(x^{(i)}) + (1 - y^{(i)}) \log \left(1 - h_\theta(x^{(i)})\right) \right] J(θ)=−m1i=1∑m[y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]
其中:
- m m m 是样本数量;
- h θ ( x ) = 1 1 + e − θ T x h_\theta(x) = \frac{1}{1 + e^{-\theta^T x}} hθ(x)=1+e−θTx1 是 Sigmoid 函数的输出;
- y ( i ) ∈ { 0 , 1 } y^{(i)} \in \{0, 1\} y(i)∈{0,1} 是样本的真实标签。
梯度下降通过迭代更新参数 θ \theta θ 来逐步减小代价函数值。
5.2 梯度下降公式
2.1 代价函数的梯度
代价函数对参数 θ j \theta_j θj 的偏导数为:
∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{m} \sum_{i=1}^m \left( h_\theta(x^{(i)}) - y^{(i)} \right) x_j^{(i)} ∂θj∂J(θ)=m1i=1∑m(hθ(x(i))−y(i))xj(i)
- h θ ( x ( i ) ) − y ( i ) h_\theta(x^{(i)}) - y^{(i)} hθ(x(i))−y(i) 是预测值与真实值的误差;
- x j ( i ) x_j^{(i)} xj(i) 是第 i i i 个样本的第 j j j 个特征值。
2.2 参数更新公式
梯度下降的更新公式为:
θ j : = θ j − α ⋅ ∂ J ( θ ) ∂ θ j \theta_j := \theta_j - \alpha \cdot \frac{\partial J(\theta)}{\partial \theta_j} θj:=θj−α⋅∂θj∂J(θ)
- α \alpha α 是学习率(控制更新步伐的大小);
- θ j \theta_j θj 是模型的参数。
将偏导数代入更新公式,得到:
θ j : = θ j − α m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j := \theta_j - \frac{\alpha}{m} \sum_{i=1}^m \left( h_\theta(x^{(i)}) - y^{(i)} \right) x_j^{(i)} θj:=θj−mαi=1∑m(hθ(x(i))−y(i))xj(i)
这个公式表明,梯度下降的每次更新都依赖于样本预测值与真实值的误差。
5.3 梯度下降的具体步骤
-
初始化参数: 通常将所有参数 θ j \theta_j θj 初始化为零或随机小值。
-
计算预测值: 使用当前参数计算每个样本的预测值:
h θ ( x ( i ) ) = 1 1 + e − θ T x ( i ) h_\theta(x^{(i)}) = \frac{1}{1 + e^{-\theta^T x^{(i)}}} hθ(x(i))=1+e−θTx(i)1
-
计算代价函数: 计算当前参数下的代价函数值 J ( θ ) J(\theta) J(θ) ,以评估模型性能。
-
更新参数: 根据梯度下降公式更新参数 θ j \theta_j θj 。
-
检查收敛条件: 如果代价函数的值不再显著下降(或变化量小于某个阈值),或达到最大迭代次数,则停止迭代。
5.4 梯度下降的几种变体
-
批量梯度下降(Batch Gradient Descent):
- 每次迭代使用所有样本计算梯度。
- 优点:梯度估计准确。
- 缺点:当数据量很大时,计算代价较高。
-
随机梯度下降(Stochastic Gradient Descent, SGD):
- 每次迭代仅使用一个样本计算梯度。
- 优点:计算效率高,适合大规模数据。
- 缺点:更新过程不稳定,可能震荡于最优解附近。
-
小批量梯度下降(Mini-batch Gradient Descent):
- 每次迭代使用一个小批量(例如 32 个样本)计算梯度。
- 优点:结合了批量梯度下降和随机梯度下降的优点,更新稳定且效率较高。
5.5 学习率的影响
- 学习率 α \alpha α 的大小对梯度下降的效果至关重要:
- 学习率过大:更新步伐过快,可能导致错过最优解甚至发散。
- 学习率过小:更新步伐过慢,收敛速度过慢。
学习率影响的可视化图示
- 学习率过大:代价函数的值震荡,甚至发散。
- 学习率适中:代价函数值平稳下降,快速收敛。
- 学习率过小:代价函数值下降缓慢。
5.6 梯度下降的优缺点
优点
- 简单易实现;
- 可扩展到大规模数据集;
- 支持在线学习。
缺点
- 对学习率敏感,需仔细调节;
- 容易陷入局部最优(对于非凸问题);
- 可能收敛到平坦区域(即梯度很小但未达到最优解)。
5.7 梯度下降的改进方法
-
自适应学习率:
- AdaGrad、RMSProp:自动调整学习率,适应不同梯度大小。
- Adam:结合动量法和 RMSProp,收敛更快且稳定。
-
加动量(Momentum):
- 在每次更新中加入历史梯度的动量,加速收敛过程。
-
正则化:
- 添加正则化项(如 L 1 L1 L1 或 L 2 L2 L2 ),以防止过拟合。
5.8 总结
逻辑回归的梯度下降法通过不断更新模型参数,优化交叉熵损失函数,是一种高效且经典的优化算法。结合不同的梯度下降变体和改进方法,可以提升训练效率和模型性能,使其适应各种规模和复杂度的数据集。
6. 逻辑回归的扩展
- 多分类问题:通过 Softmax 函数扩展逻辑回归至多分类任务。
- 正则化:加入 L 1 L1 L1 或 L 2 L2 L2 正则化项,防止过拟合。
- 模型评估:使用准确率、精确率、召回率、F1分数等指标评估模型性能。
7. 逻辑回归的总结
逻辑回归是机器学习中经典的分类算法,因其简单、可解释性强而被广泛应用。尽管随着深度学习的兴起,复杂模型逐渐成为主流,但逻辑回归仍然是理解分类问题的基础模型,是许多复杂模型的重要组成部分。