参考Jerrylead和july-支持向量机通俗导论
一、由逻辑回归,引申出SVM(线性可分的SVM)
1.1 逻辑回归
再回忆一下逻辑回归:Logistic回归目的是从特征学习出一个0/1分类模型,而这个模型是将特征的线性组合作为自变量,由于自变量的取值范围是负无穷到正无穷。因此,使用logistic函数(或称作sigmoid函数)将自变量映射到(0,1)上,映射后的值被认为是属于y=1的概率。
中间那条线是θTx=0,logistic回归强调所有点尽可能地远离中间那条线。学习出的结果也就中间那条线。
但是:
考虑上面3个点A、B和C。从图中我们可以确定A是×类别的,然而C我们是不太确定的,B还算能够确定。这样我们可以得出结论,我们更应该关心靠近中间分割线的点,让他们尽可能地远离中间线,而不是在所有点上达到最优(引出了下面的函数间隔与几何间隔)。
我想这就是支持向量机的思路和logistic回归的不同点:
支持向量机考虑局部(不关心已经确定远离的点),
逻辑回归一个考虑全局(已经远离的点可能通过调整中间线使其能够更加远离,但是也可能使一部分点靠近中间线来换取另外一部分点更加远离中间线。)
1.2 先做个简化
上面已经知道,θTx=0是分类的线,在svm中,只考虑局部,只考虑θTx的正负问题,而不用关心g(z)。因此,在这里,用wTx+b代替θTx,并对g(z)做一个简化,将其简单映射到类别标签y=1和y=-1上。
这里的y取值为1和-1(在svm中,只考虑局部,只考虑θTx的正负问题),是为了方便定义:在分类正确的情况下,函数间隔(确信度 )的大小
比如,在分类正确的情况下,y等于1,wx+b应该为正数越大,则情况越好,是正例的确定度就越大。就如上图的A点。y等于-1,wx+b应该为负数越大,则情况越好是负例的确信度就越大。
所以,函数间隔越大,说明分类正确的置信度越大。函数间隔越小 ,比如上图c点,说明越不能确定c点属于哪一类。
可以为 别的值,只是为了方便。这一点在参考的第二个博客上也已经说明了。
1.3functional and geometric margin(函数间隔 和 几何间隔)
由上面解释,已知可以用y(wT x + b) 的正负性来判定(或表示)分类的正确性。
1.3.1 函数间隔
定义函数间隔如下:
也就是,这个样本点x与超平面之间的间隔(但是现在有些不准确,所以有下面的几何间隔)。
此时,若根据SVM的思想,最大化这个间隔,就能提高分类正确的确信度了吗?
答案是否定的,因为,如果成比例的改变w 和b(如将它们改成2w 和2b),则函数间隔的值f(x) 却变成了原来的2 倍(虽然函数值增大了,达到了目标,但是此时超平面没有改变),所以只有函数间隔还远远不够。
1.3.2 几何间隔
我们真正关心的,其实是“几何上”的点到平面的距离,于是可以用几何知识推理出来的几何间隔。而不是一开始人们想当然定义的函数间隔。
事实上,我们可以对法向量w 加些约束条件(这就是调优问题的思考了),从而引出真正定义点到超平面的距离——几何间隔(geometrical margin)的概念。
又因为x0是超平面wTx + b=0上的点,利用向量之间的运算
再令上式乘上对应的类别y,即可得出几何间隔
从上述函数间隔和几何间隔的定义可以看出:几何间隔就是函数间隔除以∥w∥,而函数间隔实际上就是,只是人为定义的一个间隔度量,而几何间隔才是直观上的点到超平面的距离。
接下来就是我们的目标:寻找一个超平面,使得离超平面比较近的点能有更大的间距。也就是我们不考虑所有的点都必须远离超平面,我们关心求得的超平面能够让所有点中离它最近的点具有最大间距。也就是找到最大的几何间隔。
1.4 最优化间隔分类器
由上一小节可以知道,我们这里要找的最大间隔分类超平面中的“间隔”指的是几何间隔。
上面两个式子的意思是(注意,函数间距上面是折线,几何间距上面是波浪线):
最大化几何间隔
约束条件是,每个样例的函数间隔都要大于全局的那一个函数间隔(也就是所有训练集里的最小的那个)
用函数间隔表示几何间隔
于是得到了这个式子:
然而这个时候目标函数不是凸函数,约束条件也不是线性的,没法直接代入优化软件里计算。我们还要改写。前面说到同时扩大w和b对结果没有影响,因此,我们将全局的函数间隔值定义为1。于是,上述的函数转变成了
由于求1/||w||的最大值,相当于求||w||²的最小值,因此结果为:
因为现在的目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题。这个问题可以用现成的QP (Quadratic Programming) 5优化包进行求解。一言以蔽之:在一定的约束条件下,目标最优,损失最小。
根据前面几个文章的话,SVM作为判别模型,它的的模型,就是 wTxi + b 。参数就是w和b。学习完参数以后,新来的样例作为xi,得到结果大于1,说明在超平面上面,所以是正例。反之亦然。
根据SVM的思想,SVM的初步目标函数,就是所有样例的几何间隔尽可能的大
至此,得到了SVM的目标函数,算是初步解决了SVM的这个问题,用优化包求解得到wb,即可得到具有最大几何间距的超平面,提高分类每个点的确信度,分类目标完成。
接下来介绍的是手工求解w和b的方法了,一种更优的求解方法。
1.4.1对于把全局的函数间隔值定义为1的解释:
- w和b是SVM模型的参数,所以必须要有一个确定值才行:
虽然说,同时扩大w和b对结果没有影响,但我们最后要求的仍然是w和b的确定值,不是他们的一组倍数值。函数间隔γ是方向向量w 和截距b 的函数。
因此,我们需要对函数间隔γ做一些限制,以保证我们解是唯一的。这里为了简便我们令函数间隔 γ等于1。
1.4.2同时扩大w和b对结果没有影响的解释:
从上可以看出 ,就同时扩大w和b就相当于等式两边同时除以函数间隔 γ,而新的w和b仍然是旧的wb的函数,所以最大化仍然可以进行。
效果等价于,令函数间隔γ=1,综上所述,零γ=1是合理的,而且也方便了原优化问题的计算。
二、手工求解SVM,暂时先得到w和b,α留着用SMO算法求
由拉格朗日对偶(线性可分条件下SVM的对偶算法)引入核函数(非线性可分条件下SVM的算法)
前言
上一篇说到,得到了如下的线性可分的SVM的目标函数,可以利用优化包进行求解。
此外,由于这个问题的特殊结构,还可以通过拉格朗日对偶性(Lagrange Duality)变换到对偶变量(dual variable) 的优化问题,即通过求解与原问题等价的对偶问题(dual problem)得到原始问题的最优解,这就是线性可分条件下支持向量机的对偶算法。
引入对偶的优点:
- 1、对偶问题往往更容易求解
- 2、可以自然的引入核函数,进而推广到非线性分类问题。
- 3、 将w的计算提前并消除w,最终使得优化函数变为拉格朗日乘子的单一参数优化问题
2.1 拉格朗日对偶
2.1.1、为什么要把存在 等式约束 的极值问题,引入拉格朗日算子变成拉格朗日公式。
因为引入拉格朗日算子可以求出极值。(参考最优化方法的解释)
2.1.2、对于同时存在等式约束以及不等式约束的极值问题的求法
这种极值问题怎么求
首先,同样定义拉格朗日公式,希望可以利用拉格朗日算子法求得最优解,得到:
但是,出现问题了,此时加入的约束条件g已经不再等于0了,所以,此时可以调整算子alpha变成很大很大的 值,使结果负无穷,这显然是不合理的。
所以,我们需要排除在满足条件下,也会无解的情况。
因此,我们定义下面的函数
要看这个函数有什么优点,就要看看这个函数相比于L(ω,α,b)有什么变化:加了max,加了αI大于等于零。
所以,当g和h不满足约束时,总可以调整αi和βi来使thetap具最大值为正无穷。
只有当g和h满足约束时,此时g<0,我们可以调整αi和βi(使αi等于0,βi任意),得到最大值,即θp=f(w)。
于是函数等价于这样
于是原来的极值问题min f(w) 就等价于求min θp了,
即:
也就是说,最小化 θp,就是为了得到最小的 f(w),而能有f(w)就说明了满足约束条件。所以这个等价于原来的极值问题。
至此,相比于拉格朗日公式L(ω,α,b),现在即加入了拉格朗日算子,又排除了纯粹的拉格朗日公式中出现无穷的情况。
但是,又出现了新的问题,也就是,如果直接求解,首先面对的就是两个参数(最里面的是max,这个max问题有两个参数),而且alpha也是不等式约束,再在w上求最小值,这个过程并不容易做。那么应该怎么办呢?
2.1.3 引入对偶问题的理由
在最优化课程里,当遇到不好解的优化问题时,可以转化为原问题的对偶问题试试。
此处,d代表对偶。D--dual
我们定义函数
θD 将问题转化为先求L(ω,α,b)关于 ω 的最小值(此时α和β是固定值),之后再求θD 的最大值。上来面对的是一个参数,相对简单些。
相对于原问题,更换了min和max的顺序,得到了它的对偶问题。
--------------------------------------------------------------------------------------------------------------
一般的更换顺序的结果是MaxMin(X) <= MinMax(X)。也就是,此时有
对偶问题已经表示出来了,这个对偶问题也相对原问题好求,那么,这两个问题等价吗?或者说,对偶问题的解是不是原问题的解呢?
需要用KKT条件来判断了。
2.1.4 用KKT条件来判断对偶问题的解是不是原问题的解
对于拉格朗日算子的深入理解可以看看《最优化方法》,讲义的最后一页。
一、背景知识
1、等式约束的时候,采用拉格朗日乘子法即可得到最优解。而KKT条件是拉格朗日乘子法的泛化(从条件1就可以看出,对w求导为0)
2、KKT条件
含有不等式约束的问题,常常用KKT条件求得候选最优解
对于一般化的拉格朗日公式:
最优值 w 必须满足以下三个条件:
----------1、L对 w 求导为零
----------2、h(w)=0
----------3、αigi=0 ,i = 1,...,k
注意此时
第三个条件表明了KKT的思想:极值会在可行域边界取得。----解释:
-----对于一个特定的自变量w1,当自变量w1在第 i 个可行域边界(gi(w1)=0)时,说明此时这个约束是起到了作用的。这个约束是w1被gi约束了。此时只能到gi的平面上(即边界),再多就出界了。。。而对于最优解来说,就是f(w)达到最优,所以L中,除了f(w)部分,其余应该都等于0,所以此时α>0(或许等于零也可以?疑问)
----而此时,w1在其他的约束条件g非i下,有g非i(w1)<0),说明W1可以随意些,说明此时这个约束并没有起到作用,但是作为最优解,为了除了f(w)部分,其余应该都等于0,所以其系数α应该等于零。
----------------------------------------------------------------------------------------
注意:这个是传统最优化问题的一般式,这个问题有k个不等式约束方程,所有的点都要满足这k个不等式约束。。假设有一百个样本点,只有有三个极值N1,N2,N3,那么说明其余97个点带入这k个方程中去都会小于零。 另外对于这三个极值点,可能会有gi(N1) = 0,除了第i个g以外,g(N1)都小于0 。然后对于极值N2,gj(N2)=0,除了第j个约束以外,其余的g(N2)都小于0。
而本节一开始讨论的问题,只有一个约束方程(因为参数只有w和b)即:y(wTx+b)>=1,所有的点(一共m个)都要满足这个约束方程。而关于为什么非支持向量的系数alpha会等于零呢?也就是相当于前面的,k=1(有k个约束条件)的情况下,m个样本点中,非支持向量的约束g<0,为了最优解,除了f(w)应该都等于零,所以alpha应该等于零。
另外可以参考这段话:
3、最优解 x * 满足KKT条件 是 强对偶条件(对偶问题的解等于原问题的解)的必要条件。(由B推出A)
即,若d* = p*,则有x * 满足KKT条件。4、当目标函数是凸规划问题的时候,就升级了==>
x * 满足KKT条件 是 强对偶条件(对偶问题的解等于原问题的解)的充要条件。
即,若d* = p* <==> x * 满足KKT条件
由上面那句话可以知道,
折腾这么长时间,也就是为了说明,已经知道原问题
是凸优化问题,所以,只要对偶问题的自变量w满足了KKT条件,那么它就是对偶问题的最优解w * ,同时也是原问题的最优解了。
所以,由上可知,只要解出了2.1.3中的问题的参数w和b,也就是原问题的解了。
2.2最优间隔分类器
重新回到SVM的优化问题(其中每个约束式实际就是一个训练样本):
我们将约束条件改写为拉格朗日的形式:
由KKT条件可知,只有当函数间隔是1(g=0)的时候,αi>0。此时,这个样例 wi 在约束平面上受到约束 。对于其它的不在线上的样例点(g<0),极值不会在其范围内去的,所以这些样例点前面的系数αi=0.
实线是最大间隔超平面,假设×号的是正例,圆圈的是负例。在虚线上的点就是函数间隔是1的点,他们前面的系数αi>0,这三个点被称作 支持向量。
由上面问题,构造拉格朗日函数如下(没有等式约束,所以没有β):
————————————————————————————————
下面我们按照对偶问题的求解步骤来一步步进行,由2.1.3可知,对偶问题的形式为:
首先求解L的最小值(最里面的先求),此时αi是固定的,L的最小值只与w和b有关。对w和b分别求偏导数。
得到
将上式带回到拉格朗日函数中得到,此时得到的是该函数的最小值(目标函数是凸函数),即里面的min L已经求出,接下来就是求max了
代入后,化简过程如下:
最后得到
由于最后一项是0,因此简化为
这里,上式中左右边的向量内积,用方括号表示。
到这一步,拉格朗日函数只包含了一个变量αi。接着进行下一步 ,最大化的过程,求得αi。
假设求得了αi 就能根据求导得到的结果
求得w,然后就能得到b。
b 就是 距离超平面最近的正的函数间隔要等于离超平面最近的负的函数间隔。 (其实,由前面的那个x和圈的图,可以认为b就是截距,这个截距b等于上下两条虚线的截距的平均值。)
注意,这里的w,b,alpha都是 向量,都是m维的向量
至于这里的α怎么求得,即上面的最大化问题怎么求解,将留给下一篇中的SMO算法来阐明。
也就是说,手动解的话,还是需要利用SMO算法,求得α才行。
————————————————————————————————
这里考虑另外一个问题,由于前面求解中得到
用αi代替w带入判别模型wTx+b,得到:
也就是说,利用判别模型对新来样本进行判别时,以前新来的要分类的样本首先根据w和b做一次线性运算,然后看求的结果是大于1还是小于1来判断正例还是负例。大于1,说明在超平面的上面,说明是正例。同理,小于1说明在超平面的下面,说明是负例。
约束条件是wx+b-1小于等于零,所以判断就是wx+b与1进行大小比较
现在有了alpha,不需要求出w(那b呢,b怎么求呢,前面已经解释,b是由离超平面最近的间隔和负的函数间隔相等。。。得到的。所以,将新来的样本与训练数据中支持向量做内积以后,再确定最大的正数函数间隔以及最小的负数函数间隔,即可。)
就冲上面这段话,支持向量的系数alpha,也不能等于0。
另外,那有人会说,与前面所有的样本都做运算是不是太耗时了?其实不然,我们从KKT条件中得到,只有支持向量的αi>0 (不等于零)其他情况αi是等于零的。比如,像前面那个x和圈的图,新来的样本只需要和三个支持向量做运算即可。
由此可以看到,求出αi以后,只需要利用支持向量,就可以来判断新来的样例是正例还是负例了。也许这也是是为什么叫支持向量机吧。
上面这个公式,为下面要提到的核函数(kernel)做了很好的铺垫。
下面,先把没求得的alpha放一放,趁着刚刚得到的这个公式的热乎劲,再去看看核函数。