(转)逻辑回归与梯度降低法

1、逻辑回归

1) Classification(分类)html

分类问题举例:git

  1. 邮件:垃圾邮件/非垃圾邮件?
  2. 在线交易:是否欺诈(是/否)?
  3. 肿瘤:恶性/良性?

以上问题能够称之为二分类问题,能够用以下形式定义:算法

二分类问题-我爱公开课-52opencourse.com

其中0称之为负例,1称之为正例。框架

对于多分类问题,能够以下定义因变量y:函数

 

y{0,1,2,3,...,n}

 

若是分类器用的是回归模型,而且已经训练好了一个模型,能够设置一个阈值:学习

  • 若是hθ(x)0.5,则预测y=1,既y属于正例;
  • 若是hθ(x)<0.5,则预测y=0,既y属于负例;

若是是线性回归模型,对于肿瘤这个二分类问题,图形表示以下:优化

线性回归二分类问题-我爱公开课-52opencourse.com

可是对于二分类问题来讲,线性回归模型的Hypothesis输出值hθ(x)能够大于1也能够小于0。atom

这个时候咱们引出逻辑回归,逻辑回归的Hypothesis输出介于0与1之间,既:spa

 

0hθ(x)1

 

注: 如下引自李航博士《统计学习方法》1.8节关于分类问题的一点描述:rest

分类是监督学习的一个核心问题,在监督学习中,当输出变量Y取有限个离散值时,预测问题便成为分类问题。这时,输入变量X能够是离散的,也能够是连续的。监督学习从数据中学习一个分类模型或分类决策函数,称为分类器(classifier)。分类器对新的输入进行输出的预测(prediction),称为分类(classification).

2) Hypothesis Representation

逻辑回归模型:

上一节谈到,咱们须要将Hypothesis的输出界定在0和1之间,既:

 

0hθ(x)1

 

可是线性回归没法作到,这里咱们引入一个函数g, 令逻辑回归的Hypothesis表示为:

 

hθ(x)=g(θTx)

       

 

这里g称为Sigmoid function或者Logistic function, 具体表达式为:

 

g(z)=11+ez

            

 

Sigmoid 函数在有个很漂亮的“S"形,以下图所示(引自维基百科):

Sigmoid function-我爱公开课-52opencourse.com

综合上述两式,咱们获得逻辑回归模型的数学表达式:

 

hθ(x)=11+eθTx

     

 

其中θ是参数。


Hypothesis输出的直观解释:

hθ(x) = 对于给定的输入x,y=1时估计的几率

例如,对于肿瘤(恶性/良性),若是输入变量(特征)是肿瘤的大小:

肿瘤分类例子-我爱公开课-52opencourse.com

这里Hypothesis表示的是”病人的肿瘤有70%的多是恶性的“。

较正式的说法能够以下表示:

给定输入x,参数化的θ(参数空间), y=1时的几率。

数学上能够以下表示:

 

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

 

对于因变量y=0或1这样的二分类问题:

 

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

 

 

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

 

 

3) Decision boundary(决策边界)

如上节所述,逻辑回归模型能够以下表示:

逻辑回归模型表达式-我爱公开课-52opencourse.com

假设给定的阈值是0.5,当hθ(x)0.5时, y = 1;

hθ(x)<0.5时,y = 0;

再次回顾sigmoid function的图形,也就是g(z)的图形:

sigomoid function g(x) -我爱公开课-52opencourse.com

g(z)0.5时, z0;

对于hθ(x)=g(θTx)0.5, 则θTx0, 此时意味着预估y=1;

反之,当预测y = 0时,θTx<0;

咱们能够认为θTx = 0是一个决策边界,当它大于0或小于0时,逻辑回归模型分别预测不一样的分类结果。例如,

 

hθ(x)=g(θ0+θ1x1+θ2x2)

 

θ0,θ1,θ2分别取-3, 1, 1,

则当3+x1+x20时, y = 1; 则x1+x2 =3是一个决策边界,图形表示以下:

决策边界-我爱公开课-52opencourse.com

上述只是一个线性的决策边界,当hθ(x)更复杂的时候,咱们能够获得非线性的决策边界,例如:

非线性的决策边界1-我爱公开课-52opencourse.com

这里当x21+x221时,y=1,决策边界是一个圆形,以下图所示:

非线性决策边界2-我爱公开课-52opencourse.com

更复杂的例子,请参考官方PPT,这里就再也不举例了。

 

4) Cost function(代价函数,成本函数)

逻辑回归概览:

逻辑回归是一种有监督的学习方法,所以有训练集:

训练集-我爱公开课-52opencourse.com

对于这m个训练样原本说,每一个样本都包含n+1个特征:

训练样本-我爱公开课-52opencourse.com

其中xRn+1x0=1,y{0,1}.

Hypothesis可表示为:

hθ(x)=11+eθTx  

与线性回归类似,咱们的问题是如何选择合适的参数θ?

 

Cost Function:

线性回归的Cost  Function定义为:

 

J(θ)=1mi=1m12(hθ(x(i))y(i))2

 

这里能够把12(hθ(x(i))y(i))2简写为Cost(hθ(x(i),y),更简化的表达式为:

 

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

 

若是和线性回归类似,这里取 hθ(x)=11+eθTx,会存在一个问题,也就是逻辑回归的Cost Function是“非凸”的,以下图所示:

非凸函数-我爱公开课-52opencourse.com

咱们知道,线性回归的Cost Function是凸函数,具备碗状的形状,而凸函数具备良好的性质:对于凸函数来讲局部最小值点即为全局最小值点,所以只要能求得这类函数的一个最小值点,该点必定为全局最小值点。

凸函数-我爱公开课-52opencouse.com

所以,上述的Cost Function对于逻辑回归是不可行的,咱们须要其余形式的Cost Function来保证逻辑回归的成本函数是凸函数。

这里补充一段李航博士《统计学习方法》里关于Cost Function或者损失函数(loss function)的说明,你们就能够理解Cost Function不限于一种方式,而是有多种方式可选,如下摘自书中的1.3.2小节:

监督学习问题是在假设空间F中选取模型f做为决策函数,对于给定的输入X,由f(X)给出相应的输出Y,这个输出的预测值f(X)与真实值Y可能一致也可能不一致,用一个损失函数(loss function)或代价函数(cost function)来度量预测错误的程度。损失函数是f(X)和Y的非负实值函数,记做L(Y, f(X)).

统计学习中经常使用的损失函数有如下几种:

(1) 0-1损失函数(0-1 loss function):

 

L(Y,f(X))={1,0,Yf(X)Y=f(X)

 

(2) 平方损失函数(quadratic loss function)

 

L(Y,f(X))=(Yf(X))2

 

(3) 绝对损失函数(absolute loss function)

 

L(Y,f(X))=|Yf(X)|

 

(4) 对数损失函数(logarithmic loss function) 或对数似然损失函数(log-likelihood loss function)

 

L(Y,P(Y|X))=logP(Y|X)

 

损失函数越小,模型就越好。

逻辑回归的Cost Function:

基于上节的描述和补充,这里咱们选择对数似然损失函数做为逻辑回归的Cost Function:

逻辑回归之对数似然损失函数-我爱公开课-52opencourse.com

直观的来解释这个Cost Function,首先看当y=1的状况:

对数似然损失函数解释1-我爱公开课-52opencouse.com

直观来看, 若是y = 1, hθ(x)=1,则Cost = 0,也就是预测的值和真实的值彻底相等的时候Cost =0;

可是,当hθ(x)0时, Cost

直观来看,因为预测的结果南辕北辙:

若是hθ(x)=0, 也就是预测P(y=1|x;θ)=0,也就是y=1的几率是0,可是实际上y = 1

所以对于这个学习算法给予一个很大的Cost的惩罚。

同理对于y=0的状况也适用:

对数似然损失函数解释2-我爱公开课-52opencourse.com

 

5) Simplified cost function and gradient descent(简化版代价函数及梯度降低算法)

逻辑回归的Cost Function能够表示为:

逻辑回归代价函数-我爱公开课-52opencourse.com

因为y 只能等于0或1,因此能够将逻辑回归中的Cost function的两个公式合并,具体推导以下:

逻辑回归代价函数推导-我爱公开课-52opencourse.com

故逻辑回归的Cost function可简化为:

逻辑回归代价函数简化公式-我爱公开课-52opencourse.com

对于这个公式,这里稍微补充一点,注意中括号中的公式正是对逻辑回归进行最大似然估计中的最大似然函数,对于最大似然函数求最大值,从而获得参数(\theta\)的估计值。反过来,这里为了求一个合适的参数,须要最小化Cost function,也就是:

 

minθJ(θ)

 

而对于新的变量x来讲,就是根据hθ(x)的公式输出结果:

逻辑回归预估-我爱公开课-52opencourse.com

与线性回归类似,这里咱们采用梯度降低算法来学习参数θ,对于J(θ):

逻辑回归梯度降低算法之Cost function-我爱公开课-52opencouse.com

目标是最小化J(θ),则梯度降低算法的以下:

逻辑回归梯度降低算法-我爱公开课-52opencourse.com

J(θ)求导后,梯度降低算法以下:

梯度降低算法-我爱公开课-52opencourse.com

注意,这个算法和线性回归里的梯度降低算法几乎是一致的,除了hθ(x)的表示不一样。

 

6) Advanced optimization(其余优化算法)

优化算法:

给定参数θ,咱们能够写成代码来计算:

逻辑回归优化算法-我爱公开课-52opencourse.com

优化算法除了梯度降低算法外,还包括:

  • Conjugate gradient method(共轭梯度法)
  • Quasi-Newton method(拟牛顿法)
  • BFGS method
  • L-BFGS(Limited-memory BFGS)

后两者由拟牛顿法引伸出来,与梯度降低算法相比,这些算法的优势是:

第一,不须要手动的选择步长;

第二,一般比梯度降低算法快;

可是缺点是更复杂-更复杂也是缺点吗?其实也算不上,关于这些优化算法,推荐有兴趣的同窗看看52nlp上这个系列的文章:无约束最优化,做者是个人师兄,更深刻的了解能够参考这篇文章中推荐的两本书:

用于解无约束优化算法的Quasi-Newton Method中的LBFGS算法到这里总算初步介绍完了,不过这里笔者要认可的是这篇文档省略了许多内容,包括算法收敛性的证实以及收敛速度证实等许多内容。所以读者若但愿对这一块有一个更深刻的认识能够参考如下两本书:
1) Numerical Methods for Unconstrained Optimization and Nonlinear Equations(J.E. Dennis Jr. Robert B. Schnabel)
2) Numerical Optimization(Jorge Nocedal Stephen J. Wright)

7) Multi-class classification: One-vs-all(多类分类问题)

多类分类问题举例:

电子邮件分类/标注: 工做邮件,朋友邮件,家庭邮件,爱好邮件

医疗图表(medical diagrams): 没有生病,着凉,流感

天气:晴天,多云,雨,雪

二类分类问题以下图所示:

二类分类问题-我爱公开课-52opencourse.com

多类分类问题以下所示:

多类分类问题-我爱公开课-52opencourse.com

One-vs-all(one-vs-rest):

对于多类分类问题,能够将其看作成二类分类问题:保留其中的一类,剩下的做为另外一类。例如,对于下面这个例子:

多分类问题-one-vs-all-我爱公开课-52opencourse.com

能够分别计算其中一类相对于其余类的几率:

one-vs-rest-多分类问题-我爱公开课-52opencourse.com

总结-One-vs-all方法框架:

对于每个类 i 训练一个逻辑回归模型的分类器h(i)θ(x),而且预测 y = i时的几率;

对于一个新的输入变量x, 分别对每个类进行预测,取几率最大的那个类做为分类结果:

多分类问题预测-我爱公开课-52opencourse.com

2、梯度降低法


如今,咱们有了优化目标,即最小化负对数似然函数L(w)。从上一节咱们知道不能直接使用其导数为0来求解最优值,咱们如今来介绍一种很是经常使用的求近似最优解的方法:梯度降低法。

梯度降低法的思路其实很简单,假设咱们有一个以下图所示的凸函数:

咱们首先在函数上任选一点,计算其损失(即咱们上面的L(w)) ,而后按照某一规则寻找更低的一点计算新的损失,只要新损失更小(最小化问题),咱们就继续降低,直到达到一个可接受的优化目标。

咱们的L(w)本质上与上图的求解方式相似,降低方向就是梯度方向ΔL(w)的反方向,即当函数处在上升阶段时,咱们往左边降低,函数降低阶段咱们往右边降低(参看上图)。

梯度降低方法分为两个部分,第一部分是总体上,咱们使用某步长不断降低求损失函数,第二部分是为了防止步长太长致使最后没法收敛,每次当损失上升的时候都调整步长。

如下是梯度降低求解L(w)最优值的过程:

1)首先创建坐标系,横轴是咱们的目标参数w,纵轴是当前参数状况下的损失L(w):

创建坐标系后,首先随机取一个参数W1,同时得到初始损失L1

2)根据梯度公式,得到初始的梯度D1,同时根据梯度方向得到初始的降低方向Direction1(即往正方像降低):

3)如今,咱们有了梯度降低的方向、有了初始损失,下一步只须要按照某步长C来往右边调整W便可,而后对比两个损失,当他们的差比较小的时候,说明趋于最优值了。

可是这里步长很差取,加入正好把W降低到对面,那损失的差虽然很小,显然没有趋于最优,再或者步长取的过长,损失反而上升了,也不行,因此咱们第三步的主要目的是调整一个稳定的步长,根据该步长得到新的W

因此第三步做为单独的一个目的,要分四小步来作:

3-1)设置一个初始的步长C1,根据该步长按照梯度对参数W1进行降低获得W2=W1+D1Direction1

图中W2即为新的参数,根据这个新的参数能够得到新的损失L2,咱们能够看到损失降低的值为b=L1L2

为了保证每次降低的质量,咱们须要对b进行一些限制。

3-2)假如咱们按照当前梯度和步长彻底降低,即不考虑约束条件,最大可能降低的值为S=<D1,W2W1>=<D1,a>,以下图中的S所示:

咱们固然不可能要求损失降低的长度为S,这里只须要L1L2大于某个指定的关于S的比例便可,咱们这里设置该比例为“容忍度” B(B为0到1之间的值)。即要知足的条件是:

 

L2L1>=B|<D1,W2W1>|

 

3-3)若是不能知足 3-2 中的条件,说明咱们的步长有问题,一般是步长太长了,咱们须要调整该步长。咱们设定一个“折半因子” A(A为0到1之间的值),把当前的步长C1 进行“折半”,即 C2=AC1,按照新的步长进行第 3-1 步。

3-4)若是知足 3-2 中的条件,咱们直接返回新的W2,即当前的降低成功,进入第 4步 。

4)从第 3 步咱们获得了新的W以后,按照新的参数计算新的损失 L,对比新的损失与旧损失之间的差值,若是差值较小达到某阈值,说明拟合成功,不然继续进行第 2 步。

以上内容就是基本的梯度降低法的使用了,对于基本梯度降低的改进有不少,其余的博主也不是很熟,就暂时不讨论了,咱们一般实践中用的时候,都是用一些开源的大师写好的算法,通常不多须要深度改进,好比使用libsvm能够直接求解逻辑回归。

 

以上转自:http://sobuhu.com/ml/2013/01/07/gradient-decent-logit-regression.html

http://52opencourse.com/125/coursera%E5%85%AC%E5%BC%80%E8%AF%BE%E7%AC%94%E8%AE%B0-%E6%96%AF%E5%9D%A6%E7%A6%8F%E5%A4%A7%E5%AD%A6%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%AC%AC%E5%85%AD%E8%AF%BE-%E9%80%BB%E8%BE%91%E5%9B%9E%E5%BD%92-logistic-regression

相关文章
相关标签/搜索