您的位置:首页 > 其它

《机器学习实战》-- 逻辑斯蒂回归<一>

2017-12-02 21:47 288 查看

引言

  回归我们知道有线性回归,线性回归模型能够无限的逼近我们的结果。以(xi,yi)为例,通过线性回归 f(x)=wTx+b表达式,就可以得到我们对yi的估计值。

回归到分类

  如何从线性回归转换到分类呢?由于线性回归得到的是连续值,z=wTx+b,z的范围[−∞,∞],是这样的一个连续值无法直接转换为类别。那怎么办?最简单粗暴的方法,在二分类中,我们设定一个阈值0,当z的值大于0我们就把他归类为1,小于0归类为0,z=0时就归类为0,那不就是得到如下表达式了吗?

p=⎧⎩⎨⎪⎪0z<00.5z=01z>0

如果我能画个图就好了,你看这个表达式像什么,是不是有点像符号函数(单位阶跃函数)。符号函数有一个特点,那就是啥?不可导。不可导会导致什么后果。比如说,预先设置w=w1,w2,...wn的初始值都为1,给定一个样例(xi,yi),当然此时的x为一个向量。所以通过z=wT∗x+b得到z值,然后根据符号函数得到p,发现预测的类别和我们的yi不一致,我们是不是要回去更新w值,怎么更新,用梯度啊,求导啊。可是不可导啊,那可咋整。所以我们不能用线性回归去做分类,因此我们需要找一个函数来把刚才计算的z转换一下,于是对数几率函数就出现了。y=11+e−z它就可以把刚才的线性函数转换为非线性的,而且是处处可导的。范围在0-1。将刚才的线性函数带入对数几率函数中得到y=11+e−(wT∗x+b)。这个函数就把[−∞,∞]映射到了[0,1]实际上我们的y值代表的就是类别为1的概率,那么1−y就是类别为0的概率。好吧,那我们就以概率的形式来把他们表示出来:P(y=1|w,b,x)=11+e−(wT∗x+b)

P(y=1|w,b,x)=hw(x)

P(y=0|w,b,x)=e−(wT∗x+b)1+e−(wT∗x+b)

P(y=0|w,x,b)=1−hw(x)

我们可以把第二和第四个公式合并成一个,J(hw(x),y)=hw(x)y(1−hw(x))(1−y)如果y=1,1−y=0就剩第一项了,我们就得到了类别为1的概率。如果y=0,就只剩第二项了,也就是类别为0的概率。将其取对数之后,得到J(hw(x),y)=ylnhw(x)+(1−y)ln(1−hw(x))这样给定一个样本,我们就可以得出该样本属于一个类别的概率,而这个概率越大越好,也就是我们希望上面的代价函数能够取到最大值。

  当然上面是这对一个样本的代价函数,我们要通过多个样本来估计参数w需要用到什么知识。当然是极大似然函数了,如果不明白可以参考我的前一篇博客。假设样本之间是相互独立的,所以要先将所有样本的代价函数乘起来,然后取对数将乘转换为加。即:

J(w)=∑i=1n[yilnhw(xi)+(1)+(1−yi)ln(1−hw(xi))]n为样本个数,我们的目的就是求一组w,它能让上面这个代价函数取到最大值那就得用梯度上升算法,夷,一般不都是取最小值吗?我们在J(w)前面加一个负号就是取最小值了,就可以用梯度下降算法了。本质上是一样的,只是一个负号的问题。

梯度下降算法

  梯度下降算法的目的就是不断的更新w的值,使−J(w)取到最小。梯度下降算法的表达式就是:wi=wi−∂J(wi)∂wi

所以我们需要对J(w)求导数,求导前,我们先捋一捋:hw=g(wT∗x)=11+e−(wT∗x)这就用到链式求导法则了:

∂J(w)∂wi=∂J(w)∂g(wT∗x)∗∂g(wT∗x)∂wT∗x∗∂wT∗xwi那这三项需要我们一个一个的来求

第一项的求导结果为:∂J(w)∂g(wT∗x)=y∗1g(wT∗x)+(y−1)11−g(wT∗x)

第二项的求导结果为:

∂g(wT∗x)wT∗x=e−(wT∗x)(1+e−(wT∗x))=1(1+e−(wT∗x))∗(1−11+e−(wT∗x))=g(wT∗x)∗(1−g(wT∗x))

第三项的求导结果为:

∂wT∗x∂wi=∂J(w1x1+w2x2+..+wnxn)∂wi=xi

所以,三项求导都完成了,我们可以得到最终的求导结果为:

∂J(w)wi=wi−α∗xi∗[yi−g(wT∗x)]

OK,按照这个公式更新参数我们就可以完成得到最终的w了。

  终于写完了,累死我了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  机器学习