用SGD 优化 Logistic Regression

标签:
杂谈 |
最近几天,重新看了下Logistic Regression 。想通过 SGD(随机梯度下降)来优化LR里面的参数。这是一个on-line 学习的一个好的方法。里面主要涉及那个代价函数,这个我之前没有系统学习过。走了些弯路,因为学习结果,受这个代价函数影响很大。
方法如下:
预测函数f(x),从这个函数可以看出,预测的值在0-1之间。f(x)正好是样本x归类到正样本的概率。
http://s1/middle/642c9bddgc4d939fc1860&690优化
这里,我就得想想如何求得这个http://s1/middle/642c9bddgc4d9519bb200&690优化
首先,从优化的角度来看,我们应该建立一个代价函数。
代价函数1如下:
http://s7/middle/642c9bddgc4d9d6d669e6&690优化
提下:代价函数的建立,希望是一个凸函数,这样,局部最优解就是全局最优解。
但是,这里有个问题,就是一旦f(x)->1时候,log函数会超过范围。所以,针对,这个问题,希望做如下修正:
http://s13/middle/642c9bddgc4d9db85b8fc&690优化
这样http://s4/middle/642c9bddgc4d9c2405c33&690优化
http://s13/middle/642c9bddgc4d9c36b209c&690优化
其中,r是学习速率。 r是一个很小的值。这里我们可以这样设置学习速率 r=sqrt(t0/(t0+t))
贴上自己写的python代码,
# author :dylan_fan;
# write at 2012/07/07;
import math
import string
import random
class SGD_LR:
#
#
#
#