转:NG学习笔记3



逻辑回归(Logistic Regression)

逻辑回归虽然带有“回归”两个字,实际上却是分类问题,此时要预测的值y是离散的。例如判断一封邮件是否是垃圾邮件,判断肿瘤是恶性还是良性。

先从二元逻辑回归问题开始,也就是y的值只有0和1两种取法。

假说模型

假设我们采用之前线性回归的模型

h(x)=θ T x h(x)=θTx

scrn20160330184641

<img class="alignnone size-full wp-image-2443" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330184641.png" alt="scrn20160330184641" width="506" height="268" /></a></p>

线性拟合后,我们用h(x)大于0.5预测1,小于0.5预测0 。看上去此时它工作良好。但是,如果新加一个数据点

scrn20160330184827

<img class="alignnone size-large wp-image-2444" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330184827-1024x334.png" alt="scrn20160330184827" width="1024" height="334" /></a></p>

这会导致预测错误。可以看出线性回归的模型不再适合这个分类问题了,因为此时h(x)的值并不是0到1之间,而可能大于1.

因此在逻辑回归中,我们需要引入新的模型

h(x)=g(θ T x) h(x)=g(θTx)

其中的g代表逻辑函数(logistic function),其中最常用的一种叫做S 形函数(Sigmoid function),其定义如下:

g(z)=11+e z   g(z)=11+e−z

当z趋于负无穷时,g(z)趋向0;当z趋于正无穷时,g(z)趋向于1;当z=0时,g(z) = 0.5 。g(z)的图形大致 如下:

scrn20160330190056

<img class="alignnone size-full wp-image-2445" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330190056.png" alt="scrn20160330190056" width="628" height="297" /></a></p>

合起来就可以得到用于逻辑回归的模型

h θ (x)=11+e θ T x   hθ(x)=11+e−θTx

此时h(x)给出的结果是x对应的输出y=1的概率,也就是

h(x)=P(y=1|x;θ) h(x)=P(y=1|x;θ)

当h(x)大于0.5时,我们预测结果为1;当h(x)小于0.5时,预测结果为0。根据上面的图形

θ T x>0 θTx>0时,对应h(x) > 0.5,应该预测结果为1;

θ T x<0 θTx<0时,对应h(x) < 0.5,应该预测结果为0;

决策边界(Decision Boundary)

模型中的分界线,将预测为1的区域和预测为0的趋于分成两部分。

scrn20160330202324

&lt;img class="alignnone size-full wp-image-2458" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330202324.png" alt="scrn20160330202324" width="726" height="321" /&gt;&lt;/a&gt;&lt;/p&gt;

 

代价函数(Cost Function)

在线性回归模型中的代价函数是每个实例误差的平方和

J(θ 0 ,θ 1 ,,θ n )=12m  i=0 m (h(x (i) )y (i) ) 2  J(θ0,θ1,…,θn)=12m∑i=0m(h(x(i))–y(i))2

但是逻辑回归中,h(x)的形式变了。如果沿用上述公式,将导致J()是一个非凸函数,不利于我们找最值。因此,代价函数也需要重新定义:

J(θ)=1m  i=1 m (Cost(h(x (i) ),y (i) )) J(θ)=1m∑i=1m(Cost(h(x(i)),y(i)))

其中

Cost(h(x),y)={log(h(x)),log(1h(x)), if y = 1if y = 0  Cost(h(x),y)={−log(h(x)),if y = 1−log(1−h(x)),if y = 0

h(x)和Cost(h(x), y)之间的关系如下:

scrn20160330192223

&lt;img class="alignnone size-full wp-image-2449" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330192223.png" alt="scrn20160330192223" width="428" height="186" /&gt;&lt;/a&gt;&lt;/p&gt;

 

当y=1时,h(x)越接近1,Cost越小;h(x)越接近0,Cost越大。

当y=0时,h(x)越接近1,Cost越大;h(x)越接近0,Cost越小。

因此,Cost的定义是合理的,估计误差越大,代价就越大。

为了把Cost从两种情形合并为一种,可以写成如下的形式:

Cost(h(x),y)=ylog(h(x))(1y)log(1h(x)) Cost(h(x),y)=−ylog(h(x))–(1−y)log(1−h(x))

代入到代价函数中得到:

J(θ)=1m  i=1 m (y (i) log(h(x (i) ))+(1y (i) )log(1h(x (i) ))) J(θ)=–1m∑i=1m(y(i)log(h(x(i)))+(1−y(i))log(1−h(x(i))))

之后我们便可以使用梯度下降算法来求使代价函数最小的参数值了

θ j :=θ j αθ j  J(θ) θj:=θj–α∂∂θjJ(θ)

求导后得到(待推导)

θ j :=θ j αm  i=1 m ((h(x (i) )y (i) )x (i) j ) θj:=θj–αm∑i=1m((h(x(i))–y(i))xj(i))

这看上去和线性回归中的更新规则相似,但却是不同的。因为其中的h(x)函数不一样。

线性回归中的假设函数

h(x)=θ T x h(x)=θTx

逻辑回归中的假设函数

h(x)=g(θ T x)=11+e θ T x   h(x)=g(θTx)=11+e−θTx

调用matlab中的高级算法

可以调用 共轭梯度(Conjugate Gradient),局部优化法(Broyden fletcher goldfarb shann,BFGS)和有限内存局部优化法(LBFGS)等高级算法。只需要告诉计算机 如何求 J(θ) J(θ)θ j  J(θ) ∂∂θjJ(θ)

这些高级算法的特点:不必手动选择学习率α α ,收敛速度很快; 实现复杂,不过库中已经实现了。

下面是一个例子:

scrn20160330195258

&lt;img class="alignnone size-full wp-image-2455" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330195258.png" alt="scrn20160330195258" width="394" height="239" /&gt;&lt;/a&gt;&lt;/p&gt;

我们要来求使J(θ) J(θ)最小的参数值。需要实现一个函数

调用

多分类问题

多分类问题中的y输出多余2个值,一种可能的情况如下:

scrn20160330200140

&lt;img class="alignnone size-full wp-image-2456" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330200140.png" alt="scrn20160330200140" width="209" height="229" /&gt;&lt;/a&gt;&lt;/p&gt;

使用一对多(One-vs-All)的方法可以解决这个问题。在一对多方法中,每次我们把数据分为y=某个和y=其他。

例如,先分成y=1和其他两部分,得到 h (1) (x) h(1)(x)

类似,y=2时可以得到 h (2) (x) h(2)(x)

scrn20160330203213

&lt;img class="alignnone size-full wp-image-2461" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330203213.png" alt="scrn20160330203213" width="784" height="434" /&gt;&lt;/a&gt;&lt;/p&gt;

最后,我们得到一系列假说

h (i) (x) h(i)(x)

在多分类问题时,我们把每个假说函数运行一遍,求出其中最大的概率。

正则化(Regularization)

过拟合(Overfitting)

scrn20160330202647

&lt;img class="alignnone size-full wp-image-2459" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330202647.png" alt="scrn20160330202647" width="757" height="189" /&gt;&lt;/a&gt;&lt;/p&gt;

第一个用线性来拟合,显然不够准确,这称为欠拟合。

第二个看上去刚刚好。

第三个用过高次数的多项式,虽然完美拟合了训练集中的每个数据,但显然预测新数据时并不可靠。这称为过拟合。

分类问题中也有类似的问题

scrn20160330202941

&lt;img class="alignnone size-full wp-image-2460" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330202941.png" alt="scrn20160330202941" width="791" height="298" /&gt;&lt;/a&gt;&lt;/p&gt;
正则化代价函数

上面回归问题中过拟合的模型是

h(x)=θ 0 +θ 1 x1+θ 2 x 2 2 +θ 3 x 3 3 +θ 4 x 4 4  h(x)=θ0+θ1x1+θ2x22+θ3x33+θ4x44

如果减少 θ 3  θ3 和 θ 4  θ4的值,可以考虑修改代价函数,给它们添加一些惩罚。修改后的代价函数如下:

J(θ)=12m ( i=1 m (h(x (i) )y (i) ) 2 +999θ 2 3 +999θ 2 4 ) J(θ)=12m(∑i=1m(h(x(i))–y(i))2+999θ32+999θ42)

这样会使θ 3  θ3 和 θ 4  θ4的值减小很多。

假设我们有很多特征,不知道要缩小哪一个,可以采用下面的办法

J(θ)=12m ( i=1 m (h(x (i) )y (i) ) 2 +λ j=1 n θ 2 j ) J(θ)=12m(∑i=1m(h(x(i))–y(i))2+λ∑j=1nθj2)

根据惯例,我们不对θ 0  θ0进行惩罚。

其中 λ λ又叫做正则化参数(Regularization Parameter)。如果正则化参数太大,则会把所有参数最小化,导致近似直线,造成欠拟合。

正则化线性回归

代价函数

J(θ)=12m ( i=1 m (h(x (i) )y (i) ) 2 +λ j=1 n θ 2 j ) J(θ)=12m(∑i=1m(h(x(i))–y(i))2+λ∑j=1nθj2)

更新规则

θ 0 :=θ 0 α1m  i=1 m ((h(x (i) )y (i) )x (i) 0 ) θ0:=θ0–α1m∑i=1m((h(x(i))–y(i))x0(i))

θ j :=θ j α(1m  i=1 m (h(x (i) )y (i) )x (i) 0 +λm θ j ),for j = 1, 2, … , n θj:=θj–α(1m∑i=1m(h(x(i))–y(i))x0(i)+λmθj),for j = 1, 2, … , n

把上式变形一下

θ j :=θ j (1αλm )α1m  i=1 m ((h(x (i) )y (i) )x (i) j ) θj:=θj(1–αλm)–α1m∑i=1m((h(x(i))–y(i))xj(i))

对比不正则化的线性回归,正则化线性回归的梯度下降中,每θ θ的因数从1变为1αλm  1–αλm,因此θ θ要额外缩小了一点。

使用正规方程也可以求解正则化线性回归问题,公式是

scrn20160330210145

&lt;img class="alignnone size-full wp-image-2463" src="http://7d9rd6.com1.z0.glb.clouddn.com/wp-content/uploads/2016/03/scrn20160330210145.png" alt="scrn20160330210145" width="524" height="130" /&gt;&lt;/a&gt;&lt;/p&gt;
正则化逻辑回归

代价函数

J(θ)=[1m  i=1 m (y (i) log(h(x (i) ))+(1y (i) )log(1h(x (i) )))]+λ2m  j=1 n θ 2 j  J(θ)=–[1m∑i=1m(y(i)log(h(x(i)))+(1−y(i))log(1−h(x(i))))]+λ2m∑j=1nθj2

通过求导得出的梯度下降算法更新规则

θ 0 :=θ 0 α1m  i=1 m ((h(x (i) )y (i) )x (i) 0 ) θ0:=θ0–α1m∑i=1m((h(x(i))–y(i))x0(i))

θ j :=θ j α(1m  i=1 m (h(x (i) )y (i) )x (i) j +λm θ j ),for j = 1, 2, … , n θj:=θj–α(1m∑i=1m(h(x(i))–y(i))xj(i)+λmθj),for j = 1, 2, … , n

这看上去和线性回归一样,但是h(x)是不同的。

仍然可以使用fminuc等函数来求解,只需修改参数的更新规则。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值