谈谈逻辑回归模型

逻辑回归(Logistic Regression)是最简单的分类算法之一,但是在很多领域中都被广泛应用。对于大多数人来说,逻辑回归(Logistic Regression)大概是入门机器学习时学习的第一个算法。然而,并不是每个人都能讲清这个算法。这便是本文的缘由。

Logistic 函数

原函数

Sigmoid 函数是所有函数图像为 S-形的函数的统称。Logistic 函数是形如下式定义的函数

$$\sigma(x;\alpha) = \frac{1}{1 + \exp(-\alpha\cdot x)}.$$

此处 $\alpha$ 是函数的参数,它调整函数曲线的形状。当参数 $\alpha = 1$ 时,它的函数曲线如下图所示,因而它是一个 Sigmoid 函数。

当 $\alpha$ 增大时,函数曲线在 $x$ 轴方向压缩,函数曲线越接近阶梯函数。反之,当 $\alpha$ 减小时,函数曲线在 $x$ 轴方向拉伸。通常,我们可以直接使用 $\alpha = 1$ 的 Logistic 函数,即:

$$\sigma(x) = \frac{1}{1 +\exp(-x)}.$$

导函数

Logistic 函数的导函数具有很好的形式,具体来说:

$$
\begin{aligned}
\sigma’(x) ={}& \biggl(\frac{1}{1 +\exp(-x)}\biggr)’ \\
={}& -\frac{1}{\bigl(1 +\exp(-x)\bigr)^2}\cdot\exp(-x)\cdot(-1) \\
={}& \frac{1}{1 +\exp(-x)}\cdot\frac{\exp(-x)}{1 +\exp(-x)} \\
={}& \sigma(x)\bigl(1 - \sigma(x)\bigr)
\end{aligned}
$$

模拟概率

由于 Logistic 函数的值域是 $(0, 1)$ 且便于求导,它在机器学习领域经常被用来模拟概率。

具体来说,假设二分类模型有判别函数 $z = f(\vec x;\vec w)$。其表意为:当输出值 $z$ 越大,则 $\vec x$ 代表的样本为正例的概率越大;当输出值 $z$ 越小,则 $\vec x$ 代表大样本为负例的概率越大。此时,考虑到 Logistic 函数的值域,我们可以用 $P(\vec x) = \sigma\Bigl(f(\vec x;\vec w)\Bigr)$ 来表示 $\vec x$ 代表的样本为正例的概率。同时,由于 Logistic 函数便于求导,只要我们选用了合适的损失函数(例如交叉熵损失函数),我们就可以方便地将梯度下降法运用在求解参数向量 $\vec w$ 之上。

二分类的逻辑回归模型

线性判别函数

在上一节讨论使用 Logistic 函数模拟概率时,我们没有限制判别函数 $f(\vec x;\vec w)$ 的形式。考虑到判别函数的形式取决于模型的结构,这也就是说,我们没有限制模型的结构。事实上,对于分类问题,我们可以用任意结构的模型得到的判别函数,代入 Logistic 函数得到对概率的模拟,再引入交叉熵损失函数进行优化求解。

在讨论逻辑回归模型时,我们一般假定模型是线性的,也就是判别函数是线性函数:

$$f(\vec x;\vec w) = -\vec w\cdot\vec x.$$

定义条件概率

于是,我们可以定义条件概率:

$$
\begin{aligned}
P(Y = 1\mid X = \vec x) ={}& \sigma(-\vec w\cdot\vec x), \\
P(Y = 0\mid X = \vec x) ={}& 1 - \sigma(-\vec w\cdot\vec x).
\end{aligned}
$$

考虑正负例定义的对称性,我们也可以反过来将条件概率定义为:

$$
\begin{aligned}
\pi(\vec x) \overset{\text{def}}{=} P(Y = 1\mid X = \vec x) ={}& 1 - \sigma(-\vec w\cdot\vec x) = \frac{\exp(\vec w\cdot\vec x)}{1 + \exp(\vec w\cdot\vec x)}, \\
P(Y = 0\mid X = \vec x) ={}& \sigma(-\vec w\cdot\vec x) = \frac{1}{1 + \exp(\vec w\cdot\vec x)}.
\end{aligned}
$$

这即是经典的逻辑回归模型中条件概率的定义。

几率与对数几率

事件的几率(odds)是该事件发生的概率与不发生的概率的比值。即,若假设事件发生的概率为 $p$,则其几率为

$$\text{odds} \overset{\text{def}}{=} \frac{p}{1 - p}.$$

对于逻辑回归的条件概率 $P(Y = 1\mid X = \vec x)$ 来说,它的几率是

$$\text{odds}(Y = 1\mid X = \vec x) = \exp(\vec w\cdot\vec x).$$

于是它的对数几率(logit)是

$$\text{logit}(Y = 1\mid X = \vec x) \overset{\text{def}}{=} \ln \text{odds}(Y = 1\mid X = \vec x) = \vec w\cdot \vec x = -f(\vec x).$$

这就是说,在逻辑回归模型中,线性判别函数 $f$ 实际上是事件发生几率的相反数。

似然与对数似然

条件概率确定之后,即可求模型在训练集上的似然。显然,这是一个二项分布的问题:

$$L(\vec w) \overset{\text{def}}{=} \prod_i\bigl[\pi(\vec x_i)\bigr]^{y_i}\bigl[1 - \pi(\vec x_i)\bigr]^{1 - y_i}.$$

对连乘进行最优化求解往往是困难的,因此我们可以在其上加上对数变换,将似然函数中的连乘转换为连加来求解。考虑到对数变换是单调的,它不会影响最优化求解结果的正确性。

$$
\begin{aligned}
\ln L(\vec w) \overset{\text{def}}{=}{}& \sum_i y_i\ln\pi(\vec x_i) + (1 - y_i)\ln\bigl(1 - \pi(\vec x_i)\bigr), \\
={}& \sum_i y_i\ln\frac{\pi(\vec x_i)}{1 - \pi(\vec x_i)} + \ln\bigl(1 - \pi(\vec x_i)\bigr), \\
={}& \sum_i y_i\cdot\vec w\cdot\vec x_i - \ln\bigl(1 + \exp(\vec w\cdot\vec x_i)\bigr).
\end{aligned}
$$

于是,逻辑回归模型的最优化问题就化归为:

$$\vec{ w^{*}} = \underset{\vec w}{\arg\,\max} \ln L(\vec w).$$

此处应用的是极大似然估计。极大似然估计法使用的前提是要知道或者假设数据总体的分布。此处显然数据服从二项分布。

最大似然与最小损失

最大似然是站在统计学的角度求解模型。站在机器学习的角度,则应当用最小损失的办法求解优化问题。

考虑对样本 $(\vec x, y)$ 的交叉熵损失函数:

$$
\begin{aligned}
\ell(\vec w) \overset{\text{def}}{=}{}& -y\ln P(Y = y\mid X = \vec x) - (1 - y)\ln\bigl[1 - P(Y = y\mid X = \vec x)\bigr], \\
={}& -y\ln \pi(\vec x) - (1 - y)\ln\bigl[1 - \pi(\vec x)\bigr]
\end{aligned}
$$

于是有在全部训练集上的损失:

$$
\begin{aligned}
J(\vec w) \overset{\text{def}}{=}{}& \sum_i -y_i\ln \pi(\vec x_i) - (1 - y_i)\ln\bigl[1 - \pi(\vec x_i)\bigr], \\
={}& \sum_i \ln\bigl(1 + \exp(\vec w\cdot\vec x_i)\bigr) - y_i\cdot\vec w\cdot\vec x_i, \\
={}& -\ln L(\vec w).
\end{aligned}
$$

这也就是说,对于逻辑回归模型来说,最小化损失函数与最大化(对数)似然是等价的。

梯度下降求解

至此,我们可以用梯度下降法求解模型。基本步骤如下:

  • 求解梯度,选择下降方向 $\nabla J(\vec w_{(i - 1)})$;
  • 线性搜索,选择步长 $\rho^*_{(i)} = \underset{\rho}{\arg\,\min} J\bigl(\vec w_{(i - 1)} - \rho\cdot\nabla J(\vec w_{(i - 1)})\bigr)$
  • 更新参数,使用学习率收缩步长 $\vec w_{(i)} = \vec w_{(i - 1)} - \eta\rho^{*}_{(i)}\cdot\nabla J(\vec w_{(i - 1)})$

正则化

当模型的参数很多时,往往需要加入正则项以防止过拟合。我们可以使用前文中提到的 $L_p$-正则项,于是我们有目标函数:

$$ \text{Obj}(\vec w) \overset{\text{def}}{=} J(\vec w) + \lambda_p\cdot\lVert\vec w\rVert_p. $$

多分类的逻辑回归模型

将上述二分类的逻辑回归模型推广到多分类时,即得到所谓的 Softmax 模型。它将二分类的 Logistic 函数升级为 Softmax 函数。也就是说,条件概率的形式如下:

$$ P(Y = i\mid X = x, \vec w) \overset{\text{def}}{=} \frac{\exp(\vec w_i\cdot \vec x)}{\sum_j^K \exp(\vec w_j\cdot \vec x)}. $$

而后我们可以类似地得到损失函数,并套用梯度下降等方法求解。此处略去。


您的鼓励是我写作最大的动力

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。


撰写评论

写了这么多年博客,收到的优秀评论少之又少。在这个属于 SNS 的时代也并不缺少向作者反馈的渠道。因此,如果你希望撰写评论,请发邮件至我的邮箱并注明文章标题,我会挑选对读者有价值的评论附加到文章末尾。