【学习笔记2】Logistic Regression

Logistic Regression

Logistic Regression即逻辑回归,又称作Logistic回归分析,是要预测的变量为有限个离散量(比如2个值)的回归分析问题,可以理解为对样本进行分类的学习方法。
与Linear Regression相似,我们也通过定义Cost Function,依据Gradient Decent的方法来进行Logistic Regression。如果套用Linear Regression的方法,使用

J(θ)=12mi=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+ez
定义
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(θ)=12mi=1my(i)loghθ(X(i))(1y(i))log(1hθ(X(i)))
对这个函数求导可得:
θjJ(θ)=1mi=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进行判断是否合适。

你可能感兴趣的:(机器学习)