逻辑回归
逻辑回归问题
这一讲主要说逻辑回归。可对比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,但是抽样结果是没有心脏病。
现在要对这样的资料进行学习,我们怎么求模型呢?
根据之前的经验,我们也把病人的资料拿来,看看特征,给特征一些权重,进行评分。
这个分数算完,其实是线性回归做的,输出一个实数,我们感兴趣的是有心脏病的概率。二者有何联系?我们发现,这个分数越高,有心脏病的概率越大;分数越小有心脏病概率越小。所以要把分数转化成概率。和Andrew的week3说的一样,用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是当前的位置,η是常数,这些都暂时不关心。比较重要的是选哪个一小段使我们逼近最小值。是方向和梯度的内积。
根据梯度的定义,知道梯度负方向是下降最快的地方。所以内积是负梯度方向。
所以,除以是因为方向是单位向量。
修正的方向就知道了:
还有个η,是步长,也需要确定。
所以,η与山坡的坡度是正相关的关系。
就把“红色的η除以”变成“紫色的η”
所以,梯度下降就变为: