逻辑回归公式推导-详细版

逻辑回归的损失函数(或称为代价函数)是用于衡量模型预测结果和真实结果之间差距的一个函数。它通常采用对数似然损失函数(Log-Loss),也称为交叉熵损失函数(Cross-Entropy Loss)。我们通过最大化似然函数来推导它,并将其转化为最小化损失函数的形式。

1. 逻辑回归的目标

逻辑回归是一种用于二分类任务的线性模型,它的目标是估计给定输入特征 x 属于类 1 的概率 P ( y = 1 ∣ x ) P(y=1 |x) P(y=1∣x)。

给定一个输入 x x x,逻辑回归模型的输出是一个概率值,表示属于类 1 的概率:

h θ ( x ) = P ( y = 1 ∣ x ) = 1 1 + e − θ T x h_{\theta}(\mathbf{x}) = P(y=1 | \mathbf{x}) = \frac{1}{1 + e^{-\theta^T \mathbf{x}}} hθ(x)=P(y=1∣x)=1+e−θTx1

其中, θ \theta θ 是模型的参数向量, θ T x \theta^T \mathbf{x} θTx 是输入特征的线性组合。

2. 似然函数

在逻辑回归中,我们希望通过最大化似然函数来找到最优参数 θ \theta θ。对于一组训练数据 { ( x i , y i ) } \{ (\mathbf{x}_i, y_i) \} {(xi,yi)},每个样本 x i \mathbf{x}_i xi 对应的真实标签 y i y_i yi 是 0 或 1。

假设所有样本是独立同分布的,整个数据集的似然函数可以表示为:

L ( θ ) = ∏ i = 1 m P ( y i ∣ x i ; θ ) L(\theta) = \prod_{i=1}^m P(y_i | \mathbf{x}_i; \theta) L(θ)=∏i=1mP(yi∣xi;θ)

根据 y i y_i yi 的取值(0 或 1),我们可以写成:

L ( θ ) = ∏ i = 1 m h θ ( x i ) y i ( 1 − h θ ( x i ) ) 1 − y i L(\theta) = \prod_{i=1}^m h_{\theta}(\mathbf{x}i)^{y_i} (1 - h{\theta}(\mathbf{x}_i))^{1 - y_i} L(θ)=∏i=1mhθ(xi)yi(1−hθ(xi))1−yi

这个公式表示,当 y i = 1 y_i = 1 yi=1 时,选择 h θ ( x i ) h_{\theta}(\mathbf{x}i) hθ(xi),而当 y i = 0 y_i = 0 yi=0 时,选择 1 − h θ ( x i ) 1 - h{\theta}(\mathbf{x}_i) 1−hθ(xi)。

3. 对数似然函数

由于似然函数是多个概率的连乘,直接求解比较困难。为简化计算,我们取对数(因为对数函数是单调递增的,最大化对数似然等价于最大化似然函数本身):

ℓ ( θ ) = log ⁡ L ( θ ) = ∑ i = 1 m [ y i log ⁡ h θ ( x i ) + ( 1 − y i ) log ⁡ ( 1 − h θ ( x i ) ) ] \ell(\theta) = \log L(\theta) = \sum_{i=1}^m \left[ y_i \log h_{\theta}(\mathbf{x}i) + (1 - y_i) \log (1 - h{\theta}(\mathbf{x}_i)) \right] ℓ(θ)=logL(θ)=∑i=1m[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]

这就是对数似然函数。我们的目标是最大化它,即: max ⁡ θ ℓ ( θ ) \max_{\theta} \ell(\theta) maxθℓ(θ)

为了方便,我们可以将最大化对数似然函数转化为最小化它的负对数似然函数,这样问题就转化为一个最小化问题:

J ( θ ) = − ℓ ( θ ) = − ∑ i = 1 m [ y i log ⁡ h θ ( x i ) + ( 1 − y i ) log ⁡ ( 1 − h θ ( x i ) ) ] J(\theta) = - \ell(\theta) = - \sum_{i=1}^m \left[ y_i \log h_{\theta}(\mathbf{x}i) + (1 - y_i) \log (1 - h{\theta}(\mathbf{x}_i)) \right] J(θ)=−ℓ(θ)=−∑i=1m[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]

这个 J ( θ ) J(\theta) J(θ) 就是逻辑回归的损失函数。

4. 我们来详细推导:

ℓ ( θ ) = log ⁡ L ( θ ) = ∑ i = 1 m [ y i log ⁡ h θ ( x i ) + ( 1 − y i ) log ⁡ ( 1 − h θ ( x i ) ) ] \ell(\theta) = \log L(\theta) = \sum_{i=1}^m \left[ y_i \log h_{\theta}(\mathbf{x}i) + (1 - y_i) \log (1 - h{\theta}(\mathbf{x}_i)) \right] ℓ(θ)=logL(θ)=∑i=1m[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]

1. 取对数

由于似然函数是多个概率的连乘形式,直接优化这种乘法形式的函数在计算上比较复杂。我们可以通过对数变换将乘法转换为加法,使得优化问题更容易处理。具体来说,对似然函数 ( L(\theta) ) 取对数,得到对数似然函数(log-likelihood function):

ℓ ( θ ) = log ⁡ L ( θ ) \ell(\theta) = \log L(\theta) ℓ(θ)=logL(θ)

将似然函数代入,取对数:

ℓ ( θ ) = log ⁡ ( ∏ i = 1 m h θ ( x i ) y i ⋅ ( 1 − h θ ( x i ) ) 1 − y i ) \ell(\theta) = \log \left( \prod_{i=1}^{m} h_{\theta}(\mathbf{x}i)^{y_i} \cdot (1 - h{\theta}(\mathbf{x}_i))^{1 - y_i} \right) ℓ(θ)=log(∏i=1mhθ(xi)yi⋅(1−hθ(xi))1−yi)

利用对数的乘法性质: log ⁡ ( a ⋅ b ) = log ⁡ a + log ⁡ b \log (a \cdot b) = \log a + \log b log(a⋅b)=loga+logb,可以将乘法转换为加法:

ℓ ( θ ) = ∑ i = 1 m log ⁡ ( h θ ( x i ) y i ⋅ ( 1 − h θ ( x i ) ) 1 − y i ) \ell(\theta) = \sum_{i=1}^{m} \log \left( h_{\theta}(\mathbf{x}i)^{y_i} \cdot (1 - h{\theta}(\mathbf{x}_i))^{1 - y_i} \right) ℓ(θ)=∑i=1mlog(hθ(xi)yi⋅(1−hθ(xi))1−yi)

接下来,利用对数的幂法则: log ⁡ ( a b ) = b log ⁡ a \log (a^b) = b \log a log(ab)=bloga,我们进一步分解每一项:

ℓ ( θ ) = ∑ i = 1 m [ y i log ⁡ h θ ( x i ) + ( 1 − y i ) log ⁡ ( 1 − h θ ( x i ) ) ] \ell(\theta) = \sum_{i=1}^{m} \left[ y_i \log h_{\theta}(\mathbf{x}i) + (1 - y_i) \log (1 - h{\theta}(\mathbf{x}_i)) \right] ℓ(θ)=∑i=1m[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]

这就是对数似然函数的完整形式。

5. 损失函数

我们最终得到的对数似然函数是一个用于衡量模型表现的函数。为了最小化损失,我们通常最大化对数似然函数(最大似然估计)。但更常见的做法是取负号,将最大化问题转化为最小化问题:

J ( θ ) = − ℓ ( θ ) = − ∑ i = 1 m [ y i log ⁡ h θ ( x i ) + ( 1 − y i ) log ⁡ ( 1 − h θ ( x i ) ) ] J(\theta) = - \ell(\theta) = - \sum_{i=1}^{m} \left[ y_i \log h_{\theta}(\mathbf{x}i) + (1 - y_i) \log (1 - h{\theta}(\mathbf{x}_i)) \right] J(θ)=−ℓ(θ)=−∑i=1m[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]

这个 J ( θ ) J(\theta) J(θ) 就是逻辑回归的损失函数。通过最小化它,我们可以找到最优的参数 θ \theta θ,使模型的预测最接近真实标签。

6. 梯度下降算法

最小化逻辑回归的损失函数 ( J(\theta) ) 的过程通常通过 梯度下降算法 或其变种来完成。以下是具体步骤和方法。

1. 梯度下降算法

梯度下降是一种用于优化目标函数的迭代算法。其基本思想是:通过不断更新参数,使得损失函数逐渐减小,最终找到损失函数的最小值。在逻辑回归中,我们的目标是最小化损失函数 ( J(\theta) )。

梯度下降的更新公式如下:

θ j : = θ j − α ∂ J ( θ ) ∂ θ j \theta_j := \theta_j - \alpha \frac{\partial J(\theta)}{\partial \theta_j} θj:=θj−α∂θj∂J(θ)

其中:

  • θ j \theta_j θj 是逻辑回归模型的参数(特征对应的权重), j ∈ { 0 , 1 , ... , n } j \in \{0, 1, \dots, n\} j∈{0,1,...,n};
  • α \alpha α 是学习率(决定每次更新的步长);
  • ∂ J ( θ ) ∂ θ j \frac{\partial J(\theta)}{\partial \theta_j} ∂θj∂J(θ) 是损失函数 J ( θ ) J(\theta) J(θ)对参数 θ j \theta_j θj 的偏导数。
2. 损失函数的梯度推导

为了使用梯度下降,我们首先需要计算损失函数 ( J(\theta) ) 对每个参数 ( \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}(\mathbf{x}i) + (1 - y_i) \log (1 - h{\theta}(\mathbf{x}_i)) \right] J(θ)=−m1∑i=1m[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]

其中, h θ ( x i ) = 1 1 + e − θ T x i h_{\theta}(\mathbf{x}_i) = \frac{1}{1 + e^{-\theta^T \mathbf{x}_i}} hθ(xi)=1+e−θTxi1 是逻辑回归模型的输出,即第 i i i 个样本属于类别 1 的概率。

为了方便计算,我们对 J ( θ ) J(\theta) J(θ) 的偏导数进行推导。

好的,我们详细讲解通过 链式法则 来推导逻辑回归损失函数的偏导数,进而得到梯度的过程。

2.1 通过链式法则推导偏导数

为了推导损失函数 J ( θ ) J(\theta) J(θ) 对参数 θ j \theta_j θj 的偏导数,我们使用 链式法则。这里,我们将逐步推导出偏导数公式。

2.1.1 损失函数对 θ j \theta_j θj 的偏导数

首先,我们需要对损失函数 J ( θ ) J(\theta) J(θ) 对 θ j \theta_j θj 求偏导。对第 i i i 个样本 ( x i , y i ) (\mathbf{x}_i, y_i) (xi,yi) 的损失函数项:

J i ( θ ) = − [ y i log ⁡ h θ ( x i ) + ( 1 − y i ) log ⁡ ( 1 − h θ ( x i ) ) ] J_i(\theta) = - \left[ y_i \log h_{\theta}(\mathbf{x}i) + (1 - y_i) \log (1 - h{\theta}(\mathbf{x}_i)) \right] Ji(θ)=−[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]

求其关于 θ j \theta_j θj 的偏导数:

∂ J i ( θ ) ∂ θ j \frac{\partial J_i(\theta)}{\partial \theta_j} ∂θj∂Ji(θ)

为了简化推导,我们先对两个部分分别求导。

2.1.2 对 log ⁡ h θ ( x i ) \log h_{\theta}(\mathbf{x}_i) loghθ(xi) 的偏导

我们首先对 log ⁡ h θ ( x i ) \log h_{\theta}(\mathbf{x}_i) loghθ(xi) 的部分求导:

∂ ∂ θ j ( log ⁡ h θ ( x i ) ) \frac{\partial}{\partial \theta_j} \left( \log h_{\theta}(\mathbf{x}_i) \right) ∂θj∂(loghθ(xi))

根据链式法则,我们知道:

∂ ∂ θ j log ⁡ h θ ( x i ) = 1 h θ ( x i ) ⋅ ∂ h θ ( x i ) ∂ θ j \frac{\partial}{\partial \theta_j} \log h_{\theta}(\mathbf{x}i) = \frac{1}{h{\theta}(\mathbf{x}i)} \cdot \frac{\partial h{\theta}(\mathbf{x}_i)}{\partial \theta_j} ∂θj∂loghθ(xi)=hθ(xi)1⋅∂θj∂hθ(xi)

接下来,我们需要计算 h θ ( x i ) h_{\theta}(\mathbf{x}i) hθ(xi) 对 θ j \theta_j θj的导数。由于 h θ ( x i ) h{\theta}(\mathbf{x}_i) hθ(xi) 是 sigmoid 函数,即:

h θ ( x i ) = 1 1 + e − θ T x i h_{\theta}(\mathbf{x}_i) = \frac{1}{1 + e^{-\theta^T \mathbf{x}_i}} hθ(xi)=1+e−θTxi1

使用链式法则对 θ j \theta_j θj 求导,首先对内层的 θ T x i = ∑ k = 0 n θ k x i k \theta^T \mathbf{x}i = \sum{k=0}^{n} \theta_k x_{ik} θTxi=∑k=0nθkxik 求导,结果是:

∂ ∂ θ j ( θ T x i ) = x i j \frac{\partial}{\partial \theta_j} \left( \theta^T \mathbf{x}i \right) = x{ij} ∂θj∂(θTxi)=xij

接下来,sigmoid 函数的导数是:

∂ h θ ( x i ) ∂ z = h θ ( x i ) ( 1 − h θ ( x i ) ) \frac{\partial h_{\theta}(\mathbf{x}i)}{\partial z} = h{\theta}(\mathbf{x}i) (1 - h{\theta}(\mathbf{x}_i)) ∂z∂hθ(xi)=hθ(xi)(1−hθ(xi))

其中, z = θ T x i z = \theta^T \mathbf{x}_i z=θTxi。

因此:

∂ h θ ( x i ) ∂ θ j = h θ ( x i ) ( 1 − h θ ( x i ) ) x i j \frac{\partial h_{\theta}(\mathbf{x}i)}{\partial \theta_j} = h{\theta}(\mathbf{x}i) (1 - h{\theta}(\mathbf{x}i)) x{ij} ∂θj∂hθ(xi)=hθ(xi)(1−hθ(xi))xij

现在我们可以将它代入先前的结果中:

∂ ∂ θ j ( log ⁡ h θ ( x i ) ) = 1 h θ ( x i ) ⋅ h θ ( x i ) ( 1 − h θ ( x i ) ) x i j \frac{\partial}{\partial \theta_j} \left( \log h_{\theta}(\mathbf{x}i) \right) = \frac{1}{h{\theta}(\mathbf{x}i)} \cdot h{\theta}(\mathbf{x}i) (1 - h{\theta}(\mathbf{x}i)) x{ij} ∂θj∂(loghθ(xi))=hθ(xi)1⋅hθ(xi)(1−hθ(xi))xij

简化为:

∂ ∂ θ j ( log ⁡ h θ ( x i ) ) = ( 1 − h θ ( x i ) ) x i j \frac{\partial}{\partial \theta_j} \left( \log h_{\theta}(\mathbf{x}i) \right) = (1 - h{\theta}(\mathbf{x}i)) x{ij} ∂θj∂(loghθ(xi))=(1−hθ(xi))xij

2.1.3 对 log ⁡ ( 1 − h θ ( x i ) ) \log (1 - h_{\theta}(\mathbf{x}_i)) log(1−hθ(xi)) 的偏导

接下来,我们对 log ⁡ ( 1 − h θ ( x i ) ) \log (1 - h_{\theta}(\mathbf{x}_i)) log(1−hθ(xi)) 求偏导:

∂ ∂ θ j log ⁡ ( 1 − h θ ( x i ) ) \frac{\partial}{\partial \theta_j} \log (1 - h_{\theta}(\mathbf{x}_i)) ∂θj∂log(1−hθ(xi))

同样应用链式法则:

∂ ∂ θ j log ⁡ ( 1 − h θ ( x i ) ) = 1 1 − h θ ( x i ) ⋅ ∂ ( 1 − h θ ( x i ) ) ∂ θ j \frac{\partial}{\partial \theta_j} \log (1 - h_{\theta}(\mathbf{x}i)) = \frac{1}{1 - h{\theta}(\mathbf{x}i)} \cdot \frac{\partial (1 - h{\theta}(\mathbf{x}_i))}{\partial \theta_j} ∂θj∂log(1−hθ(xi))=1−hθ(xi)1⋅∂θj∂(1−hθ(xi))

对 1 − h θ ( x i ) 1 - h_{\theta}(\mathbf{x}_i) 1−hθ(xi) 求导:

∂ ( 1 − h θ ( x i ) ) ∂ θ j = − h θ ( x i ) ( 1 − h θ ( x i ) ) x i j \frac{\partial (1 - h_{\theta}(\mathbf{x}i))}{\partial \theta_j} = - h{\theta}(\mathbf{x}i) (1 - h{\theta}(\mathbf{x}i)) x{ij} ∂θj∂(1−hθ(xi))=−hθ(xi)(1−hθ(xi))xij

因此:

∂ ∂ θ j log ⁡ ( 1 − h θ ( x i ) ) = − h θ ( x i ) 1 − h θ ( x i ) ⋅ ( 1 − h θ ( x i ) ) x i j \frac{\partial}{\partial \theta_j} \log (1 - h_{\theta}(\mathbf{x}i)) = - \frac{h{\theta}(\mathbf{x}i)}{1 - h{\theta}(\mathbf{x}i)} \cdot (1 - h{\theta}(\mathbf{x}i)) x{ij} ∂θj∂log(1−hθ(xi))=−1−hθ(xi)hθ(xi)⋅(1−hθ(xi))xij

简化为:

∂ ∂ θ j log ⁡ ( 1 − h θ ( x i ) ) = − h θ ( x i ) x i j \frac{\partial}{\partial \theta_j} \log (1 - h_{\theta}(\mathbf{x}i)) = - h{\theta}(\mathbf{x}i) x{ij} ∂θj∂log(1−hθ(xi))=−hθ(xi)xij

2.1.4 组合偏导数

现在我们可以将偏导数组合在一起,得到损失函数对 ( \theta_j ) 的总偏导数:

∂ J i ( θ ) ∂ θ j = − [ y i ⋅ ( 1 − h θ ( x i ) ) x i j + ( 1 − y i ) ⋅ ( − h θ ( x i ) x i j ) ] \frac{\partial J_i(\theta)}{\partial \theta_j} = - \left[ y_i \cdot (1 - h_{\theta}(\mathbf{x}i)) x{ij} + (1 - y_i) \cdot (- h_{\theta}(\mathbf{x}i) x{ij}) \right] ∂θj∂Ji(θ)=−[yi⋅(1−hθ(xi))xij+(1−yi)⋅(−hθ(xi)xij)]

简化为:

∂ J i ( θ ) ∂ θ j = ( h θ ( x i ) − y i ) x i j \frac{\partial J_i(\theta)}{\partial \theta_j} = (h_{\theta}(\mathbf{x}i) - y_i) x{ij} ∂θj∂Ji(θ)=(hθ(xi)−yi)xij

2.1.5 总损失函数的梯度

将所有样本的偏导数相加得到总损失函数 J ( θ ) J(\theta) J(θ) 对 θ j \theta_j θj 的偏导数:

∂ J ( θ ) ∂ θ j = 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x i j \frac{\partial J(\theta)}{\partial \theta_j} = \frac{1}{m} \sum_{i=1}^{m} (h_{\theta}(\mathbf{x}i) - y_i) x{ij} ∂θj∂J(θ)=m1∑i=1m(hθ(xi)−yi)xij

7. 梯度更新公式

现在我们有了损失函数的梯度,可以使用梯度下降法更新参数 θ j \theta_j θj:

θ j : = θ j − α ∂ J ( θ ) ∂ θ j \theta_j := \theta_j - \alpha \frac{\partial J(\theta)}{\partial \theta_j} θj:=θj−α∂θj∂J(θ)

即:

θ j : = θ j − α ⋅ 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x i j \theta_j := \theta_j - \alpha \cdot \frac{1}{m} \sum_{i=1}^{m} (h_{\theta}(\mathbf{x}i) - y_i) x{ij} θj:=θj−α⋅m1∑i=1m(hθ(xi)−yi)xij

通过不断迭代更新参数,损失函数逐渐减小,最终找到参数 θ \theta θ 的最优解。

-----以上推导来自gpt4-o模型问答

相关推荐
南宫生5 分钟前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
不想当程序猿_16 分钟前
【蓝桥杯每日一题】求和——前缀和
算法·前缀和·蓝桥杯
IT古董27 分钟前
【机器学习】机器学习的基本分类-强化学习-策略梯度(Policy Gradient,PG)
人工智能·机器学习·分类
落魄君子28 分钟前
GA-BP分类-遗传算法(Genetic Algorithm)和反向传播算法(Backpropagation)
算法·分类·数据挖掘
centurysee28 分钟前
【最佳实践】Anthropic:Agentic系统实践案例
人工智能
mahuifa28 分钟前
混合开发环境---使用编程AI辅助开发Qt
人工智能·vscode·qt·qtcreator·编程ai
四口鲸鱼爱吃盐30 分钟前
Pytorch | 从零构建GoogleNet对CIFAR10进行分类
人工智能·pytorch·分类
菜鸡中的奋斗鸡→挣扎鸡36 分钟前
滑动窗口 + 算法复习
数据结构·算法
蓝天星空43 分钟前
Python调用open ai接口
人工智能·python
睡觉狂魔er44 分钟前
自动驾驶控制与规划——Project 3: LQR车辆横向控制
人工智能·机器学习·自动驾驶