您的位置:首页 > 其它

【学习笔记2】Logistic Regression

2015-08-27 11:46 351 查看

Logistic Regression

Logistic Regression即逻辑回归,又称作Logistic回归分析,是要预测的变量为有限个离散量(比如2个值)的回归分析问题,可以理解为对样本进行分类的学习方法。

与Linear Regression相似,我们也通过定义Cost Function,依据Gradient Decent的方法来进行Logistic Regression。如果套用Linear Regression的方法,使用J(θ)=12m∑i=1m(hθ(X(i))−y(i))2 来计算Cost Function,会存在一个问题,即由于y(i) 的取值为离散值,典型值为0和1,而hθ(x(i)) 的取值则有可能延伸到很大,我们希望hθ(x(i)) 的取值也在0到1之间,因此引入sigmoid函数:g(z)=11+e−z 定义hθ(X)=g(θTX)=11+e−θTX 从而保证了hθ(x(i)) 的取值范围,当其值大于等于0.5时,预测为1,;小于0.5时,预测为0。hθ(x(i)) 等于0.5对应θTX=0 所确定的图像,这个图像被称之为Decision Boundary。随后定义新的Cost Function如下:J(θ)=12m∑i=1m−y(i)loghθ(X(i))−(1−y(i))log(1−hθ(X(i))) 对这个函数求导可得:∂∂θjJ(θ)=1m∑i=1m(hθ(X(i))−y(i))xj 然后就可以使用Gradient Decent方法求最优的θ 了。

除了基本的Gradient Decent方法外,吴老师还介绍了使用Octave中的fminunc函数来进行回归分析的方法,具体来讲就是需要实现一个返回Cost Function及其导数的函数,给定初始值θ,然后给定options设定,代码如下:

[cost, grad] = costFunction(initial_theta, X, y);
options = optimset('GradObj', 'on', 'MaxIter', 400);
[theta, cost] = ...
fminunc(@(t)(costFunction(t, X, y)), ...
initial_theta, options);


以后在使用其他语言实现类似方法的时候,可以寻找相应的实现库,并选择性能好的实现库使用。类似的比较好的方法包括Conjugate Gradient、BFGS、L-BFGS方法等,均不需要自己选择Learning Rate,并且计算效率高,不过算法都相对更复杂更难理解一些。

在针对多类样本的Logistic Regression问题时,吴老师介绍了一种one-vs-all的方法,即将需要的一类拿出来,剩下的其他所有样本归为另一类,执行上述的回归分析,得到一个hθ(X)。然后对于需要预测的样本,分别带入各个类对应的hθ(X),取值最大的为预测结果。

Overfitting & Regularization

在Linear Regression和Logistic Regression中,如果训练的特征过多,模型过于复杂,可能导致训练出来的Decision Boundary过分依赖训练集中的每一个样本,这样并不利于在预测的时候得到好的预测结果。这种现象叫做Overfitting。

为了避免这一问题,引入一种Regularization的方法。即对Cost Function做修改:Jreg(θ)=J(θ)+α∑i=1nθ2i,θ=θ0,θ1...θn,α>0 注意新加的一项中不包括常数项θ0,同时给了θ 一个绝对值减小的趋势。然后就使用与Gradient Decent相同的原理进行回归分析即可,也可以使用fminunc函数。这里α 的选择不宜过大,否则会过分压制拟合参数θ 的值,也不宜太小,否则效果不明显。可以在拟合之后绘制出Decision Boundary进行判断是否合适。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: