【九】机器学习之路——logistic回归

来源:互联网 发布:windows注册表详解 编辑:程序博客网 时间:2024/06/14 02:39

  前面的博客咱们介绍了监督学习里回归的一种——线性回归,今天咱们讲一下另外一种很重要的回归——逻辑回归(Logistic Regression)。

逻辑回归(Logistic Regression)

  之前咱们说的线性回归,举的例子是房价的预测的例子,手头有房子大小和对应房价的数据,然后通过模型拟合数据,最后输出预测的房价,100万,110万等。线性回归输出的值都是连续的,现实中还有一种情况,我们手头有一组患有肿瘤病人的数据,包括肿瘤的大小(cm)和对应的这个肿瘤是恶性的还是良性的(0,1)。我们的任务就是想通过学习这份数据,然后根据肿瘤的大小来预测这个肿瘤是恶性的还是良性的。和线性回归的不同,Logistic回归的最终预测的结果只有两种,要么良性(0),要么恶性(1)。怎么样才能将数据映射到0和1上呢?

  大家有没有想过通过函数映射的方法,把数据拟合的结果映射到0或1上?如果能想到这一步,那基本上已经一只脚跨进logistic回归的大门了,logistic回归就是通过函数的映射,将拟合结果映射到0和1上,那么问题来了,怎么映射?通过什么函数映射???

  因为咱们要把拟合结果映射到0,1上来,那咱们的映射函数的取值应该只有0和1两种,首先大家想到的是不是阶跃函数?

y={10 if x>0 if x=0


因为阶跃函数最简单,输出的值只有0和1,然而,阶跃函数在跳跃点上从0瞬间跳跃到1,这个瞬间跳跃的过程有时会比较难处理。

  这个时候咱们先介绍一个函数给大家认识,这个函数名字为sigmond函数,和阶跃函数类似,但是函数模型较平滑,话不多说,先来看看这个函数表达式:

σ(z)=11+ez,z(,+)

函数图像如下所示:



从sigmond的函数图可以看出,sigmond函数和阶跃函数很相似。因此为了实现Logistic回归,我们可以在已有数据的每个特征值上都乘以一个回归系数,然后把所有的值相加,将这个总和代入sigmond函数,进而得到一个范围在0~1之间的数值。任何大于0.5的数据被映射为1,小于0.5的数据被映射为0。(参考《机器学习实战》)

  刚说的一段话用公式表达会更加清晰,Sigmond的输入值为“z”,通过学习线性回归咱们知道可以通过下式来做线性拟合,这里ω0和前面线性回归里的θ0含义相同,均代表线性拟合里的回归系数,

z=ω0x0+ω1x1+ω2x2+...+ωnxn


如果采用向量的描述方法,上式可以写成z=ωTx,其中ω为一个1*n维的向量ω=[ω0,ω1,ω1,...,ωn]。其中x就是我们要输入的数据,向量x是我们要找到的最佳拟合系数。然后得到我们构造的预测函数如下所示:

hω(x)=σ(z)=σ(ωTx)=11+eωTx


  如何去求得满足最小误差的系数呢???这里我们可以用最小二乘法来求解,因为输出的结果只有0和1,我们可以把输出结果看做为概率,hω(x)为输出结果是1的概率,因为结果只有0和1,所以1hω(x)为输出结果为0的概率,即:

P(y=1|x;ω)=hω(x)P(y=0|x;ω)=1hω(x)


总体的表达式为:P(y|x;ω)=(hω(x))y(1hω(x))1y

总共m组数据,因此,似然函数为:

L(ω)=mi=1(hω(xi))yi(1hω(xi))1yi


我们要求得似然函数的最大值,两边取log后,得到一个较为处理简单的函数,


l(ω)=logL(ω)=mi=1(yilog(hω(xi))+(1yi)log(1hω(xi)))


我们的目的就是求得满足上式值最大的ω的解,即最大似然法。


  求解的方法看过之前博客的同学应该都知道,可以用梯度下降法。有的同学可能就要问了,明明是要求最大值,怎么能用梯度下降法了,梯度下降不是用来求最小值的么?哈哈,其实我们将公式前面加一个符号就变成求最小值了。其实梯度下降和梯度上升是一个道理,可以想象成我们初中学的一元二次方程,开口向上就利用梯度下降求最小值,开口向下就利用梯度上升求最大值。如果忘记梯度下降的同学,可以参考我之前博客里写到的机器学习之路——线性回归。这里我们令损失函数

J(ω)=1ml(ω)


ωj:=ωjαwjJ(ω)

现在就要开始推导公式了,这个用到咱们高中数学里的链式推导法则,导数忘记的小伙伴百度复习一下简单的推导公式,这个推导过程大家尽量用笔去自己推导一下,详细过程我就不敲了,大家参考logistic回归总结里面有比较详细的推导过程,大家仔细研究下,不算难,我这里就直接给出推导的最终结果:

wjJ(ω)=1mmi=1(hω(xi)yi)xiJ


  因此梯度下降公式等于:

ωj:=ωjαwjJ(ω)=ωjα1mmi=1(hω(xi)yi)xiJ


  得到梯度下降的推导公式后,就可以按照咱们之前博客里的算法一个个算出参数的梯度,然后迭代求最优解,最终输出预测模型。

  到这,logistic回归的理论知识就讲完了,博客里提到的Sigmond函数后面在神经网络里咱们还会再见到,在神经网络里这个叫做激活函数,可以把线性的输出非线性化,因为咱们之前提到的例子房价预测,是线性的,还有很多非线性的结果,这样的话就需要一个激活函数来帮我们把预测模型非线性化。其实Sigmond作为激活函数大部分场景很少有人会用到,后面咱们在讲神经网络里的激活函数时会详细说一下几种激活函数,tanh,sigmod,ReLU等。

  下一篇博客咱们一起看下如何用python实现一个logistic的例子,毕竟咱们学习理论都是为了实际应用打基础。好了,拜拜。