1. 介绍
逻辑回归是一种广义上的线性回归模型,简单来看就是将线性回归的结果 $y$ 通过一个映射函数 sigmoid 映射到 0-1 区间,将 sigmoid 函数输出当做概率值,当概率值大于 0.5 时分类为正类,反之反类。
Sigmoid函数:
$$
g(z) = \frac{1}{1+e^{-z}}
$$
2. 推导模型公式
2.1 模型公式
$$
h_{\theta}(x) = g(\theta^T X) = \frac{1}{1 + e^{-\theta^T X}}
$$
⚠️ 注意:
- $\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函数的导数:
- 1 - sigmoid函数的导数:
$$
\frac{\partial}{\partial z} \left( 1 - g(z) \right) = -g(z) \left( 1 - g(z) \right)
$$
- 对数 sigmoid函数的导数:
- 对数 1 - sigmoid函数的导数:
一通算后,终于可以开始计算损失函数的导数:
$$ \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}$:
$\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} $:
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
$$