引言
回归我们知道有线性回归,线性回归模型能够无限的逼近我们的结果。以
(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
了。
终于写完了,累死我了。