Logistic 回归

1.算法概述

在《线性回归》一文中,我们提到过广义线性模型,通过联结函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。 而 Logistic 回归(Logistic Regression)是广义线性回归中的重要代表,同线性回归中讲到的一样,因为简单容易实现,也具有很好的解释性,Logistic 回归在二分类的场景应用中几乎是使用最多的。

Logistic 回归虽然名字里带 “回归”,但它实际上是一种分类方法,即 LR 分类器(Logistic Regression Classifier),其数学模型是一个 sigmoid 函数,因图像像 S,又经常称之为 S 形曲线,sigmoid 本身就是 S 形的意思。

sigmoid 函数:

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

sigmoid 函数图像:

由于 sigmoid 函数的定义域是 (-INF, +INF),而值域为 (0, 1)。Logistic 回归通过 sigmoid 联结函数可以将变量映射到 (0, 1) 之间,这也是为什么最基本的 LR 分类器适合于对二分类(类 0,类 1)目标进行分类。  

我们令 $z=\theta^{T}x$,便可得到 Logistic 函数 (Sigmoid 函数)

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

注,Logistic 函数和 sigmoid 本质是一样的,有时候也会写成一样的形式。

对 sigmoid 函数求导可得:

$$\begin{align} g'(x)&=\left ( \frac{1}{1+e^{-x}}\right)’=\frac{e^{-x}}{(1+e^{-x})^2}\\&=\frac{1}{1+e^{-x}}\cdot \frac{e^{-x}}{1+e^{-x}}\\&=\frac{1}{1+e^{-x}}\cdot \left( 1-\frac{1}{1+e^{-x}}\right)\\&=g(x)\cdot(1-g(x)) \end{align}$$

2.算法推导

上一小节末尾,对 sigmoid 函数求导得到了 “$g(x) \cdot (1-g(x)) $”,这个结果似乎有点熟悉,有点像对立事件的联合概率,在抛硬币试验中经常看到。实际上,LR 目标函数的确立,就是转变成了概率形式表达的,具体如何转变的呢?我们先从对数线性模型说起。

2.1.对数线性模型

对数线性模型要先从几率说起,看看几率的概念。

几率(odds):一个事件的几率,是指该事件发生的概率与该事件不发生的概率的比值。

我们可以把二分类问题当做一个事件,那么被分到 “类 1” 的概率和 “类 0” 的概率可以分别表示为:

$$P(y=1|x;\theta)=h_\theta(x)$$

$$P(y=0|x;\theta)=1-h_\theta(x)$$

则二分类几率为:

$$odds = \frac{p}{1-p}=\frac{h_\theta(x)}{1-h_\theta(x)}$$

对数几率:也就是对几率取对数,称为 logit 函数

那么二分类的对数几率为:

$$ \begin{equation}\begin{split} log it(p)&=\log\frac{p}{1-p}=\log\frac{h_\theta(x)}{1-h_\theta(x)}\\&=\log\lgroup\frac{\frac{1}{1+e^{-\theta^Tx}}}{\frac{e^{-\theta^Tx}}{1+e^{-\theta^Tx}}}\rgroup\\&=\theta^Tx\end{split}\end{equation} \\$$

由上面的公式可以证名上面二分类的几率的对数是线性的,也是一个线性模型,只不过是建立在对数上的,所以称之为对数线性模型,它是一个广义线性模型(GLM)。

我们令 $z=\theta^Tx$,然后对对数几率进行变换,得到

$$\log\frac{p}{1-p}=z \to p=\frac{1}{1+e^{-z}}$$

发现最后的结果就是 sigmoid 函数,而且 sigmoid 取值范围是 [0, 1],满足加和为 1(通过 $h_\theta(x)$ 和 $1-h_\theta(x)$ 自定义实现) ,都能够解释将 sigmoid 看做概率的合理性。

实际上,Logistic 回归是正是利用 logit 函数将普通的线性模型变换成为了广义线性模型,实现了自变量和因变量的非线性映射,logit 函数正是 Logistic 回归这个广义线性模型的联结函数。因此,Logistic 回归有时也会称作对数几率回归。

2.2.代价函数

既然可以转化成概率,那么便可以利用最大似然估计(MLE)来写出目标函数:

$$ \begin{equation}\begin{split} L(\theta)&=p(\vec{y} | X; \theta)\\&=\prod_{i=1}^{m}p(y_i|x_{i};\theta) \\&=\prod_{i=1}^{m}(h_\theta(x_{i}))^{y_{i}}(1-h_\theta(x_{i}))^{1-y_{i}}\end{split}\end{equation}$$

接下来就是求解 MLE 的老套路,取对数加负号,然后代入 $h_\theta(x)$,可以得到 LR 的代价函数,即对数损失

$$ \begin{equation}\begin{split} J(\theta)&=loss(h_\theta(x_i), y_i)\\&=-\frac{1}{m}l(\theta)\\&=-\frac{1}{m}\sum_{i=1}^m(y_i\log h_\theta(x_i)+(1-y_i)\log(1-h_\theta(x_i)))\end{split}\end{equation}$$

将 sigmiod 函数代入 $h_{\theta}(x_i)$,并使用 ln 代替 log,上述公式还可以继续化简为 [1]

$$\begin{aligned} J(\theta) &= – \frac{1}{m} \sum_{i=1}^m \left [ y_i \ln h_{\theta}(x_i) + (1-y_i) \ln(1-h_{\theta}(x_i)  \right ]\\ &=- \frac{1}{m} \sum_{i=1}^m \left [ y_i\ln  \frac{1}{1+e^{-\theta^T x_i}}+(1-y_i)\ln \frac{e^{-\theta^T x_i}}{1+e^{-\theta^T x_i}}\right ]\\ &=- \frac{1}{m} \sum_{i=1}^m \left [ \ln \frac{1}{1+e^{\theta^T x_i}} + y_i \ln \frac{1}{e^{-\theta^T x_i}}\right ]\\ &= \frac{1}{m} \sum_{i=1}^m \left [ -y_i \theta^T x_i + \ln(1+e^{\theta^T  x_i})\right ] \end{aligned}$$

注意:

    1)线性回归中的损失函数是均方误差,而 Logistic 回归的损失函数是负对数似然(Negative Log-Likelihood,NLL)。其实他们都是通过最大似然估计推导而来

    2)一般似然求最大,而损失函数求最小,所以给对数似然加负号,变成负对数似然。不过,业界习惯上依然将 Logistic 回归的损失函数称为对数损失,即对数似然损失 (Log-likelihood Loss), 也有人会称为逻辑斯谛回归损失 (Logistic Loss)。

    3)对数损失等价于交叉熵损失 (cross-entropy Loss)(交叉熵损失可见 《机器学习中的各种 “熵”》中的交叉熵),都是在概率估计上定义的。

    4)对数损失(交叉熵损失)主要用于评估分类器的概率输出,十分常见,比如树模型、神经网络中都会用到,有时也会用于一些求期望极大算法的变体。

    5)有时为了分类更方便辨别,会把 $y_i$ 的取值映射到 {-1,1},即 $y_i \in \{-1, 1\}$,这里的 {-1,1} 不是区间,而是-1 和 1 两个值。

    6)损失函数中 $\frac{1}{m}$ 对结果没影响,有时候为了方便可以去掉。

3.参数优化

3.1.梯度下降法(Gradient Descent)

LR 的参数优化依然可通过梯度下降法来求得,先对代价函数求导:

最终得到 $\theta$ 的迭代公式,可以发现与线性回归的结论具有相同的形式,接下来选择一种梯度变种算法迭代优化即可,下面是 BGD 的例子:

$$\theta_j:= \theta_j-\alpha\sum_{i=1}^m(y^{(i)}-h_\theta(x^{(i)})x_j^{(i)}$$

3.2.感知器算法(The perceptron learning algorithm)

逻辑回归通过输出 0~1 的概率值,拐了个弯来做分类,感知器算法则直接输出 0 或 1 的离散值,下面是其假设: 

$$h_\theta(x)=g(\theta^Tx)=\left\{\begin{array}\\0 &if(\theta^T>0)\\1&otherwish\end{array}\right.$$

通过与梯度下降同样的迭代,即可得到感知器算法。感知器算法是神经网络的基础,它会被作为分析的起点 [2][3]

3.3.牛顿法(Newton’s method)

在这里提出牛顿法是因为它跟梯度法一样,可以用来求解最大化似然函数 $l(\theta)$ 的问题,而且往往牛顿法的收敛速度更快。 

牛顿法本身是一个求解多项式实根的迭代法,如 $f(x)=4x^3+2x^2+x+1$ 是一个难解的高次多项式,如果要求其 $f(x)=0$ 的实根,牛顿法是一个不错的选择 [2][3]。下面配图以说明牛顿法的思想: 

如上图所示:

随机初始化一个值,此处令 $\theta^{(0)}=4.5$ 为初始值,在 $f(\theta^{(0)})$ 处做一条切线与 x 轴相交,令该切线与 x 轴的交点为 $\theta^{(0)}$ 的迭代值,此处为 $\theta^{(1)}=2.8$,在 $f(\theta^{(1)})$ 处再做切线,再取该切线与 x 轴的交点做迭代,直到 $f(\theta^{(n)})=0$,该 $\theta^{(n)}$ 即为 $f(\theta)$ 的实根。 

下面推导其迭代规则:令 $\Delta=\theta^{(0)}-\theta^{(1)}$,我们可以得到 $f(\theta)$ 在 $\theta^{(0)}$ 处切线的斜率为 $f{‘}(\theta^{(0)})=\frac{f(\theta^{(0)})}{\Delta}$,由此可以得到 $\Delta=\frac{f(\theta^{(0)})}{f{‘}(\theta^{(0)})}$,从而有 $\theta^{(1)}=\theta^{(0)}-\Delta=\theta^{(0)}-\frac{f(\theta^{(0)})}{f{‘}(\theta^{(0)})}$,化为更一般的情况我们就有了迭代规则: 

$$\theta^{(n+1)}=\theta^{(n)}-\frac{f(\theta^{(n)})}{f{’}(\theta^{(n)})}$$

那么我们如何把牛顿法应用在最大化 $l(\theta)$ 的问题上呢? 

上面我们说到,牛顿法是用来求解 $f(\theta)=0$ 的解的,相对应的,我们原来是如何使 $l(\theta)$ 最大化的? 

之前的方法都是对 $l(\theta)$ 求导并使其导数为 0,即 “$l’(\theta)=0$”。 

所以我们只要令 $f(\theta)=l’(\theta)$,并求解出 $\theta$,即可使 $l’(\theta)$ 最大化。此时的迭代规则为: 

$$\theta^{(n+1)}=\theta^{(n)}-\frac{l'(\theta)^{(n)}}{l”(\theta)^{(n)}}$$

上面是 $\theta$ 是实数的情况,当 $\theta$ 是向量时,迭代规则如下: 

$$\theta^{(n+1)}=\theta^{(n)}-H^{-1}\nabla_\theta l(\theta)$$

其中 H 是函数 $l(\theta)$ 的二次导数矩阵,被称为 Hessian 矩阵,矩阵中每一个元素的值为: 

$$H_{ij}=\frac{\partial^2l(\theta)}{\partial\theta_i\partial\theta_j} $$

H 是一个 $n \times n$ 矩阵,n 是向量参数 $\theta$ 的长度。   

牛顿法相比起梯度往往法收敛速度更快,特别是迭代值距离收敛值比较近的时候,每次迭代都能使误差变成原来的平方,但是在高维时矩阵 H 的逆计算会非常耗时。

4.算法拓展

4.1.多分类模型 softmax 回归

logistic 回归模型在多分类问题上进行推广,就是 Softmax 回归模型,该模型同样是应用广泛,在是卷积神经网络中经常作为最后一层用来进行多分类,计算机视觉深度学习领域中的很多算法都有 Softmax 回归的参与。

实际上作为二分类的 Logistic 回归也可以处理多分类问题,同 SVM 一样,所有二分类问题都可以变向地解决多分类问题,具体方法以后再讲。

4.1.1.算法推导

二分类问题的标记值只有两种结果,而多分类问题则可以取 K 个不同的值,多分类问题的概率通过 softmax 函数表示。

softmax 函数:

$$h_\theta(x^{(i)})=p(y^{(i)}=k|x^{(i)}; \theta)=\frac{\exp(\theta_k^Tx^{(i)})}{\sum_{l=1}^K\exp(\theta_l^Tx^{(i)})}$$

其中,i 表示第个样本(假设共 N 个样本),K 表示共 K 个类别,k 表示当前样本为第 k 类,其对应的参数是 $\theta_k$,

所有的 $\theta$ 组成一个二维矩阵 $\theta_{K\times N}$,$K$ 是类别总数,$N$ 是样本维度,需要注意的是,这里的 $K  \times N$ 实际上冗余一个参数,因为 K 分类的自由度是 $(K-1) \times N$,因此参数个数严格来讲应该是,$(K-1) \times N$,详见下文 “softmax 回归和 logistic 回归之间的联系 “ 。

重点:

    1)softmax 函数转换概率的思路是评价每个类别,然后做归一化,这样每个输出都映射到 0~1 区间;

    2)  $h_\theta(x)$ 表示的是 x 属于不同类别的概率组成的向量,哪个类别对应的概率大,就可能是哪个类别 ,即 $h_\theta(x^{(i)}) = \max{p(y^{(i)}=k|x^{(i)}; \theta)}$ ;

    3)Logistic 回归处理的是伯努利分布,而 softmax 回归处理的是多项式分布。

4.1.2.代价函数

根据最大似然估计来建立目标函数,我们认为每个样本都是独立且互斥的(假设空间),故所有样本的概率全部乘起来,其中某个θ使得概率最大,就是似然函数:

$$L(\theta)=\prod_{i=m}^m\prod_{k=1}^Kp(y^{(i)}=k|x^{(i)};\theta)^{y_k^{(i)}}=\prod_{i=m}^m\prod_{k=1}^K(\frac{\exp(\theta_k^Tx^{(i)})}{\sum_{l=1}^K\exp(\theta_l^Tx^{(i)})})^{y_k^{(i)}}$$

注:$y_k^{(i) }$ 表示第 $i$ 个样本,第 $k$ 个类别的标记值,$y^{(i) }$ 是个向量,第 $i$ 个样本有 $k$ 个 one-hot 编码,所以只有真正符合第 k 类的那个值概率是取 1 的,其他都取 0,比如 $k=3$,当 $i=3$ 时,$y_k^{(i)}=1$,$i$ 为其他值的时候都为 0。所以,公式中整体看起来是个乘积,但是因为其他类别的标记值都是 0,0 次幂的结果实际是 1,乘 1 是没有影响的。

最大化似然函数,也就是最小化负对数似然函数,对似然函数加负号取对数,得到 Softmax 的代价函数:

$$\begin{equation}\begin{split} J_m(\theta)&=-\frac{1}{m}\ln L(\theta)\\&=-\frac{1}{m}\left [\sum_{i=1}^m\sum_{k=1}^K y^{(i)}_k \cdot \log p(y^{(i)}=k|x^{(i)};\theta)\right ]\\&=-\frac{1}{m}\left [\sum_{i=1}^m\sum_{k=1}^K y^{(i)}_k \cdot \log \frac{\exp(\theta_k^Tx^{(i)})}{\sum_{l=1}^K\exp(\theta_l^Tx^{(i)})}\right ]\\&=-\frac{1}{m}\left [\sum_{i=1}^m\sum_{k=1}^K y^{(i)}_k \cdot \left (\theta^T_kx^{(i)}-\ln\sum_{l=1}^K\exp(\theta^T_lx^{(i)})\right)\right ]\end{split}\end{equation}  $$

4.1.3.参数优化

一般使用梯度下降优化算法或者牛顿法来最小化代价函数,这里以梯度下降为例,$J(\theta)$ 对 $\theta_k$ 求偏导,得到,

$$\begin{equation}\begin{split}\frac {\nabla J(\theta)} {\nabla \theta_k} &= -\frac 1 m\sum_{i=1}^m \left [ \frac {\nabla\sum_{k=1}^K y^{(i)}_k\theta_k^T x^{(i)}} {\nabla \theta_k} – \frac {\nabla \sum_{k=1}^K y^{(i)}_k \ln(\sum_{l=1}^K \exp{(\theta_l^T x^{(i)}}))} {\nabla \theta_k} \right]\\& = -\frac 1 m\sum_{i=1}^m \left [ y^{(i)}_k x^{(i)} – \frac {\nabla\sum_{k=1}^K y^{(i)}_k\sum_{l=1}^K\exp{(\theta_l^T x^{(i)})}} {\sum_{l=1}^K \exp{(\theta_l^T x^{(i)})}\nabla \theta_k} \right] \\&=-\frac 1 m\sum_{i=1}^m \left [ y^{(i)}_kx^{(i)} – \frac {x^{(i)}\exp{(\theta_k^T x^{(i)})}} {\sum_{l=1}^K\exp{(\theta_l^Tx^{(i)})}} \right]\\&= -\frac 1 m\sum_{i=1}^m x^{(i)}\left [ y^{(i)}_k – p(y^{(i)}=k|x^{(i)};\theta) \right]\end{split}\end{equation} $$

接下来可选一种随机梯度下降变种方法,对 $\theta_k$ 进行迭代更新即可,以下以随机梯度下降为例:

$$\theta_k:=\theta_k-\alpha\nabla_{\theta_k}J(\theta; x^{(i)};y^{(i)})$$

4.1.4.softmax 回归和 logistic 回归之间的联系

logistic 回归代价函数是 softmax 代价函数的特殊情况。因此,logistic 回归代价函数可以改为:

$$ \begin{equation}\begin{split} J(\theta)&=-\frac{1}{m}\sum_{i=1}^m(y_i\log h_\theta(x_i)+(1-y_i)\log(1-h_\theta(x_i)))\\&=-\frac{1}{m}\left [\sum_{i=1}^m\sum_{k=1}^K y^{(i)}_k \cdot \log p(y^{(i)}=k|x^{(i)};\theta)\right ]\end{split}\end{equation}$$

同样的,当类别数 $K = 2$ 时,softmax 回归退化为 logistic 回归。这表明 softmax 回归是 logistic 回归的一般形式 [4]。 

$ 为什么二分类中参数只有一个θ向量,而 k 分类中参数却有 K 个θ向量?

其实二分类中的是 y=1 情况下的参数,而 y=0 情况下其实未给出参数,因为 y=0 的假设函数值可以通过 1-(y=1 的假设函数值) 得到,也就是二分类的自由度是 $(2-1)\times N$。同理,K 分类自由度 $(K-1) \times N $,也就是参数其实只需要 $(K-1)\times N$ 个参数就可以了,多余的一个参数是冗余的。不过,这个多余出来的参数对结果没有影响。

$Softmax 回归和 k 个二元分类器(Logistic)如何选择?

如果你在开发一个音乐分类的应用,需要对 k 种类型的音乐进行识别,那么是选择使用 softmax 分类器呢,还是使用 logistic 回归算法建立 k 个独立的二元分类器呢?

这一选择取决于你的类别之间是否互斥,例如,如果你有四个类别的音乐,分别为:古典音乐、乡村音乐、摇滚乐和爵士乐,那么你可以假设每个训练样本只会被打上一个标签(即:一首歌只能属于这四种音乐类型的其中一种),此时你应该使用类别数 k = 4 的 softmax 回归。(如果在你的数据集中,有的歌曲不属于以上四类的其中任何一类,那么你可以添加一个 “其他类”,并将类别数 k 设为 5。)

如果你的四个类别如下:人声音乐、舞曲、影视原声、流行歌曲,那么这些类别之间并不是互斥的。例如:一首歌曲可以来源于影视原声,同时也包含人声 。这种情况下,使用 4 个二分类的 logistic 回归分类器更为合适。这样,对于每个新的音乐作品 ,我们的算法可以分别判断它是否属于各个类别。

现在我们来看一个计算视觉领域的例子,你的任务是将图像分到三个不同类别中。(i) 假设这三个类别分别是:室内场景、户外城区场景、户外荒野场景。你会使用 sofmax 回归还是 3 个 logistic 回归分类器呢? (ii) 现在假设这三个类别分别是室内场景、黑白图片、包含人物的图片,你又会选择 softmax 回归还是多个 logistic 回归分类器呢?

在第一个例子中,三个类别是互斥的,因此更适于选择 softmax 回归分类器 。而在第二个例子中,建立三个独立的 logistic 回归分类器更加合适。 

因此,类别互斥选择 Softmax,类别不互斥则选择多个 Logistic 回归。

@One-Hot 编码 

什么是 One-Hot 编码

One-Hot 编码 (one-hot encoding),又称为独热码、独热编码、一位有效编码,主要是采用 N 位状态寄存器来对 N 个状态进行编码,个状态都有它独立的寄存器位,并且在任意时候,其中只有一位有效。  

One-Hot 编码示例

特征序列:

    颜色 = [‘ 红’, ‘ 绿’, ‘ 蓝’]

整数编码:

    颜色 = [1, 2, 3] 

One-Hot 编码: 

    颜色 = [ [0, 0, 1], [0, 1, 0], [1, 0, 0] ]

为什么要使用 One-Hot 编码

One-Hot 主要用于处理离散型特征。通过将离散特征通过 One-Hot 编码映射到欧式空间,可以进一步计算特征之间的距离与相似度,然后在回归,分类,聚类等机器学习算法中使用。

$ 使用 One-Hot 编码有以下好处:

    1)由于很多分类器或模型往往默认数据是连续的,并且是有序的,但是在很多机器学习任务中,存在很多类别特征是无序离散的,如果用常规的整数编码,将特征值转化成数字时,难免被分类器认为是有序且连续的数据,而 One-Hot 编码后的数据,是无序离散数据,很好的避免了数据被误读。

    2)使用 One-Hot 编码,一定程度上起到了扩充特征的作用,如上例中颜色一个特征经过编码后,成了 “红”、“绿”、“蓝” 三个特征,而且经过独热编码后,特征变成了稀疏的。

    3)分类问题,经常会对符合条件的输入变量和输出变量都进行 One-Hot 编码,这样编码后再进行数据的分类可能会更准确。

4.2.广义线性回归

4.2.1.指数族分布

指数族分布 (exponential family of distributions)亦称指数型分布族, 指数分布族是指可以表示为指数形式的概率分布。指数分布的形式如下:

$$P(y;\eta)=b(y)exp(\eta^{T}T(y)-a(\eta))$$

其中,$η$ 成为分布的自然参数(nature parameter);

$T(y)$ 是充分统计量(sufficient statistic),通常 $T(y)=y$。

当参数 $a$、$b$、$T$ 都固定的时候,就定义了一个以 $η$ 为参数的函数族。 

4.2.2.构造广义线性模型

广义线性模型(Generalize Llinear Model,GLM)是线性模型的扩展,通过联结函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型实质上是假设误差或因变量服从指数族分布,下图是常见的指数族分布以及对应的联结函数。

除了高斯分布与伯努利分布,大多数的概率分布都能表示成指数分布族的形式,如多项式分布(Multinomial),对有 K 个离散结果的事件建模;泊松分布(Poisson),对计数过程进行建模,如网站访问量的计数问题;指数分布(Exponential),对有间隔的证书进行建模,如预测公交车的到站时间的问题;等等,然后通过进一步的推导,就能得到各自的线性模型,这大大扩展了线性模型可解决问题的范围。

下面是 GLM 的三个假设:

    1. $y\mid x;\theta~ExponentialFamily(\eta)$:固定参数 $\theta$,在给定 $x$ 的情况下,$y$ 服从指数分布族(The exponential family)中以 $\eta$ 为参数的某个分布。

    2. 给定一个 $x$,我们需要的目标函数为 $h_\theta(x)=E\left[T(y)\mid x;\theta\right]$,后者为该分布的期望。

    3. 令 $\eta=\theta^Tx$。  

前面我们已经接触过线性回归、Logistic 回归以及 Softmax 回归,接下来我们就从广义线性模型的假设入手,再梳理一遍这几个模型 [2][3]

4.2.3.线性回归模型在广义线性模型下的推导

线性回归我们是通过对高斯分布的概率解释来获得确信的 $J(\theta)$ 的,那我们就尝试着将高斯分布放在广义线性模型下推导,看看能做出来什么模型。 

首先我们看向 GLM 的第一点假设,将高斯分布表示成指数分布族的形式: 

$$\begin{align} p(y;\mu)&=\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{(y-\mu)^2}{2\sigma^2})\\ &=\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{1}{2}y^2)\cdot \exp(\mu y-\frac{1}{2}\mu ^2) \end{align}$$

其中: 

$$\begin{align} \eta&=\eta^T=\mu\\ T(y)&=y\\ a(\eta)&=\frac{1}{2}\mu ^2=\frac{1}{2}\eta ^2\\ b(y)&=\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{1}{2}y^2) \end{align}$$

这就正好表示成了指数分布族的形式,符合了第 1 点假设的要求,接下来我们看向第二点假设,使我们的假设函数等于高斯分布的期望: 

$$\begin{align} h_\theta(x)&=E\left[T(y)\mid x;\theta\right]\\ &=E\left[y\mid x;\theta\right]\\ &=\mu\end{align}$$

最后我们看向第三点假设,令 $\eta=\theta^Tx$,又根据上面 $\eta=\mu$,则: 

$$\begin{align} h_\theta(x)&=\mu=\eta=\theta^Tx \end{align}$$

就这样得到了线性回归的公式。

4.2.4.Logistic 回归模型在广义线性模型下的推导

Logistic 回归的假设里是用到了伯努利分布的,我们同样地将伯努利分布放在广义线性模型下进行推导,看看是不是能得到 Logistic 回归的 $h_\theta(x)$。 

还是从第一点看起,把伯努利分布表示成指数分布族的形式: 

$$\begin{align} p(y;\phi)&=\phi^y(1-\phi)^{1-y}\\ &=(e^{\log\phi})^y(e^{\log(1-\phi)})^{1-y}\\ &=\exp(y\log\phi+(1-y)\log(1-\phi))\\ &=\exp((\log\frac{\phi}{1-\phi})y+\log(1-\phi))\end{align}$$

相应的参数为: 

$$\begin{align} \eta&=\log\frac{\phi}{1-\phi}\Longrightarrow\phi=\frac{1}{1+e^{-\eta}}\\ T(y)&=y\\ a(\eta)&=-\log(1-\phi)=\log((1-\phi)^{-1})=\log(1+e^\eta)\\ b(y)&=1\end{align}$$

接下来执行第二点与第三点,令假设函数 $h_\theta(x)$ 等于伯努利函数的期望,并且令 $\eta=\theta^Tx$: 

$$\begin{align} h_\theta(x)&=E\left[T(y)\mid x;\theta\right]\\ &=E\left[y\mid x;\theta\right]\\ &=\phi\\ &=\frac{1}{1+e^{-\eta}}\\ &=\frac{1}{1+e^{-\theta^Tx}} \end{align}$$

这就是 Logistic 函数的由来了。

4.2.5.多分类回归模型在广义线性模型下的推导

多项式分布

接下来再来利用多项式分布进行建模,得到解决多分类问题的模型,它是 Logistic 回归二分类模型的扩展。 

首先我们给出多项式分布的一些公式: 

$$\begin{align} p(y=i)&=\phi_i\\ \sum_{i=1}^k\phi_i&=1\end{align}$$

其中 $y \in{1,2,3,\cdots,k }$,又因为 $\phi_i$ 累加为 1,我们可以只保留 $k-1$ 个参数: 

$$\phi_k=1-\sum_{i=1}^{k-1}\phi_i $$

从两点分布出发

为了有个直观的理解,我们先来看 $k=2$ 时的情况。 

此时 $,p(y=1)=\phi_1,p(y=2)=\phi_2$,并且 $\phi_1+\phi_2=1$,于是有 $\phi_2=1-\phi_1 $

$$\begin{align} p(y=1)&=\phi_1\\ p(y=2)&=\phi_2\\ \phi_1+\phi_2&=1 \Longrightarrow \phi_2=1-\phi_1\\ p(y\mid \phi_1)&=\phi_1^{2-y}\phi_2^{y-1}=\phi_1^{2-y}(1-\phi_1)^{y-1}\\  &\Longrightarrow p(y\mid \phi)=\phi^{2-y}(1-\phi)^{y-1} \end{align} $$

当 $y=1$ 时,只取 $\phi_1$;当 $y=2$ 时,只取 $\phi_2$,即 $1-\phi_1$,又因为只有一个参数 $\phi_1$ 了,干脆就直接令 $\phi_1=\phi$。这与两点分布所要表达的意义是一模一样的,只不过两点分布只做二分类,就采取了取 0 和 1 的方式,使得整个式子更简洁。

多项式概率分布

那么在更一般的多分类问题中,其概率分布为: 

$$p(y;\phi)=\phi_1^{I(y=1)}\phi_2^{I(y=2)}\cdots\phi_k^{I(y=k)}$$

这个式子所要表达的意思是,当 y 的值取到 i 的时候,只取相应的 $\phi_i$ 的值。因为当 k 的取值不同之时,$\phi_i$ 的指数表示形式会不一样(如上面的例子,同是两点分布,仅是取值不同就会使得其指数表达不一样)。 

为了更方便的表达,引入了上面的指示器函数(Indicator function),如果判断条件为真,输出 1,反之输出 0: 

$$\begin{align} I\begin{Bmatrix} Ture   \end{Bmatrix}&=1\\ I\begin{Bmatrix} False   \end{Bmatrix}&=0 \end{align}$$

如 $I\begin{Bmatrix} 3=3 \end{Bmatrix}=1$,$I\begin{Bmatrix} 3=2 \end{Bmatrix}=0$。 

所以,当 y=1 时,$p(y;\phi)$ 的第一个乘子 $\phi_1$ 的指数为 1,其他所有的乘子的指数全部为 0,进一步推广到所有取值的情况,就起到了当 y 的值取到 i 的时候,只取相应的ϕi 的值的作用。 

但是这个指示器函数是一个抽象的东西,如何才能确实地实现这个作用呢?我们给出如下所示的 $T(y)$: 

$$\begin{align} T(1)=\left[ \begin{matrix}1\\0\\0\\\vdots\\0\end{matrix}\right], T(2)=\left[ \begin{matrix}0\\1\\0\\\vdots\\0\end{matrix}\right],\cdots, T(k-1)=\left[ \begin{matrix}0\\0\\0\\\vdots\\1\end{matrix}\right], T(k)=\left[ \begin{matrix}0\\0\\0\\\vdots\\0\end{matrix}\right] \end{align}$$

这样 $T(y)$ 中的某个元素可以表示成: 

$$\begin{align} T(y)_i=I\begin{Bmatrix} y=i \end{Bmatrix}\end{align}$$

举例来说,当 $y=2$ 时,

    $T(2)$ 中的第一个元素为:$T(2)_1=I\begin{Bmatrix} 2=1 \end{Bmatrix}=0$;

    $T(2)$ 中的第二个元素为:$T(2)_2=I\begin{Bmatrix} 2=2 \end{Bmatrix}=1$,这就解决了指数上标什么时候取 0 什么时候取 1 的问题。 

于是我们进一步得到具体的多项式分布的概率分布:

$$\begin{align} p(y;\phi)&=\phi_1^{I\begin{Bmatrix} y=1\end{Bmatrix}}\phi_2^{I\begin{Bmatrix} y=2\end{Bmatrix}}\cdots\phi_k^{I\begin{Bmatrix} y=k \end{Bmatrix}}\\ &=\phi_1^{I\begin{Bmatrix} y=1\end{Bmatrix}}\phi_2^{I\begin{Bmatrix} y=2\end{Bmatrix}}\cdots\phi_k^{1-\sum_{i=1}^{k-1}I\begin{Bmatrix} y=i\end{Bmatrix}}\\ &=\phi_1^{T(y)_1}\phi_2^{T(y)_2}\cdots\phi_k^{1-\sum_{i=1}^{k-1}T(y)_i} \end{align}$$

在广义线性模型下的推导

还是从广义线性模型的第一点开始做起,将式(50)的概率分布表示成指数分布族的形式: 

$$\begin{align} p(y;\phi)&=\phi_1^{T(y)_1}\phi_2^{T(y)_2}\cdots\phi_k^{1-\sum_{i=1}^{k-1}T(y)_i}\\ &=\exp(T(y)_1\log\phi_1+T(y)_2\log\phi_2+\cdots+((1-\sum_{i=1}^{k-1}T(y)_i)\log\phi_k)\\ &=\exp(T(y)_1\log\frac{\phi_1}{\phi_k}+T(y)_2\log\frac{\phi_2}{\phi_k}+\cdots+T(y)_{k-1}\log\frac{\phi_{k-1}}{\phi_k}+\log\phi_k)\\ &=b(y)\exp(\eta^TT(y)-a(\eta)) \end{align}$$

我们有: 

$$\begin{align} \eta&=\left[ \begin{matrix}\log\frac{\phi_1}{\phi_k}\\\log\frac{\phi_2}{\phi_k}\\\vdots\\\log\frac{\phi_{k-1}}{\phi_k}\end{matrix}\right]\\ T(y)&=I\begin{Bmatrix} y=i \end{Bmatrix}, \; i=1,2, \cdots,k\\ a(\eta)&=-\log\phi_k\\ b(y)&=1  \end{align}$$

观察式上式我们可以发现,向量 $\eta$ 的第 i 个元素为: 

$$\eta_i=\log\frac{\phi_i}{\phi_k}\Longrightarrow e^{\eta_i}=\frac{\phi_i}{\phi_k}$$

令其累加,得到: 

$$\sum_{i=1}^ke^{\eta_i}=\frac{\sum_{i=1}^k\phi_i}{\phi_k}=\frac{1}{\phi_k}\Longrightarrow \phi_k=\frac{1}{\sum_{i=1}^ke^{\eta_i}}$$

把 $\phi_k$ 带入 $e^{\eta_i}$,即可得到多项式分布的期望: 

$$\phi_i=\frac{e^{\eta_i}}{\sum_{i=1}^ke^{\eta_i}}$$

那么接下来的第二步与第三步,令假设函数 $h_\theta(x)$ 等于多项式分布的期望,并且令 $\eta=\theta^Tx$,就显得非常地顺理成章了: 

$$\begin{align} h_\theta(x)&=E\left[T(y)\mid x;\theta\right]\\ &=E\left[ \begin{matrix}p(y=1\mid x;\theta)\\p(y=2\mid x;\theta)\\\vdots\\p(y={k-1}\mid x;\theta)\end{matrix}\right]\\ &=\left[ \begin{matrix}\phi_1\\\phi_2\\\vdots\\\phi_{k-1}\end{matrix}\right]\\  &=\left[ \begin{matrix}\frac{e^{\eta_1}}{\sum_{i=1}^ke^{\eta_i}}\\\frac{e^{\eta_2}}{\sum_{i=1}^ke^{\eta_i}}\\\vdots\\\frac{e^{\eta_{k-1}}}{\sum_{i=1}^ke^{\eta_i}}\end{matrix}\right] =\left[ \begin{matrix}\frac{e^{\theta_1^Tx}}{\sum_{i=1}^ke^{\theta_i^Tx}}\\\frac{e^{\theta_2^Tx}}{\sum_{i=1}^ke^{\theta_i^Tx}}\\\vdots\\\frac{e^{\theta_{k-1}^Tx}}{\sum_{i=1}^ke^{\theta_i^Tx}}\end{matrix}\right] \end{align}$$

这就是 softmax 回归的模型了。

5.算法优缺点

优点:

1)不仅可以做分类,还可以做概率预测

LR 分类器预测结果是界于 0 和 1 之间的概率,可得到近似概率预测,而不是仅预测出 “类别”,这对许多需利用概率辅助决策的任务很有用。在实际分类问题应用中,有时候根据具体情况可自行设定一个阈值,可能性高于阈值是一类,低于阈值是另一类,比如认为预测概率大于 0.7 才是用户喜欢的商品,而不是 0.5。 

2)无需事先假设数据分布

LR 直接对分类可能性进行建模,无需事先假设数据分布,这样就避免了假设分布不准确所带来的问题。

3)可以适用于连续性和类别性自变量

即数值型和标称型数据都可用于 LR 分类器。

@ 数值型和标称型数据

标称型:一般在有限的数据中取,而且只存在 “是” 和 “否” 两种不同的结果(一般用于分类)

数值型:可以在无限的数据中取,而且数值比较具体化,例如 4.02、6.23 这种值(一般用于回归分析)

4)使用简单、计算方便且解释性强

对数几率函数 (logit) 是任意阶可导的凸函数,因此 LR 有很好的数学性质,现有的许多数值优化算法都可直接用于求取最优解,计算代价不高。

缺点:

1)对模型中自变量多重共线性较为敏感

例如两个高度相关自变量同时放入模型,可能导致较弱的一个自变量回归符号不符合预期,符号被扭转。需要利用因子分析或者变量聚类分析等手段来选择代表性的自变量,以减少候选变量之间的相关性 [5]

2)变量变化对目标概率的影响区分度不明确,部分分类问题精度可能不高

预测结果呈 “S” 型,因此从 log(odds) 向概率转化的过程是非线性的,在两端随着 log(odds) 值的变化,概率变化很小,边际值太小,slope 太小,而中间概率的变化很大,很敏感。 导致很多区间的变量变化对目标概率的影响没有区分度,无法确定阈值 [5]

3)各特征之间不需要满足条件独立假设,但各个特征的贡献是独立计算的。

Logistic 回归不像朴素贝叶斯(NB)一样需要满足条件独立假设(因为它没有求后验概率)。但每个特征的贡献是独立计算的,即 LR 是不会自动帮你结合不同的特征来产生新特征的 (而决策树、LSA、 pLSA、 LDA 具备这样的能力)。举个例子,如果你需要 “TF·IDF” 这样的特征,就必须明确的给出来,若仅仅分别给出两维 “TF” 和 “IDF” 是不够的,那样只会得到类似 “a·TF + b·IDF” 的结果,而不会有 “c·(TF·IDF)” 的效果 [6]

6.应用场景

Logistic 回归和线性回归一样,都是比较简单且解释性非常好的算法,它们常常可以用来作为最初探索数据的一种方法,通过最小化预测值与实际结果值之间的差距,不断摸索调试,了解各个特征的重要性和关联性,而得到输入特征之间的最佳组合方式,因此,这两个算法从某种程度上可以作为一种特征选择或者是数据探索的手段。当然,它们的性能也并不弱,在很多场景是可以堪当大用的。

应用领域:银行风控,信用风险度量,客户流失预测,患病率预测,其他大部分分类问题等。

数据规模:可以很大,并且有分布式实现

特征规模:可以很高

在线预测:可以支持,基于随机梯度下降 [7][8]

相关技巧:为了提高性能,有时候需要做一些特征处理

    1)类别型数据进行 One-Hot 编码

    2)连续型数据进行离散化 [9]

    3)特征少的数据可以通过多项式映射进行特征升维

7.参考资料

[1] 周志华. 机器学习. 清华大学出版社

[2] Andrew Ng.Machine Learning.Standord

[3] NJiahe. 线性回归、logistic 回归、广义线性模型.CSDN

[4] UFLDL.Softmax 回归.Stanford

[5] huyue200806. 逻辑回归优缺点. 新浪博客

[6] laolu1573. 逻辑回归模型 (Logistic Regression, LR). 机器学习知识库

[7] 混沌战神阿瑞斯. 逻辑回归(LR)总结复习. 博客园

[8]【拓展】在机器学习中有哪些典型的 Online 算法. 知乎

[9]【拓展】什么情况下将连续的特征离散化之后可以获得更好的效果. 知乎

© 除特别注明外,本站所有文章均为卢明冬的博客原创 , 转载请联系作者。
© 本文链接:https://lumingdong.cn/logistic-regression.html
卢明冬

大千世界,人生百态,世事万物,皆无所固形。 行走于世,自当因变而变,写此文,以自省。 人性不离根泽,形之百变,亦可应万物。 凡人之处世,皆不能守固而据,应思变而存。 既可谨言慎行指点江山,又可放浪形骸鲜衣怒马, 既可朝九晚五废寝忘食,又可浪迹天涯四海为家。 随形而居,随意而为,静则思动,动则思远。 虽困于束缚,又能借力束缚,虽惘于迷思,又能获于迷思。 看山是山,看水是水,有酒学仙,无酒学佛。 心存根本,又何惧变乎?

相关文章
评论 ( 1 )
  1. 卫青
    2018年8月4日 at 下午3:33
    回复

    非常棒👍

写下您的评论...