浅谈Logisitic Regression

来源:互联网 发布:sql建立学生关系语句 编辑:程序博客网 时间:2024/06/05 14:56

浅谈Logisitic Regression

引言

这一篇呢主要是谈谈我自己对于Logisitic Regression的一些理解。这里呢,Regression虽然中文是回归的意思,但是Logisitic Regression可不是预测连续值的那个回归哦。它是主要用来分类的一种方法。(敲黑板) 这里的分类不仅仅可以进行二分类,多分类当然也是可以哒!只不过咱们进行一丢丢小的改进就ok啦!这个关于多分类的问题嘛,咱们后面再说哈,这里先以最简单的二分类为模型细细掰扯掰扯。

小tips:在学习Logisitic Regression回归之前,希望大家都已经对Linear Regression有所了解哦。

正文
Now, let’s begin!
首先,我们来看一张图:
样本集

这是一个二维的数据集,每个样本拥有两个特征(x1,x2),下面我们的任务就是用Logisitic Regression将这两类样本点用类似这一条红线分类开来:
这里写图片描述

在Linear Regression中,我们预测一个连续值的方法是先提取样本的特征,如x=(x0,x1,x2……xn),n属于正整数。然后训练每个特征的权重θ,使θT.x=y,y即为预测的连续值结果。然而,这个连续的结果并不能直接用于分类,而我们的分类也必须用到数据集的各个特征,使之能够表征到分类模型中,那么怎么办呢?我们现在引入一个函数名为sigmoid函数:

g(z)=11+ez

这个函数来源于一种分布名为逻辑斯谛分布(logisitic distribution)。关于这方面的知识,请参阅李航老师的《统计学习方法》,这里就不再深入讨论了。
g(z)的函数图象如下:
sigmoid函数图像
该函数为单调递增函数,定义域为整个实数集,值域为(0,1) 横轴越大,越趋近于1,相反,越趋近于0。
看到这儿的时候有没有猛然想起《信号与系统》里的单位跃迁函数呀?(恩,你很机智^-^)

sigmoid函数中的z,其实就是我们用类似于Linear Regression中的y=θTx(只是形式相同啊喂),我们将其代入到g(z)中就得到了:

hθ(x)=g(θTx)=11+eθTx

不难看出,输出的结果是个属于(0,1)的数。我们假设分类标签为{0,1},输出的标签为,若h>0.5 则令y=1,即为正例;相反,若h<0.5 则令y=0,即y为反例。 如下图所示 这样我们就可以对上面那个样本集点的图进行分类啦!这里写图片描述

下面一个比较关键的问题就是如何让这个model的分类效果最好呢?
这个问题里包含了两个方面:1.如何选取各个特征xi的权重θ  2.如何定义这个model的目标函数?
其实这两个问题是可以统一到一起的,我们先定义目标函数,然后利用最优化算法求解其权重参数θ。
在一般模型中,会采用MSE(最小误差平方和的准则函数)来作为目标函数,若我们在Logisitic Regression中采用如下目标函数J(θ)

Cost(hθ(x(i)),y(i))=12(hθ(xi)y(i))2

Stanford的Andrew Ng老师说,这是一个关于θ的非凸函数,我们可能会得到如下图像:
非凸MSE

所以,MSE就明显不适用于Logisitic Regression了。那我们怎么办呢?我们需要求得权重θ,那么也就是说我们需要估计θ,使θ最接近于实际值对吧?既然我们现在已经有了样本集了,那么……对!这不就是可以利用极大似然估计吗!下面的式子我们就信手拈来啦!
在这里假设类别标签为{0,1},那么

P(y=1|x;θ)=hθ(x)
P(y=0|x;θ)=1hθ(x)

这个分段函数我们可以整合成一个式子:
p(y|x;θ)=(hθ(x))y(1(hθ(x))1y

Obviously,对于一个样本集,可以得到其似然函数L(θ):
L(θ)=p(y⃗ |X;θ)
=i=1mp(y(i)|x(i);θ)
=i=1m(hθ(x(i)))y(i)(1hθ(x(i)))1y(i)

将其转化为对数形式:
l(θ)=logL(θ)=i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))

接下来我们求得这个对数似然函数的偏导,就可以为后面的最优化算法做铺垫啦!
l(θ)(θj)=i=1m(y(i)g(θTx(i)))x(i)j

有了这些条件之后,梯度上升算法已经饥渴难耐啦!(梯度上升算法可以求得l(θ)的最大值,属于最优化算法中一种常用的方法。在Andrew Ng老师视频中,他将目标函数J(θ)前加了”-“,使最小化目标函数,对应的,采用的应是梯度下降法。其实两者原理一样,只不过训练参数时一个是“+”,一个是“-”。关于梯度下降或者上升算法,希望不了解的同学看一下最优化方法方面的书籍哦,都会有介绍的。)
我们下面利用梯度上升算法开始训练权重参数θ:

Repeat until convergence{

θj:θj+αi=1m(y(i)hθ(x(i)))x(i)j

}

这样,Logisitic Regression中的参数θ就训练出来啦!
但是注意!如果数据量很大的情况下,这种梯度算法就出问题了。因为每次更新都要遍历数据集,计算复杂度很高。所以每次用一个样本点更新权重的“随机梯度上升法”就更适用于数据量大的场景下。

随机梯度上升算法伪代码:
   所有回归系数初始化为1
   对数据集中每个样本
        计算该样本的梯度
        使用alpha×gradient更新回归系数值
   返回回归系数值

但是再注意!等迭代次数多了以后会发现,回归系数会在一个稳定的数值上下震荡。这不难理解,产生这种现象的原因是存在一些不能正确分类的样本点(数据集并非线性可分),在每次迭代时会引发系数的剧烈改变。于是,我们再一次改进,使步长alpha随着迭代次数的增多变得越来越小,这样有利于回归系数值收敛,使收敛速度加快。

关于Logisitic Regression就先简单讲到这里啦,等后面其他的模型与之有联系的话,会再补充。如有错误和不正之处,恳请指正!