林轩田之机器学习课程笔记( how can machines learn之logistic regression)(32之10)
2017-12-26 11:40
411 查看
概要
逻辑回归问题
逻辑回归损失函数
逻辑回归损失函数的梯度
梯度下降求解
欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen
![](https://img-blog.csdn.net/20171226120739314?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3F5X2NoZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
但是在医院中我们还需要知道一个病人未来一段时间比如生病的概率是多少,手术成功的概率是多少?
有的时候不想知道这个结果,而是想知道得到这个结果的概率是多少。
这个时候,我们的f(x)表示为,给定一个X,取+1的概率是多少。取-1,就是1减喽。
f(x)=P(+1|X)∈{+1,−1}
假如资料中的标签已经有各种的概率,那么直接采用线性回归就完事儿了啊,但是实际情况是得不到这样的标签的。
![](https://img-blog.csdn.net/20171226121404598?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3F5X2NoZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这里可以将右边的标签看做是左边有噪音的结果。比如我本来想得到0.7的概率,结果返回到了+1,本来想0.3,结果返回了-1。
![](https://img-blog.csdn.net/20171226121540169?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3F5X2NoZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
那么现在只有0和1的标签,那么怎么来求解概率呢?
首先想到的是将各个特征找到一个权重相乘相加,但是这样得到的是一个实数,我们需要的是一个概率,在0~1之间的值。如何做呢?这个时候采用逻辑函数来将结果映射到0~1之间。
![](https://img-blog.csdn.net/20171226121834526?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3F5X2NoZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
单独看看逻辑函数如下:
![](https://img-blog.csdn.net/20171226121926958?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3F5X2NoZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
逻辑函数:
θ(s)=11+e−s
这么顺便说一下,逻辑函数应用的范围比较广,在深度学习中,逻辑函数可以作为激活函数
![](https://img-blog.csdn.net/20171226122706374?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3F5X2NoZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
那么逻辑回归的损失函数是啥呢?如何来最小化呢?这就引入了似然函数,如下图所示;
![](https://img-blog.csdn.net/20171226142037230?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3F5X2NoZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
所以最后我们的假设为:
g=argmaxh likelihood(h)
又因为:h(x)=1−h(−x)
![](https://img-blog.csdn.net/20171226142542247?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3F5X2NoZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
我们将h通过w来进行替换,因为我们最后想要的是w。
maxw likelihood(w)=∏n=1Nθ(ynwTxn)
我们将上面的式子稍作转换,因为一般在求解的时候,更多的是求最小。上面的式子等价于:
minw1N∑n=1Nlnθ(ynwTxn)=minw1N∑n=1Nln(1+e(−ynwTxn))=minw1N∑n=1Nerr(yn,w,xn)
其中err(yn,w,xn)=ln(1+e(−ynwTxn)),这个我们称为交叉熵损失函数。
关于交叉熵损失函数参考:
http://blog.csdn.net/jasonzzj/article/details/52017438
这里要说明的是逻辑回归的损失函数是一个凸函数,如下图:
![](https://img-blog.csdn.net/20171226151429369?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3F5X2NoZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
∇Ein(w)=1N∑n=1Nθ(−ynwTxn)(ynxn)=1N∑n=1Nynθ(−ynwTxn)xn
要使得梯度为0。一种情况是所以的θ=0当且仅当−ynwTxn>>0这表示我们的资料是线性可分的。所以如果资料线性可分的情况下,那么可以得到梯度为0。
只要不可分,那么不能采用这样的办法,这貌似不是一个闭式解。
又因为我们知道逻辑回归的损失函数是一个凸函数,那么可不可以采用像PLA的方式来求解呢?
![](https://img-blog.csdn.net/20171226151717895?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3F5X2NoZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
wt+1=wt+ηv
那么现在我们需要解决两件事情:
1)v,确定w的更新方向。
2)η,更新步长。
来使得Ein减小。现在先假设步长固定的,确定好方向。
泰勒展开式来拯救我们了,任何的函数,在定义域的一个很小区间内,我们可以展开为其一阶导数的函数,那么上面的Ein展开为:
![](https://img-blog.csdn.net/20171226154030245?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3F5X2NoZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
那么该问题就转换为了:
![](https://img-blog.csdn.net/20171226154256906?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3F5X2NoZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
所以我们要想wt走到下一步wt+1变小的话,那么v应该是一阶梯度的负方向。所以:
v=−∇Ein(wt)||∇Ein(wt)||,这里设定v是单位向量。
所以我们已经确定w更新的方向。那么每一步走多大呢?
如果很小,就会导致运算非常慢,如果很大步呢?那就会导致凸函数可能跑到山谷对面了。
![](https://img-blog.csdn.net/20171226154904502?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3F5X2NoZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
泰勒展开也是限定在比较小的范围内才成立。不能太大,太小运算过慢。所以最好是坡度比较大,走大步一点,坡度小走小点。这个时候坡度大就是表示梯度大,坡度小,梯度就小了。所以:
η∝||∇Ein(wt)||
由上面得式子我们得到:
wt+1=wt−η∇Ein(wt)||∇Ein(wt)||=wt−k∇Ein(wt)
这里k=η||∇Ein(wt)||。这个不就是我们需要求解的η么?
所以最后我们得到:wt+1=wt−η∇Ein(wt)
所以我们只要不断的迭代算算,就一定会得到我们需要的解。
关于逻辑回归的代码可以参考:
http://blog.csdn.net/cqy_chen/article/details/64479457
欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen
逻辑回归问题
逻辑回归损失函数
逻辑回归损失函数的梯度
梯度下降求解
欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen
概要
上节课我们求解了线性回归问题,同时采用线性回归问题的解去求解二分类问题,那么本节主要讲解逻辑回归,顺便说一下,在实际工作中逻辑回归会作为一个base line。比如在百度凤巢的ctr中,会收集大量的特征,然后采用逻辑回归求解,现在已经采用深度学习的方法。所以一般来说在做机器学习的时候,采用简单到复杂的模型。逻辑回归问题
首先回顾机器学习流程,对于分类问题如下:但是在医院中我们还需要知道一个病人未来一段时间比如生病的概率是多少,手术成功的概率是多少?
有的时候不想知道这个结果,而是想知道得到这个结果的概率是多少。
这个时候,我们的f(x)表示为,给定一个X,取+1的概率是多少。取-1,就是1减喽。
f(x)=P(+1|X)∈{+1,−1}
假如资料中的标签已经有各种的概率,那么直接采用线性回归就完事儿了啊,但是实际情况是得不到这样的标签的。
这里可以将右边的标签看做是左边有噪音的结果。比如我本来想得到0.7的概率,结果返回到了+1,本来想0.3,结果返回了-1。
那么现在只有0和1的标签,那么怎么来求解概率呢?
首先想到的是将各个特征找到一个权重相乘相加,但是这样得到的是一个实数,我们需要的是一个概率,在0~1之间的值。如何做呢?这个时候采用逻辑函数来将结果映射到0~1之间。
单独看看逻辑函数如下:
逻辑函数:
θ(s)=11+e−s
这么顺便说一下,逻辑函数应用的范围比较广,在深度学习中,逻辑函数可以作为激活函数
逻辑回归损失函数
我们对比下线性回归,逻辑回归,二分类的损失函数:那么逻辑回归的损失函数是啥呢?如何来最小化呢?这就引入了似然函数,如下图所示;
所以最后我们的假设为:
g=argmaxh likelihood(h)
又因为:h(x)=1−h(−x)
我们将h通过w来进行替换,因为我们最后想要的是w。
maxw likelihood(w)=∏n=1Nθ(ynwTxn)
我们将上面的式子稍作转换,因为一般在求解的时候,更多的是求最小。上面的式子等价于:
minw1N∑n=1Nlnθ(ynwTxn)=minw1N∑n=1Nln(1+e(−ynwTxn))=minw1N∑n=1Nerr(yn,w,xn)
其中err(yn,w,xn)=ln(1+e(−ynwTxn)),这个我们称为交叉熵损失函数。
关于交叉熵损失函数参考:
http://blog.csdn.net/jasonzzj/article/details/52017438
这里要说明的是逻辑回归的损失函数是一个凸函数,如下图:
逻辑回归损失函数的梯度
我们知道现在有了逻辑回归的损失函数,现在需要最小化之,求得w。当目标函数是可微,凸函数那么我们直接求得偏导数为0的地方就好了。求得梯度得到:∇Ein(w)=1N∑n=1Nθ(−ynwTxn)(ynxn)=1N∑n=1Nynθ(−ynwTxn)xn
要使得梯度为0。一种情况是所以的θ=0当且仅当−ynwTxn>>0这表示我们的资料是线性可分的。所以如果资料线性可分的情况下,那么可以得到梯度为0。
只要不可分,那么不能采用这样的办法,这貌似不是一个闭式解。
又因为我们知道逻辑回归的损失函数是一个凸函数,那么可不可以采用像PLA的方式来求解呢?
梯度下降求解
在上节中我们知道,逻辑回归没有闭式解,损失函数是凸函数。那么我们想象采用PLA的方式,一步步的更新我们的w,使得其趋于谷底,达到最好。wt+1=wt+ηv
那么现在我们需要解决两件事情:
1)v,确定w的更新方向。
2)η,更新步长。
来使得Ein减小。现在先假设步长固定的,确定好方向。
泰勒展开式来拯救我们了,任何的函数,在定义域的一个很小区间内,我们可以展开为其一阶导数的函数,那么上面的Ein展开为:
那么该问题就转换为了:
所以我们要想wt走到下一步wt+1变小的话,那么v应该是一阶梯度的负方向。所以:
v=−∇Ein(wt)||∇Ein(wt)||,这里设定v是单位向量。
所以我们已经确定w更新的方向。那么每一步走多大呢?
如果很小,就会导致运算非常慢,如果很大步呢?那就会导致凸函数可能跑到山谷对面了。
泰勒展开也是限定在比较小的范围内才成立。不能太大,太小运算过慢。所以最好是坡度比较大,走大步一点,坡度小走小点。这个时候坡度大就是表示梯度大,坡度小,梯度就小了。所以:
η∝||∇Ein(wt)||
由上面得式子我们得到:
wt+1=wt−η∇Ein(wt)||∇Ein(wt)||=wt−k∇Ein(wt)
这里k=η||∇Ein(wt)||。这个不就是我们需要求解的η么?
所以最后我们得到:wt+1=wt−η∇Ein(wt)
所以我们只要不断的迭代算算,就一定会得到我们需要的解。
关于逻辑回归的代码可以参考:
http://blog.csdn.net/cqy_chen/article/details/64479457
欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen
相关文章推荐
- 林轩田之机器学习课程笔记( how can machines learn better之hazard of overfitting)(32之13)
- 林轩田之机器学习课程笔记( how can machines learn better之validation)(32之15)
- 林轩田之机器学习课程笔记( how can machines learn之linear regression)(32之9)
- 林轩田之机器学习课程笔记( how can machines learn better之three learning principles)(32之16)
- 林轩田之机器学习课程笔记( how can machines learn之nonlinear transformation)(32之12)
- 林轩田之机器学习课程笔记( how can machines learn better之regularization)(32之14)
- 林轩田之机器学习课程笔记(when can machines learn之feasibility of learning)(32之4)
- 林轩田之机器学习课程笔记(why can machines learn之training versus testing)(32之5)
- 林轩田之机器学习课程笔记(why can machines learn之theory of generalization)(32之6)
- 林轩田之机器学习课程笔记(when can machines learn之learning problem)(32之1)
- 林轩田之机器学习课程笔记(when can machines learn之types of learning)(32之3)
- 林轩田之机器学习课程笔记(why can machines learn之noise and error)(32之8)
- 林轩田之机器学习课程笔记( combining predictive features之 random forest)(32之26)
- 林轩田之机器学习课程笔记( distilling hidden features之deep learning)(32之29)
- 林轩田之机器学习课程笔记( embedding numerous feature之kernel support vector machine)(32之19)
- 林轩田之机器学习课程笔记( combining predictive features之gradient boosted decision tree)(32之27)
- 林轩田之机器学习课程笔记( embedding numerous feature之 kernel logistic regression)(32之21)
- 林轩田之机器学习课程笔记( embedding numerous feature之dual support vector machine)(32之18)
- 林轩田之机器学习课程笔记( combining predictive features之 decision tree)(32之25)
- 林轩田之机器学习课程笔记( distilling hidden features之neural network)(32之28)