MachineLearning(Hsuan-Tien Lin)第十讲

逻辑回归

逻辑回归问题

这一讲主要说逻辑回归。可对比Andrew的week3

给了病人资料:

 

要判断一个病人是否有心脏病,用:

 

P(+1|x)就是目标分布,有noise时我们求的不是f而是分布p。“P(+1|x)-1/2”是说给了病人的资料x,y=1的概率p是否大于1/2。

P(+1|x)-1/2≥0,sign取正,有心脏病;

P(+1|x)-1/2≤0,sign取负,没有心脏病。

现在,我们不判断是否有心脏病,而是问有心脏病的概率是多少。

 

这和线性回归的最大区别在于,线性回归求的结果是实数,比如温度(预测是30度,35度……),房屋价格(预测100万,150万……)。逻辑回归预测的是一个概率,[0,1]。

逻辑回归中的理想资料应该长这个样子:

 

第一行说病人x1,有心脏病的概率是0.9;第二行给了病人x2的资料,有心脏病的概率是0.2……只要根据这个找一个h就好了。但是实际上给的并不是这样的,而是:

 我们只知道病人x1有心脏病;x2没有……而且这个资料有noise。比如病人xn,预测其有心脏病概率是0.6,但是抽样结果是没有心脏病。

现在要对这样的资料进行学习,我们怎么求模型呢?

根据之前的经验,我们也把病人的资料拿来,看看特征,给特征一些权重,进行评分。

 

这个分数算完,其实是线性回归做的,输出一个实数,我们感兴趣的是有心脏病的概率。二者有何联系?我们发现,这个分数越高,有心脏病的概率越大;分数越小有心脏病概率越小。所以要把分数转化成概率。和Andrewweek3说的一样,用sigmoid函数

θ(s)表示sigmoid函数。

横轴就是上面加权的分数,纵轴就是概率。比如算了一个分数是2000分,对应一下纵轴是0.8。 

逻辑回归成本函数

对比一下线性分类、线性回归、逻辑回归


相同的地方是三者都有算一个

区别在于,线性分类要对s取个正负号;线性回归直接输出s的值,逻辑回归要放到sigmoid函数中求出概率。形象化的图是:

 

所以,要补上逻辑回归的成本函数。

模型预测目标是:求给病人资料预测有心脏病的概率

反过来写:

就是给病人资料x,预测有心脏病的概率是f(x),预测没有的概率就是(1-f(x))

现在就给一堆病人的资料:

 

现在拿一个第一个病人的资料(x1,o),在noise那讲(第八讲)说过了,x的产生也有分布(有可能病人资料输错了),所以P(x1)指x1是对的资料的概率。给了对的资料,预测结果也对的概率是P(o|x1)(预测是o,和(x1,o)中o是一样的)

所以P(x1)P(o|x1)就是对第一个病人的预测是对的概率。根据:

 

我们把P(y|x1)的部分都换成f(x)。对第一个病人预测是正确的概率就是P(x1)f(x1)

然而f(x)我们不知道,但是我们会抽样,求样本中的h(x),所以就找了个最接近f(x)的h(x)来代替。则对第一个病人预测是正确的概率就是P(x1)h(x1)。

为什么f做预测也有“预测正确的概率”这种说法呢?原因就是有noise存在。h是我们估计的,目的就是希望预测的结果能和f一样。

我们再看一个,第二个病人是(x2,-1)就是说该病人没有心脏病。x2是对的资料的概率P(x2),即没有输入错误之类的;对的资料,预测也对的概率P(-1|x2)。对第二个病人预测正确的概率是P(x2)P(-1|x2),根据上面的替换,没有心脏病是(1-f(x2))。所以对第二个病人预测正确的概率是P(x2)(1-f(x2)),找了最接近的h(x)替换就是P(x2)(1-h(x2))。

这样每一个病人预测都能求出预测的准确性。我们把它们都乘起来。就能看看h预测的总体准确度。

这个叫做似然函数。因为我们找的是接近f的h做的估计。比较的就是h和f的相似度。

灰色的部分是x的分布,它们是一样的,因为样本都服从总体的分布。

在逻辑回归中:

所以,上面的似然函数可以写成:

整理为:

 

注意这里y不是输出,而是给的资料,即病人是否有癌症。

用sigmoid代替h

取对数把连乘变成连加,再把max变成-min

 

这个和andrew的成本函数一样:

我们的目标就是求min(w)最小值。其中一笔资料犯错是:

平均的错误Minimizing Ein(w)

逻辑回归梯度下降

要求Ein(w)最小的地方,这个函数也是个碗状的:

可以看出碗底值最小的。用梯度下降,Ein(w)最小的地方梯度为0。

所以我们的目标就是:求梯度为0的地方。

前面提到过梯度就是函数斜率,就是在某点的切线,就是求导。所以对Ein(w)求导,得到梯度公式: 

我们观察梯度的式子,好像的权重,这个类似评分的方式,只是我们要求的梯度为0,而前面给特征评分是真的求分数。

如果梯度要为0,有两个法子:

(1)都是0,这个函数是sigmoid,如果要都为0,那就是在所有<< 0,即>> 0的地方。那就要求yn和 同号。同号说明什么?就是我们的h不能把点分错,+1(o)的点都在一边,-1(x)的都在另一边。这样前提,就要求数据一定要线性可分的。可是,通常我们没有办法判断数据是否线性可分。

(2)第二个办法就是:老老实实求和为0的状况(o(╯□╰)o)。

用PLA的思路:

 

当前是wt,如果它是对的,sign(wt x)和yn就是一样的,“括号乘以ynxn”就是0。如果wt不对,用wt+ynxn修正。

iterative optimization approach:

 

在前面偷偷乘了个1,称为η。后面的一大串叫做v。

修正的式子可以写成:

求Ein最小可以用比较贪心的方式:

 

就好像我们在山坡上,要走到谷底。在wt处看到比较抖的位置,就走一大步,直到Ein最小。可是,这其实很难。因为比较抖的位置在哪儿,我们不知道。

梯度下降迭代优化

回顾PLA,可以知道v是修正的方向。而η其实就是修正多少。

如果看一条弯曲的线只看其中一小段,很小很短的一小段。这一小段和直线其实是差不多的,所以,曲线可以看成是一小段一小段的直线连起来的。(η很小很小时)

这是泰勒展开式:从现在的位置出发加上斜率方向上的一小段。这样就把曲线的问题变成直线的了。

所以,贪心的方法找到了替代:

我们没办法找到最抖的位置走一大步,但是我们在wt的位置,看看四周,选一小段的位置走,慢慢的逼近最低点(谷底)。

上面的式子中,Ein是当前的位置,η是常数,这些都暂时不关心。比较重要的是选哪个一小段使我们逼近最小值。是方向和梯度的内积。

根据梯度的定义,知道梯度负方向是下降最快的地方。所以内积是负梯度方向。

所以,除以是因为方向是单位向量。

修正的方向就知道了:

 

还有个η,是步长,也需要确定。


 
所以,η与山坡的坡度是正相关的关系。


就把“红色的η除以”变成“紫色的η”

所以,梯度下降就变为:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值