码迷,mamicode.com
首页 > 其他好文 > 详细

Logistic回归

时间:2015-02-17 23:34:21      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

Part I 起源:线性回归

 

  线性回归很常见,给你一堆点,作出一条直线,尽可能去拟合这些点。对于多维的数据,设特征为xi,设函数h(θ)=θ+θ1x1+θ2x2+.....为拟合的线性函数,其实就是内积,实际上就是y=Wx+b

那么如何确定这些θ参数(parament)才能保证拟合比较好呢?

 

①确定目标函数

 

我们易有这样的二次目标函数:J=min Σ  1/2h(θ)-yi^2 i:1~m,即所有数据条数。

该目标函数的意义在于:误差最小化。

h(θ中的h即是hypothesis(假设的意思),h函数是我们的算出结果,yi是我们的实际结果,平方的作用有两个,一是是代替ABS,二方便求导。

 

②梯度下降算法

计算机是很笨的。如果想要确定某个值,那么有一种很笨的方法:迭代法。

设定一个边界初值(最大or最小),然后一小步一小步的去变化这个值并验证,知道最后逼近最优值,停止迭代。

由于目标函数是最小化,我们有这个算法。

 技术分享

首先把各个θ设为比较大的值,然后不停迭代,让其减小。

减小的量由alpha(步长,0.01即可)*目标函数J的偏导数构成。

偏导数意义上就是梯度(高数内容),也就是函数下降的快慢。

调整各个θ的同时,目标函数J的计算值也在减小。

同时梯度的下降速度由疾变缓,在最后的迭代过程中,梯度将会趋于0,从而能够保证较为精确的逼近目标值。这样,既保证了目标函数的最小化,又求出的参数θ。

 

③偏导数的处理

假设只有一条数据。目标函数J的偏导数你可以化简一下。链式法则求导。

 技术分享

 最后的求导结果是一个非常神奇的式子:(h(θ)-y)*xi

如果是多条数据呢?推导的结果是这个玩意。

 技术分享

由此诞生了两种梯度算法。

一、批梯度算法。

正如上面的式子,每次迭代确定每个维度的偏导结果时,扫一下全部数据的全部维度。

需要3for。下场是:慢。

二、随机梯度算法。

它的改良就是,算当前维度的偏导结果时,不要遍历数据集全部维度了,只算当前维度的。

for(..维度)

  for(数据条数)

      Θi=Θi-alpha*(h(Θ)-yj)*x[i]

PS. 关于常量b的求法=Σ alpha*(h(Θ)-yj)

这种算法偷工减了一层for,下场就是,最后的近似值没有批梯度精确,不过够用了。

 

⑤迭代问题

如何确定迭代的次数?我们大可以设个500,让它算!但这不智能!

迭代停止条件目前分为两个。设精度是0.001

一、近似达到目标函数的极值,即变化小于0.001

二、各个参数Θi的变化小于0.001

一般达到这两个条件,就算是迭代比较完美了,再算其实意义不大。

 

Logistic回归

标签:

原文地址:http://www.cnblogs.com/neopenx/p/4295543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!