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

引言

  回归我们知道有线性回归,线性回归模型能够无限的逼近我们的结果。以 (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=wTx+b 得到 z 值,然后根据符号函数得到p,发现预测的类别和我们的 yi 不一致,我们是不是要回去更新 w 值,怎么更新,用梯度啊,求导啊。可是不可导啊,那可咋整。所以我们不能用线性回归去做分类,因此我们需要找一个函数来把刚才计算的 z 转换一下,于是对数几率函数就出现了。
y=11+ez
它就可以把刚才的线性函数转换为非线性的,而且是处处可导的。范围在0-1。将刚才的线性函数带入对数几率函数中得到
y=11+e(wTx+b)
。这个函数就把 [,] 映射到了 [0,1] 实际上我们的y值代表的就是类别为1的概率,那么 1y 就是类别为0的概率。好吧,那我们就以概率的形式来把他们表示出来:
P(y=1|w,b,x)=11+e(wTx+b)

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

P(y=0|w,b,x)=e(wTx+b)1+e(wTx+b)

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

我们可以把第二和第四个公式合并成一个,
J(hw(x),y)=hw(x)y(1hw(x))(1y)
如果 y=1 1y=0 就剩第一项了,我们就得到了类别为1的概率。如果 y=0 ,就只剩第二项了,也就是类别为0的概率。将其取对数之后,得到
J(hw(x),y)=ylnhw(x)+(1y)ln(1hw(x))
这样给定一个样本,我们就可以得出该样本属于一个类别的概率,而这个概率越大越好,也就是我们希望上面的代价函数能够取到最大值。
  当然上面是这对一个样本的代价函数,我们要通过多个样本来估计参数 w 需要用到什么知识。当然是极大似然函数了,如果不明白可以参考我的 前一篇博客。假设样本之间是相互独立的,所以要先将所有样本的代价函数乘起来,然后取对数将乘转换为加。即:
J(w)=i=1n[yilnhw(xi)+(1)+(1yi)ln(1hw(xi))]
n为样本个数,我们的目的就是求一组 w ,它能让上面这个代价函数取到最大值那就得用梯度上升算法,夷,一般不都是取最小值吗?我们在 J(w) 前面加一个负号就是取最小值了,就可以用梯度下降算法了。本质上是一样的,只是一个负号的问题。

梯度下降算法

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

wi=wiJ(wi)wi

所以我们需要对 J(w) 求导数,求导前,我们先捋一捋:
hw=g(wTx)=11+e(wTx)
这就用到链式求导法则了:
J(w)wi=J(w)g(wTx)g(wTx)wTxwTxwi
那这三项需要我们一个一个的来求
第一项的求导结果为:
J(w)g(wTx)=y1g(wTx)+(y1)11g(wTx)

第二项的求导结果为:
g(wTx)wTx=e(wTx)(1+e(wTx))=1(1+e(wTx))(111+e(wTx))=g(wTx)(1g(wTx))

第三项的求导结果为:
wTxwi=J(w1x1+w2x2+..+wnxn)wi=xi

所以,三项求导都完成了,我们可以得到最终的求导结果为:
J(w)wi=wiαxi[yig(wTx)]

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

猜你喜欢

转载自blog.csdn.net/qq_18293213/article/details/78698609