[机器学习]逻辑回归推导

1. 介绍

逻辑回归是一种广义上的线性回归模型,简单来看就是将线性回归的结果 $y$ 通过一个映射函数 sigmoid 映射到 0-1 区间,将 sigmoid 函数输出当做概率值,当概率值大于 0.5 时分类为正类,反之反类。

Sigmoid函数:

$$
g(z) = \frac{1}{1+e^{-z}}
$$

Sigmoid Function

2. 推导模型公式

2.1 模型公式

$$
h_{\theta}(x) = g(\theta^T X) = \frac{1}{1 + e^{-\theta^T X}}
$$

$$ \hat{y} = \begin{cases} 1, & h_{\theta}(x) > 0.5 \\ 0, & h_{\theta}(x) < 0.5 \end{cases} $$

⚠️ 注意:

  • $\hat{y}$ 是预测的类别,
  • $y$ 是真实的类别,
  • $h_{\theta}(x)$ 视作概率值(这个模型就是这样设计的),
  • $\theta$ 是这个模型的 参数(实际上和线性回归的参数一样)

2.2 推导损失函数

2.2.1 条件概率表示

首先写出模型的条件概率表示(在给定样本 $x$ 下):

给定输入样本 $x$,模型输出 $h_{\theta}(x)$ 表示预测类别为 $1$ 的概率,即:

$$
P_{\theta}(y=1|x) = h_{\theta}(x)
$$

同样,预测类别为 $0$ 的概率是:

$$
P_{\theta}(y=0|x) = 1 - h_{\theta}(x)
$$

令 $p = h_{\theta}(x)$,上面的公式可以写为:

给定输入样本 $x$,预测类别为 $1$ 的概率:

$$
P_{\theta}(y=1|x) = p
$$

同样,预测类别为 $0$ 的概率是:

$$
P_{\theta}(y=0|x) = 1 - p
$$


2.2.2 最大似然函数

这里实际上将sigmoid输出当做概率,我们目标追求 正确分类的概率 $P_{\theta}(y|x)$ 要越高越好 (注意这里的 $y$ 是真实类别,所以 $P_{\theta}(y|x)$ 就是正确分类的概率值)。

使用最大似然估计来求使 $P_{\theta}(y|x)$ 达到最大的参数 $\theta$,故可以得到参数 $\theta$ 的似然函数如下:

$$
L(\theta) = P_{\theta}(Y|X) = \prod_{j=1}^{m} P_{\theta}(Y^j | X^j)
$$

©️ 符号说明:

  • $m$: 样本数量
  • $d$: 为样本特征纬度
  • $x$: 单个样本的特征,是一个行向量
  • $X$: 每个样本特征组成的矩阵,形状为 $m * d$
  • $X^j$: 第 $j$ 个样本的特征
  • $y$: 单个样本的类别标签
  • $Y$: 样本类别组成的向量,形状为 $1 * m$
  • ${Y^j}$: 第 $j$ 个样本的真实类别

2.2.3 改写最大似然函数

将 $P_{\theta}(y|x) $ 替代为 $p^{y} (1-p)^{1-y}$。

当 $y$ 为 $1$ ,$p^y$ 生效;$y=0$,$p^y$ 失效,$(1-p)^{1-y}$ 生效。所以这种替代是等效的。

这其实是为什么要定义正类编码为 $1$ ,负类编码为 $0$ 的原因,这样做可以简洁表示,简化了后面的推导过程。如果定义为其他数字也是可以的,不过后续推导会很繁琐。

然后就可以得到下面这种形式:
$$
L(\theta) = \prod_{j=1}^{m} p^{Y^j} (1-p)^{1-Y^j}
$$


2.2.4 对数似然函数

为了计算方便,在上式两边取对数:

$$
\ln L(\theta) = \ln \left( \prod_{j=1}^{m} p^{Y^j} (1-p)^{1-Y^j} \right)
= \sum_{j=1}^{m} \left( Y^j \ln p + (1 - Y^j) \ln(1 - p) \right)
$$

最大化对数似然 $\ln L(\theta)$ 等价于 最大化似然 $L(\theta)$


2.2.5 损失函数

得到 对数似然 $\ln L(\theta)$ 后,我们需要最大化 对数似然 $\ln L(\theta)$ 得到参数 $\theta$。

我们知道求解一个模型是需要将模型的损失函数最小化,但是现在我们需要最大化对数似然,所以将对数似然 $\ln L(\theta)$取负,然后最小化$-\ln L(\theta)$ 即可。

故损失函数为:

$$
J(\theta) = -\frac{1}{m} L(\theta) = -\frac{1}{m} \sum_{j=1}^{m} \left( y^j \ln p + (1 - y^j) \ln(1 - p) \right)
$$

📝 备注:
在逻辑回归的损失函数中,我们希望对所有训练样本的损失进行求和,然后再通过 $\frac{1}{m}$ 来平均,这样可以使损失函数对每个样本的贡献相等,避免训练数据量的大小对损失函数的影响过大。


2.2.6 梯度下降求解

先计算一些后面会用到的结果:

  • sigmoid函数的导数
$$ \begin{aligned} \frac{\partial}{\partial z} g(z) &= \frac{\partial}{\partial z} \left( \frac{1}{1 + e^{-z}} \right) \\ &= \frac{\partial}{\partial z} (1 + e^{-z})^{-1} \\ &= -(1 + e^{-z})^{-2} \left( (1 + e^{-z})' \right) \\ &= -(1 + e^{-z})^{-2} (-e^{-z}) \\ &= (1 + e^{-z})^{-2} e^{-z} \end{aligned} $$
  • 1 - sigmoid函数的导数:

$$
\frac{\partial}{\partial z} \left( 1 - g(z) \right) = -g(z) \left( 1 - g(z) \right)
$$

  • 对数 sigmoid函数的导数:
$$ \begin{aligned} \frac{\partial}{\partial z} \ln g(z) &= \frac{\partial}{\partial z} \ln \left( \frac{1}{1 + e^{-z}} \right) \\ &= (1 + e^{-z}) \left( (1 + e^{-z})^{-2} \right) \left( e^{-z} \right) \\ &= \frac{e^{-z}}{1 + e^{-z}} \\ &= 1 - \frac{1}{1 + e^{-z}} \\ &= 1 - g(z) \end{aligned} $$
  • 对数 1 - sigmoid函数的导数:
$$ \begin{aligned} \frac{\partial}{\partial z} \ln (1 - g(z)) &= \frac{\partial}{\partial z} \ln \left( 1 - \frac{1}{1 + e^{-z}} \right) \\ &= - \frac{1}{1 - \frac{1}{1 + e^{-z}}} \left( (1 + e^{-z})^{-2} \right) (e^{-z}) \\ &= - \frac{1 + e^{-z}}{e^{-z}} \left( (1 + e^{-z})^{-2} \right) \\ &= -g(z) \end{aligned} $$

一通算后,终于可以开始计算损失函数的导数:

$$ \begin{aligned} \frac{\partial}{\partial \theta_i} J(\theta) &= \frac{\partial}{\partial \theta_i} \left( -\frac{1}{m} \sum_{j=1}^{m} \left( y^j \ln p + (1 - y^j) \ln(1 - p) \right) \right) \\ &= \frac{\partial}{\partial \theta_i} \left( -\frac{1}{m} \sum_{j=1}^{m} \left( y^j \ln g(\theta^T X^j) + (1 - y^j) \ln(1 - g(\theta^T X^j)) \right) \right) \\ &= -\frac{1}{m} \sum_{j=1}^{m} \left( y^j \left( \ln g(\theta^T X^j) \right)' + (1 - y^j) \left( \ln(1 - g(\theta^T X^j)) \right)' \right) \\ &= -\frac{1}{m} \sum_{j=1}^{m} \left( y^j (1 - g(\theta^T X^j)) x_i^j + (y^j - 1) g(\theta^T X^j) x_i^j \right) \\ &= -\frac{1}{m} \sum_{j=1}^{m} \left( y^j - g(\theta^T X^j) \right) x_i^j \end{aligned} $$

中间计算详细过程:

  • $\left( \ln g(\theta^T X) \right)’$:
    $$
    \left( \ln g(\theta^T X) \right)’ = \frac{\partial}{\partial \theta_i} \ln g(\theta^T X)
    $$

  • $\frac{\partial \ln g(z)}{\partial z} \frac{\partial z}{\partial \theta_i}$:

$$ \begin{aligned} \frac{\partial \ln g(z)}{\partial z} \frac{\partial z}{\partial \theta_i} &= (1 - g(z)) \frac{\partial}{\partial \theta_i} \theta^T X \\ &= (1 - g(z)) x_i \\ &= (1 - g(\theta^T X)) x_i \end{aligned} $$
  • $\left( \ln(1 - g(\theta^T X)) \right)’$:
    $$
    \left( \ln(1 - g(\theta^T X)) \right)’ = \frac{\partial}{\partial \theta_i} \ln(1 - g(\theta^T X))
    $$

  • $\frac{\partial \ln(1 - g(z))}{\partial z} \frac{\partial z}{\partial \theta_i} $:

$$ \begin{aligned} \frac{\partial \ln(1 - g(z))}{\partial z} \frac{\partial z}{\partial \theta_i} &= -g(z) \frac{\partial}{\partial \theta_i} \theta^T X \\ &= -g(z) x_i \\ &= -g(\theta^T X) x_i \end{aligned} $$

2.2.7 迭代更新公式

梯度下降更新公式:
$$
\theta_i := \theta_i - \alpha \frac{1}{m} \sum_{j=1}^{m} \left( g(\theta^T X^j) - y^j \right) x_i^j
$$