人工智能算法学习笔记(三)——线性模型之逻辑回归

这几天在学习凸优化理论,凸优化(convex optimization)是最优化问题中非常重要的一类,也是被研究的很透彻的一类。对于机器学习来说,如果要优化的问题被证明是凸优化问题,则说明此问题可以被比较好的解决。上一章中的梯度下降法就是针对凸函数进行的一种迭代算法。今后还会涉及到诸如牛顿法,拟牛顿法等更多的凸优化算法。好了,言归正传,这章记录逻辑回归的点点滴滴。。。
我在一篇文章中偶然看到一句话,感觉很好:“如何凸显你是一个对逻辑回归已经非常了解的人呢。那就是用一句话概括它!逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。
这里面其实包含了5个点,1:逻辑回归的假设,2:逻辑回归的损失函数,3:逻辑回归的求解方法,4:逻辑回归的目的,5:逻辑回归如何分类
接下来就从这五点展开。

一、逻辑回归的假设

任何的模型都是有自己的假设,在这个假设下模型才是适用的。
逻辑回归的第一个基本假设假设数据服从伯努利分布。伯努利分布有一个简单的例子是抛硬币,抛中为正面的概率是pp,抛中为负面的概率是1p1-p.在逻辑回归这个模型里面是假设hθ(x)h_{\theta}\left ( x \right ) 为样本为正的概率,1hθ(x)1-h_{\theta}\left ( x \right )为样本为负的概率。
那么整个模型可以描述为:hθ(x;θ)=ph_{\theta}\left ( x;\theta \right )=p

逻辑回归的第二个假设是假设样本为正的概率。
这里所谓的概率其实是一个假设函数hθh_{\theta}
我们回忆一下,在线性回归中,对数据进行拟合,是在每个特征上都乘以一个回归系数,然后把所有结果再相加,即 :
hθ=θ0x0+θ1x1+...+θnxnh_{\theta}=\theta_0x_0+\theta_1x_1+...+\theta_nx_n,向量化,即:hθ=θTxh_{\theta}=\theta^Tx
而在逻辑回归中,将hθ=θTxh_{\theta}=\theta^Tx代入sigmoidsigmoid函数,就可以得到一个属于(0,1)\left ( 0,1 \right )范围的数值(PS:这不就是概率么,呵呵)。
sigmoidsigmoid函数定义如下:
g(z)=11+ezg\left ( z \right )=\frac{1}{1+e^{-z}}
sigmoidsigmoid函数图像为:人工智能算法学习笔记(三)——线性模型之逻辑回归
这里有个问题就是为什么是sigmoidsigmoid函数呢?
sigmoidsigmoid函数的值域(0,1)∈(0,1),这与概率值的范围[0,1][0,1]很是巧合,我们可以把sigmoidsigmoid函数与一个概率分布联系起来,那就是伯努利分布
它的概率分布函数是:
f(xp)={px(1p)1x if x=0,10 if x0,1f\left ( x\mid p \right )=\begin{cases} p^x\left ( 1-p \right )^{1-x} & \text{ if } x={0,1} \\ 0 & \text{ if } x \neq {0,1} \end{cases}

敲黑板!之所以是sigmoidsigmoid函数的理论依据是指数分布族理论(https://blog.****.net/u012421852/article/details/79614417),证明了伯努利分布也是指数分布族,且可以推出p=11+eη(θ)p=\frac{1}{1+e^{-\eta \left ( \theta \right )}}

综上所述,逻辑回归的假设函数就是:hθ(x)=g(θTx)=11+eθTx=p(1θ;x)h_{\theta}\left ( x \right )=g\left ( \theta^Tx \right )=\frac{1}{1+e^{-\theta^{T}x}}=p\left ( 1\mid\theta;x \right )

二、逻辑回归的损失函数

在上一章的线性回归中我们是用最小二乘公式来做损失函数:
J(w)=12in(ϕ(zi)yi)2J\left ( w \right )=\frac{1}{2}\sum_{i}^{n}\left ( \phi \left ( z^i \right ) -y^i\right )^2
minJ(w)minJ\left ( w \right )
其中zi=wTxi+bz^i=w^Tx^i+bii表示第ii个样本点,yiy^i表示第ii个样本的真实值,ϕ(zi)\phi \left ( z^i \right )表示第ii个样本的预测值。
如果把sigmoidsigmoid函数作为ϕ(zi)\phi \left ( z^i \right )带入上面那个成本函数中会发现该函数是一个非凸函数!(PS:有关凸优化理论的知识,我会在后面章节专门进行记录。)直观理解非凸函数,如下图所示:
人工智能算法学习笔记(三)——线性模型之逻辑回归
这个函数里面有很多极小值,如果采用梯度下降法,则会导致陷入局部最优解中,有没有一个凸函数的成本函数呢?看接下来的推导过程。
对于二分类问题有:
p0=p(y=0x,θ)=11+eθTx,y=0p_0=p\left ( y=0\mid x,\theta \right )=\frac{1}{1+e^{\theta^Tx}},y=0

p1=p(y=1x,θ)=eθTx1+eθTx,y=1p_1=p\left ( y=1\mid x,\theta \right )=\frac{e^{\theta^Tx}}{1+e^{\theta^Tx}},y=1

用一个式子表示上面这个分段函数,可以采用连乘的形式:
p(yx,θ)=p1yp01y,y=0,1p\left ( y \mid x,\theta \right )=p_1^y*p_0^{1-y},y=0,1
这样写的原因很简单,当y=1的时候,后面那一项是不是没有了,那就只剩下x属于1类的概率,当y=0的时候,第一项是不是没有了,那就只剩下后面那个x属于0的概率。所以不管y是0还是1,上面得到的数,都是(x, y)出现的概率。这样对于整个样本集,也就是n个独立的样本出现的似然函数为(因为每个样本都是独立的,所以n个样本出现的概率就是他们各自出现的概率相乘):
L(θ)=p1yp01y=p(y=1x,θ)y(1p(y=1x,θ))1yL\left ( \theta \right )=\prod p_1^y*p_0^{1-y}=\prod p\left ( y=1\mid x,\theta \right )^{y}\left ( 1-p\left ( y=1\mid x,\theta \right ) \right )^{1-y}
因此该极大似然函数就是逻辑回归的损失函数

三、求解方法

既然是最大似然,目标当然是要最大化似然概率了:
maxp(y=1x,θ)y(1p(y=1x,θ))1ymax\prod p\left ( y=1\mid x,\theta \right )^{y}\left ( 1-p\left ( y=1\mid x,\theta \right ) \right )^{1-y}
因为是要求极大似然函数,所以要对L(θ)L\left ( \theta \right )做个变换,那就是取对数,然后再做简化:
L(θ)=logp(yi=1x,θ)yi(1p(yi=1x,θ))1yiL\left ( \theta \right )=log\prod p\left ( y_i=1\mid x,\theta \right )^{y_i}\left ( 1-p\left ( y_i=1\mid x,\theta \right ) \right )^{1-y_i}

=i=1nyilogp(yi=1x,θ)+(1yi)log(1p(yi=1x,θ))\quad\qquad\quad\qquad=\sum_{i=1}^{n}y_ilogp\left ( y_i=1\mid x,\theta \right )+\left ( 1-y_i \right )log\left ( 1-p\left ( y_i=1|x,\theta \right ) \right )

=i=1nyilogp(yi=1x,θ)1p(yi=1x,θ)+i=1nlog(1p(yi=1x,θ))\quad\qquad\quad\qquad=\sum_{i=1}^{n}y_ilog\frac{p\left ( y_i=1\mid x,\theta \right )}{1-p\left ( y_i=1|x,\theta \right )}+\sum_{i=1}^{n}log\left ( 1-p\left ( y_i=1|x,\theta \right ) \right )

=i=1nyi(θ0+θ1x1+...+θnxn)+i=1nlog(1p(yi=1x,θ))\quad\qquad\quad\qquad=\sum_{i=1}^{n}y_i\left ( \theta_0+\theta_1x_1+...+\theta_nx_n\right )+\sum_{i=1}^{n}log\left ( 1-p\left ( y_i=1|x,\theta \right ) \right )

=i=1nyi(θTxi)+i=1nlog(1+eθTxi)=\sum_{i=1}^{n}y_i\left ( \theta^Tx_i\right )+\sum_{i=1}^{n}log\left ( 1+e^{\theta^T{x_i}}\right )

那么上式第三步到第四步是怎么得到的呢?
前面提到过,输出值p(y=1x,θ)p\left ( y=1\mid x,\theta \right )代表正类的概率,那么1p(y=1x,θ)1-p\left ( y=1\mid x,\theta \right )就代表负类的概率。

=p(y=1x,θ)1p(y=1x,θ)\frac{正类概率}{负类概率}=\frac{p\left ( y=1\mid x,\theta \right )}{1-p\left ( y=1\mid x,\theta \right )}被称为几率ln(p(y=1x,θ)1p(y=1x,θ))ln\left ( \frac{p\left ( y=1\mid x,\theta \right )}{1-p\left ( y=1\mid x,\theta \right )} \right )称为对数几率(logit)(logit)

p(y=1x,θ)=eθTx1+eθTxp\left ( y=1\mid x,\theta \right )=\frac{e^{\theta^Tx}}{1+e^{\theta^Tx}}带入上式。
于是:
logit(y)=ln(eθTx)=θTx=θ0+θ1x1+...+θnxnlogit\left(y\right)=ln\left(e^{\theta^Tx}\right)=\theta^Tx=\theta_0+\theta_1x_1+...+\theta_nx_n
其本质是用θTx\theta^Tx线性回归模型逼近对数几率,因此逻辑回归也被称为对数几率回归

得到L(θ)L\left(\theta\right)之后,要求最大值,那么就要对θ\theta求偏导,得:
L(θ)θ=i=1nyixii=1neθTxi1+eθTxixi=i=1n(yihθ(xi))xi\frac{\partial L\left ( \theta \right )}{\partial \theta}=\sum_{i=1}^{n}y_ix_i-\sum_{i=1}^{n}\frac{e^{\theta^Tx_i}}{1+e^{\theta^Tx_i}}x_i=\sum_{i=1}^{n}\left ( y_i-h_\theta\left ( x_i \right ) \right )x_i

令该导数为0,即可求出最优解,但是很遗憾,这个方程无法求出解析解。这里采用梯度上升法来计算最大值。可以用如下式子进行梯度上升算法迭代更新θ\theta的取值:
θj=θj+αL(θ)θj=θj+i=1n(yihθ(xi))xi\theta_j=\theta_j+\alpha \frac{\partial L\left ( \theta \right )}{\partial \theta_j}=\theta_j+\sum_{i=1}^{n}\left ( y_i-h_\theta\left ( x_i \right ) \right )x_i
梯度上升就是将负号改为了正号,因为这里是要求最大值。同样也有批量梯度上升,随机梯度上升。
最后θTx\theta^Tx就是判定边界(Decision Boundary)!

四、逻辑回归应用场景

逻辑回归的目的便是将数据二分类,提高准确率。怎么理解这句话呢?
回归,其直观的理解就是拟合的意思。回归的本质就是我们的预测结果尽量贴近实际观测的结果,或者说我们的求得一些参数,经过计算之后的预测结果尽可能接近真实值。
对于二类线性可分的数据集,使用线性感知器就可以很好的分类。但是如果二类线性不可分的数据集,我们无法找到一条直线能够将两种类别很好的区分,即线性回归的分类法对于线性不可分的数据无法有效分类那该怎么办?我们可以使用非线性分类器。
诚然,数据线性可分可以使用线性分类器,如果数据线性不可分,可以使用非线性分类器,这里似乎没有逻辑回归什么事情。但是如果我们想知道对于一个二类分类问题,对于具体的一个样例,我们不仅想知道该类属于某一类,而且还想知道该类属于某一类的概率多大,有什么办法呢?
线性回归和非线性回归的分类问题都不能给予解答,因为线性回归和非线性回归的问题,假设其分类函数如下:
y=wx+by=wx+b
yy的阈值处于(,+)\left(-\infty ,+\infty \right),此时不能很好的给出属于某一类的概率,因为概率的范围是[0,1]\left [ 0,1 \right ],我们需要一个更好的映射函数,能够将分类的结果很好的映射成为[0,1]\left [ 0,1 \right ]之间的概率,并且这个函数能够具有很好的可微分性。在这种需求下,人们找到了这个映射函数,即逻辑斯谛函数,也就是sigmoidsigmoid函数。sigmoidsigmoid函数完美的解决了上述需求,而且sigmoidsigmoid函数连续可微分。
逻辑回归的做法是划定一个阈值,y值大于这个阈值的是一类,y值小于这个阈值的是另外一类。阈值具体如何调整根据实际情况选择。一般会选择0.5做为阈值来划分。
应用场景举例:
1、逻辑回归主要在流行病学中应用较多。寻找某一疾病的危险因素;根据模型,预测在不同的自变量情况下,发生某病或某种情况的概率有多大;实际上跟预测有些类似,也是根据模型,判断某人属于某病或属于某种情况的概率有多大,也就是看一下这个人有多大的可能性是属于某病。
2、个人信用评估领域,在已知影响消费者信用品质的各种预测指标(也称中间变量)后,需要预测申请人的信贷风险概率(或申请人的“好”与“坏”)。申请人的“好”与“坏”(outcomeflag)\left(outcome flag\right)yy表示,y=1y=1 表示“坏”,y=0y=0表示“好”,现在要预测 P(y=1)P\left(y=1\right)
3、数据挖掘、经济预测领域。为了寻找更好人口预测方法,经济领域常用的自回归模型创新式的被应用到中国的人口预测中。通过结果预测结果分析,易知自回归的预测效果相当不错。进一步探索人口的预测理论,精典的logisticlogistic离散模型被用来和自回归模型做对比。由于自回归模型和logisticlogistic离散模型在形式上有很大的相似,对两者在建模原理上进行了对比分析,且对两个模型理论进行了推广。

未完待续。。。