逻辑回归
2013-06-05 21:11 jzl 阅读(1085) 评论(0) 收藏 举报上一篇中,把线型回归(其他回归类似)的步骤可概括为:
1. 找到假设函数H 2.找到合适的Cost函数J 3 最小化函数J,按照下面的思路: 下一个值 = 当前值 + 步长 * 方向 如何定步长和方向是关键,可能需要不断的尝试 4.写程序,调试 |
对于逻辑回归,步骤是一样的。
1.逻辑回归的用处
逻辑回归主要用于分类,如下图,即把两类点分开。如下图1
图1 示例数据
数据的格式为:
35.8 , 72.9 , 0
60.2 , 86.3 , 1
…
有两个特征,两个特征(x1 , x2)为(35.8 , 72.9)时,y为0,称为负点(negative)
当(x1,x2)为(60.2 , 86.3)时,y为1,称为正点(positive)
根据训练数据,通过一定的手段,回归出可以区分上图黑点和红点的函数。然后,对于新数据,可以进行分类。
2.逻辑回归的假设函数
观察上图1,可以猜测,线型方程就可以把两类点进行很好的区分,假设线型方程为L = a*X1 + b*X2 +c,假设函数为
h(L) = g(L) = 1/( 1+exp(-L) )
其中:g(z) = 1/( 1+exp(-z) )
下面是其数学形式
g(z)称为逻辑函数或者sigmoid函数。
g(z)的图像如下图:
g(z)函数有一些几点需要注意:
- g(z)的值域在(0,1)
- 当z很小时,g(z)趋向于0;z很大时,g(z)趋向于1
- g(0)=0.5,以0点会分界线,当g(z)>0.5时,z点可以正点(Positive);g(z)<0.5时,z点为负点(negative)
3.Cost函数J
Cost函数可以通过概率相关知识进行推导,具体可以参考<<机器课程学习资料>>的note1.pdf。下载地址
https://skydrive.live.com/?cid=2A97F342653F7440&id=2A97F342653F7440%21107
这里直接给出其形式:
公式1
可以不探究公式是怎么来的,但是可以根据它的形式分析一下。我们的目的是最小化Cost函数。注意,y只能去0或者1,h(x)在(0,1)之间
1. 把y=0带入,得sum( log( 1-h(x) ) ),可以看到此时h(x)越小,Cost函数越小,理想情况下,h(x)能无限接近0
2.把y=1带入,得sum( log h(x) ),此时h(x)越大,Cost函数越小,理想情况下,h(x)能无限接近1。
所以最小化公式1,即是h(x)与y的距离最小。
4.迭代公式
下一个值 = 当前值 + 步长 * 方向
其中方向为对公式1中的 l 求偏导
而对 l 求偏导后,形式异常的简单:
然后逻辑回归的形式,居然和线性回归一样( 当然h(x)不一样 )
5.代码
形式和线性回归一样,那代码就没什么好说的了,只是把h(x)表示换一下就行,这里不就贴代码了,下载看一下就行。
需要注意的是,刚开始时,我把相关参数的初值都设为0,回归结果非常不稳定。
通过观察可以知道直线的方程大概为,l = x1+x2-90,所以把初值设成,a=1,b=1,c=-90。
这里就涉及到初值选取的问题,能不能找到不依赖于初值的算法?
www.coursera.org上的课程中,使用的是Octave中的fmincg函数,没有初值选取的问题,fmincg的代码可以去下面这个网址去看一下,我暂时没看懂,囧。。