【学习笔记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进行判断是否合适。
相关文章推荐
- C语言中正切的相关函数总结
- demo2 JAVA变量
- 手持移动端特殊链接:打电话,发短信,发邮件
- 【Memphis】非旋转Treap及可持久化[Merge,Split]
- 3D动画
- oldssoj2676B(环)
- Download pdf file from JAX-RS
- C++ Jsoncpp源代码编译与解析Json
- 安卓笔记
- iOS:NSBundle的具体介绍
- 如何使用Xmanager及VNC登录远程桌面
- 字符串组合问题(无重复)
- Ruby第三天作业
- php调用短信接口,php发送短信接口
- Google Earth For Javascript 谷歌地球删除所有标记
- kafka学习(三)--java开发(基于kafka0.8版本)
- 提供语义分析和分词服务
- IOS-笔记16(Animation)
- configure: error: cannot run /bin/sh ./config.sub解决办法
- 迭代模式