简述:
支持向量机(Support Vector Machine,SVM),用中文翻译过来是这样,似乎也没有其他更好的翻译,从名字就可以看得出SVM的关键词即支持向量,支持向量决定了之后的分类面,说到这里,还没有讲,SVM是一种分类器,被普遍认为是表现很优秀的分类器。本文后面介绍都以两类分类为例。
分类间隔
在介绍SVM时,首先要提到的就是两个类别的分类间隔,先看分类间隔这个名词,似乎画个图更容易讲,如下图所示,分隔两个类别,可以有多个分类面可以选择,那么我们选择哪个呢?在SVM中要求分类间隔最大,这里考虑到经验风险和结构风险最小的问题,具体我也不展开了。
那么如何求得这个最大分隔的面呢?首先需要计算分隔距离,假设两个类别:+1和-1类,另外假设已知最佳分类面方程为,那么点到分类面的距离r可以用表示,那么几何距离,那么我们就可以根据最大化分隔面的距离列出如下方程:
即
即
那么接下来,我们就可以用拉格朗日乘子法进行求解了,如下转为:
定义拉格朗日函数如下:
根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题
那么我们先对上面拉格朗日函数对w和b求偏导,如下:
另上面两个式子为0,那么可以求得w的表达式,代入拉格朗日方程,整理结果如下:
公式推导到这里,核函数的形式就出现了。
根据KKT条件上式是可以求解,存在,使得w和b可以求解。
KKT条件:
=0
=0
那么可以得到
从w*和b*的表达式中得到,alpha=0的项都为0,w只依赖于alpha>0的样本点,所以对应于alpha>0的样本点称为支持向量。并且支持向量一定在间隔边界上,这个可以从KKT条件中得到。
那么现在需要做的就是要求解,这个可以由凸二次规划问题解决,但是当样本量很大的时候,这些算法会变得很低效,在1988年Platt提出一种序列最小最优化算法(sequential minimal optimization, SMO)算法。