原文地址:http://www.cnblogs.com/dreamvibe/p/4362220.html
上一篇SVM之核函数介绍了通过计算样本核函数,实际上将样本映射到高维空间以望使其线性可分的方法,一定程度上解决了线性不可分问题,但并不彻底。
现在,换个思路,对于线性不可分问题不再千方百计的变换数据使其线性可分,对于有些数据,找到合适的变换可能是相当困难的。我们允许数据线性不可分,允许得到的分类器对一些样本而言不“完美”,但分类器得为自己的不“完美”付出代价,它要受到惩罚!
考虑之前线性可分时对SVM的形式化
































这里要求所有样本的函数间隔至少为1,这就是所谓的“完美”,两类样本被分的尽可能的开,它们离分类超平面至少有值为1的函数间隔,
的几何间隔。(注意函数间隔和几何间隔的关系,下文为叙述方便将以函数间隔来描述,尽管SVM的目的实际上是在最大化几何间隔)
现在,我们放松要求,不要求那么苛刻了,对于一些样本并不要求函数间隔至少为1,比1小点也行(分的不够开了),小到小于0了也行(错分了)。写成表达式就是
,不要求样本
的函数间隔为至少1了,够
就行了,也就是说优化问题(1)的约束条件变了。
相应地,目标函数也得变,因为不可能约束变但目标不变,不然
给的很大,
远远小于0了,
即使小于0也是满足约束的,那其实好多样本都被错分了,Duang~ 一下分类器变得很差,很挫,很笨,这样别的分类器一定会笑话它,根本没有这样的分类器,是假的。所以,你有
的不完美,我就要给你
的惩罚,其中
是惩罚因子,表示惩罚的相对大小,它可以对所有的样本一视同仁,不随
的变化而变化,也可以厚此薄彼,对有些样本严加惩罚,对另一些则睁一只眼,闭一只眼。一般这个惩罚因子还是比较公平的,所以不写
,写成
吧~目标不是要最小化
吗,现在将对所有样本的惩罚
也加进去,不光要最小化
,也要最小化
,这样一来
虽然大于0,但不敢变的很大了,也就是说,可以不“完美”,但不能太离谱。
现在,优化问题可以重新写成



























































求解这个优化问题就可以了。
写出拉格朗日函数


































































令
,(2)的对偶问题可以写为:



























先来求
。
令
,得到
令
,得到
令
,得到
,由于
且
,所以更进一步有
将上述结果代回(3)(4)得到对偶问题

































































当然,这里仍然可以引人核函数,将
替换为
。


































































这是一个二次规划问题,可以用一般的二次规划方法来解,不过代价比较大,John C.Platt提出了SMO算法用来求解该优化问题。求解得到
后,根据
和分类判别式
得到最终判别式























或者引人核函数的话写作
























不过这里
的求解会有所不同。之前的文章SVM之对偶问题中求解
的方法是根据KKT条件,找到
对于的向量即为支持向量,就可以由
解出
。现在的约束条件中虽然引人了
,但如果推导一下现在优化问题的KKT条件的话,会得出
的结论,所以现在应该仍然可以按照上述方法来解
。不过SMO算法有迭代更新求解的方法,是不是因为向上面那样做不太可行我还没搞清楚。
核函数通过向高维映射来解决线性不可分问题,现在有引人了惩罚机制了解决线性不可分问题问题,但不能简单地将它们看作完全独立的方法。如果仅仅依赖于惩罚机制,在样本线性不可分的情况下得到是所谓最优分类器其实也是比较差的,这是由样本本身的分布决定的,所以还是需要首先用“核函数完成映射”,使样本变得尽可能线性可分。
另外,惩罚机制也解决了噪声问题,通过对噪声数据较小的惩罚损失来换取目标函数整体上较大的优化。
不考虑惩罚机制,如果图中没有黑色的三角形样本,那分类器可能像实线那样,分类间隔还是挺大的,但这一个很像噪声的样本却将分类间隔挤压的很小,严重影响分类器的番话特性。加入惩罚机制后,新的分类器就有可能会以对这个样本的“不完美”分类为代价,换取分类间隔的提升。从(2)中目标函数
来看,分类器以第二项的增大换取了第一项的减小,是分类更加合理。从这也可以看出惩罚因子的作用,它起到了调节分类器间隔和样本惩罚直接的相对权重的作用。
写到这里,SVM的基本问题除了求解优化问题(6)的SMO算法之外,已基本完成。对于SMO算法,再学习吧~