机器学习算法笔记-Logistic 回归

前言

在讨论完线性回归算法之后,接下来介绍另一种线性模型在分类任务中的使用。

简单来说, 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。 注意,这里用的是“可能性”,而非数学上的“概率”,logisitc回归的结果并非数学定义中的概率值,不可以直接当做概率值来用。该结果往往用于和其他特征值加权求和,而非直接相乘。

那么逻辑回归与线性回归是什么关系呢?

逻辑回归(Logistic Regression)与线性回归(Linear Regression)都是一种广义线性模型(generalized linear model)。逻辑回归假设因变量 y 服从伯努利分布,而线性回归假设因变量 y 服从高斯分布。 因此与线性回归有很多相同之处,去除Sigmoid映射函数的话,逻辑回归算法就是一个线性回归。可以说,逻辑回归是以线性回归为理论支持的,但是逻辑回归通过Sigmoid函数引入了非线性因素,因此可以轻松处理0/1分类问题。

假设函数

考虑二分类任务,其输出标记 \(y \in \{0,1\}\),而线性回归模型产生的预测值 \(z=\boldsymbol{w}^T\boldsymbol{x}+b\) 是实值,于是,我们需将实值 \(z\) 转换为 0/1 值。最理想的是”单位阶跃函数“(unit-step function)。

\[ y= \begin{cases} 0 & z<0 \\ 0.5 & z=0 \\ 1 & z>0 \end{cases} \]

若预测值 \(z\) 大于零就判为正例,小于零则判为反例,预测值为临界值零则可任意判别。

但是可以看出,单位阶跃函数并不连续,因此不能直接用作转换。于是我们希望找到一个能在一定程度上近似单位阶跃函数的“替代函数”,并希望它单调可微。对数几率函数(logistic function)正是这样一个替代函数。

\[ y=\frac{1}{1+e^{-z}} \]

其函数曲线如下:

sigmoid function

sigmoid function

从上图可以看出,对数几率函数是一种“Sigmoid 函数”,它将 \(z\) 值转化为一个接近 0 或 1 的 y 值,并且其输出值在 \(z=0\) 附近变化很陡峭。将对数几率函数作为替代函数带入,得到。

\[ y=\frac{1}{1+e^{-(\boldsymbol{w}^T\boldsymbol{x}+b)}} \tag{1} \]

可变化为

\[ \ln \frac{y}{1-y}=\boldsymbol{w}^T\boldsymbol{x}+b \tag{2} \]

\(y\) 视为样本 \(\boldsymbol{x}\) 作为正例的可能性,则 \(1-y\) 是其反例可能性,两者的比值

\[\frac{y}{1-y}\]

称为“几率”(odds),反映了 \(\boldsymbol{x}\) 作为正例的相对可能性。对几率取对数则得到“对数几率”(log odds,亦称作 logit)

\[ \ln \frac{y}{1-y} \]

由此可见,对数几率回归实际上是在用线性回归模型的预测结果去逼近真实标记的对数几率。特别需要注意,虽然它的名字叫做“回归”,但实际上却是一种分类方法。这种方法有很多优点,例如它是直接对分类的可能性进行建模,无需事先假设数据分布,这样就避免了假设分布不准确所带来的问题;它不仅是预测出“类别”,而是可得到近似概率预测。此外,对数几率函数是任意阶可导的凸函数,有很好的数学性质,现有的很多方法都可以直接用于求取最优解。

学习策略

极大似然法

若将 \((1)\) 中的 \(y\) 视为类似后验概率估计 \(p(y=1|\boldsymbol{x})\),则式 \((2)\) 可重写为

\[ \ln \frac{p(y=1|\boldsymbol{x})}{p(y=0|\boldsymbol{x})} =\boldsymbol{w}^T\boldsymbol{x}+b \]

显然有

\[ p(y=1|\boldsymbol{x})=\frac{e^{\boldsymbol{w}^T\boldsymbol{x}+b}}{1+e^{\boldsymbol{w}^T\boldsymbol{x}+b}} \]

\[ p(y=0|\boldsymbol{x})=\frac{1}{1+e^{\boldsymbol{w}^T\boldsymbol{x}+b}} \]

于是,我们可以通过“极大似然法”(maximum likelihood method)来估计 \(\boldsymbol{w}\)\(b\)。给定数据集 \({(\boldsymbol{x}^{(i)},y^{(i)})}_{i=1}^m\),对率回归模型最大化“对数似然”(log-likelihood)

\[ \mathcal{L}(\boldsymbol{w}) = \sum_{i=1}^m \ln p(y^{(i)} \mid \boldsymbol{x}^{(i)};\boldsymbol{w}) \tag{3} \]

即令每个样本属于其真实标记的概率越大越好。

为了方便讨论,令 \(\boldsymbol{\beta}=(\boldsymbol{w};b)\)\(\hat{x}=(\boldsymbol{x};1)\),则 \(\boldsymbol{w}^T\boldsymbol{x}+b\) 可简写为\(\boldsymbol{\beta}^T \hat{\boldsymbol{x}}\)。令 \(p_1(\hat{\boldsymbol{x}};\boldsymbol{\beta})=p(y=1|\hat{\boldsymbol{x}};\boldsymbol{\beta})\)\(p_0(\hat{\boldsymbol{x}};\boldsymbol{\beta})=p(y=0|\hat{\boldsymbol{x}};\boldsymbol{\beta})=1-p_1(\hat{\boldsymbol{x}};\boldsymbol{\beta})\)。则式 \((3)\) 中的似然项可重写为

\[ p(y_i|\boldsymbol{x}_i;\boldsymbol{w},b)= y_ip_1(\hat{\boldsymbol{x}};\boldsymbol{\beta}) +(1-y_i)p_0(\hat{\boldsymbol{x}};\boldsymbol{\beta}) \tag{4} \]

将式 \((4)\),代入 \((3)\),并根据式 \((3)(2)\)可知,最大化 \((3)\) 等价于最小化

\[ \mathcal{L}(\boldsymbol{\beta})= \sum_{i=1}^m(-y_i\boldsymbol{\beta}^T\hat{\boldsymbol{x}}_i+ \ln(1+e^{\boldsymbol{\beta}^T\hat{\boldsymbol{x}}_i}) ) \tag{5} \]

\((5)\) 是关于 \(\boldsymbol{\beta}\) 的高阶可导连续凸函数,根据凸优化理论,经典的数值优化算法如梯度下降法、牛顿法都可以求得最优解。于是就得到

\[ \boldsymbol{\beta}^*= \mathop{\arg\min}_\boldsymbol{\beta}\mathcal{L}(\boldsymbol{\beta}) \]

梯度上升算法

首先补充一下计算中要用到的 Logistic 函数的导数:

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

\[ \begin{aligned} g'(z) &= \frac{d}{dz}\frac{1}{1+e^{-z}} \\ &= \frac{1}{(1+e^{-z})^2}(e^{-z}) \\ &=\frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}}) \\ &=g(z)(1-g(z)) \end{aligned} \]

\(P(\mathbb{y}=1\mid \boldsymbol{x}) = f(\boldsymbol{x})\)\(P(\mathbb{y} = 0\mid\boldsymbol{x}) = 1-f(\boldsymbol{x})\)。在上式基础上我们对对数似然函数求导获得梯度,对于一个样本 \((m=1)\):

\[ \begin{aligned}\frac{\partial}{\partial w_j}\mathcal{L}(\boldsymbol{w})&=\frac{\partial}{\partial w_j}\Big(y \ln f(\boldsymbol{x}) + (1-y) \ln (1-f(\boldsymbol{x}) \Big)\\&=\bigg(y\frac{1}{g(\boldsymbol{w}^\top\boldsymbol{x})}-(1-y)\frac{1}{1-g(\boldsymbol{w}^\top\boldsymbol{x})}\bigg)\frac{\partial}{\partial w_j}g(\boldsymbol{w}^\top\boldsymbol{x})\\&=\bigg(y\frac{1}{g(\boldsymbol{w}^\top\boldsymbol{x})}-(1-y)\frac{1}{1-g(\boldsymbol{w}^\top\boldsymbol{x})}\bigg)g(\boldsymbol{w}^\top\boldsymbol{x})(1-g(\boldsymbol{w}^\top\boldsymbol{x}))\frac{\partial}{\partial w_j}\boldsymbol{w}^\top\boldsymbol{x}\\&=\bigg(y(1-g(\boldsymbol{w}^\top\boldsymbol{x}))-(1-y)g(\boldsymbol{w}^\top\boldsymbol{x})\bigg)x_j\\&=(y-f(\boldsymbol{x}))x_j\end{aligned} \]

现在我们要沿着梯度方向上升,因而前进方向就是梯度方向。最终采用随机梯度上升的迭代规则如下:

遍历所有样本,每遍历一个样本 \(\boldsymbol{x}_i\) 更新参数向量 \(\boldsymbol{w}\):

\[ w_j:=w_j+\alpha\big(y^{(i)}-f(\boldsymbol{x}^{(i)})\big)x_j^{(i)}\quad\quad(对于每一个 j) \]

参考