第五章讲的是Logistic 回归,作者提出了梯度上升算法,本文是对该算法的一个通俗易懂的解释,不需要任何梯度的知识就能理解,造福广大初学者。
简单描述问题
给定一个样本集,每个样本点有两个维度值(X1,X2)和一个类别值,类别只有两类,我们以0和1代表。数据如下所示:
样本 | X1 | X2 | 类别 |
---|---|---|---|
1 | -1.4 | 4.7 | 1 |
2 | -2.5 | 6.9 | 0 |
… | … | … | … |
机器学习的任务是找一个函数,给定一个数据两个维度的值,该函数能够预测其属于类别1的概率。
假设这个函数的模样如下:
h(x) =sigmoid(z)
z = w0 +w1*X1+w2*X2
问题转化成了,根据现有的样本数据,找出最佳的参数w(w0,w1,w2)的值
迭代找出最佳的w
为进一步简化问题,我们假设样本集只有上表中的两个。
假设现在手上已经有一个wt,也就是有了一个函数h(x),那么我们可以把样本1和样本2的数据代进去,看看这个函数的预测效果如何,假设样本1的预测值是p1 = 0.8,样本2的预测值是:p2 = 0.4。
函数在样本1上犯的错误为e1=(1-0.8)= 0.2,在样本2上犯的错误为e2=(0-0.4)= -0.4,总的错误E为-0.20(e1+e2)。如下表所示:
样本 | X1 | X2 | 类别 | 预测值 | error |
---|---|---|---|---|---|
1 | -1.4 | 4.7 | 1 | 0.8 | 0.2 |
2 | -2.5 | 6.9 | 0 | 0.4 | -0.4 |
… | … | … | … | … | … |
现在我们要改进wt的值,使得函数在样本1和2上犯的总错误E减小。
将wt的改进拆开来,就是分别改进它的三个分量的值,我们以w1为例。
对于样本1:
X1*e1=-1.4*0.2= -0.28
-0.28告诉我们什么呢?它告诉我们,样本1的X1和e1是异号的,减小w1的值,能够减小函数在样本1上犯的错误。为什么呢?
w1减小,则X1*w1增大(因为样本1的X1是负的),进而 z = w0 +w1*X1+w2*X2增大,又由于sigmoid函数是单调递增的,则h(x)会增大。当前的h(x)是0.8,增大的话就是在向1靠近,也就是减小了在样本1上犯的错。
对于样本2:
X1*e2=-2.5*-0.4= 1
1告诉我们,样本2的X1和e2是同号的,增大w1的值,能够减小函数在样本2上犯的错误。为什么呢?
w1增大,则X1*w1减小,进而 z = w0 +w1*X1+w2*X2减小,又由于sigmoid函数是单调递增的,则h(x)会减小。当前的h(x)是0.4,减小的话就是在向0靠近,也就是减小了在样本2上犯的错。
现在的问题就是这样的,样本1说,要减小w1的值,这样函数对我的判断就更准确了,样本2说,要增大w1的值,这样函数对我的判断就更准确了。
显然,样本1和样本2都只从自己的角度出发,对改进w1提出了各自不同意见,我们要综合它们的意见,以决定是增大w1还是减小w1,如下:
-0.28+1 = 0.72
最后的结果0.72是正的,说明,增大w1对函数的总体表现更有利。就是说,增大w1后,虽然在样本1上犯的错误会稍稍增大,但在样本2上犯的错误会大大减小,一个是稍稍增大,一个是大大减小,为了函数总体表现,肯定是增大w1的值啦。
那么具体增加多大呢?我们可以用一个专门的参数alpha来控制。
以上,只是对书中所用算法的一个形象直观的理解,没有任何严谨的数学证明,目的是让大家能够更感性地理解这个算法在做什么。
2016.12.16补充
刚才学习了第6章,发现这个规律具有普遍性。下面结合SMO算法进一步说明。
设fXi 是函数在xi元素上的预测值,yi是样本的实际值,只能是+1或-1
ei = yi – fXi
则yi*ei<0,表明减小ai,会减小函数在样本xi上犯的错,为什么呢?
我们知道fXi这个值中有这样一项
ai*yi*K(xi,xi)
K(xi,xi)是大于0的。
我们考虑yi为+1的情况,则ei为负数,即fXi是大于yi的,当我们减小ai的值时,由于yi和K(xi,xi)都是大于0的,所以fXi也会减小,也就是说,fXi会朝着yi的方向移动。
yi为-1时的分析与此类似。
可见,yi*ei的符号确实能够告诉我们优化的方向。