SVM训练方法

来源:互联网 发布:oppo主题制作软件 编辑:程序博客网 时间:2024/04/29 12:35
svm主要是要通过训练样本来确定拉格朗日算子的值。是一个最小化的过程(二次规划问题,Quadratic Programming)。不过由于中间涉及到n^2(n=样本数)维数矩阵(特征数)的循环处理,计算非常麻烦。下面介绍一下比较出名的几个训练svm的方法。逐步简化矩阵运算,达到全局最低值。从基础的chunking开始。
Chunking
Osuna
SMO

Chunking:
Chunking的思想主要是将矩阵的维数从训练样本的平方维数降到非0的拉格朗日算子的平方这个维数。如果训练样本过大,特征过多,还是解决不了矩阵太大,计算时内存溢出之类的问题。

Osuna:
求解SVM中问题的分解算法,既是把一个大型QP问题分解成一个小型QP问题组成的序列,在上一步的QP子问题中至少加入一个违反KKT条件的点而构成下一步的QP子问题,每一步优化目标函数的值并始终保持满足约束条件,从而使这些QP子问题构成的序列收敛,直至最后所有的点都满足KKT条件,也即得到了原问题的解。

SMO:
将Osuna的分解算法更极端化了,每次只挑选两个拉格朗日算子进行优化(相当于整个特征空间中的两个特征,空间中的两维),然后更新svm来反映新的优化值导致的变化,处理的过程就是:
挑选拉格朗日算子 --> 优化 --> 更新
更新这部分包含在前俩过程中,主要介绍一下两个算子时候的优化算法,和挑选拉格朗日算子的策略。

1,优化算法
为了解只有两个乘子的优化问题,SMO方法首先计算它的约束,然后再解带有约束的最小化问题。为了方便, 下标1表示第一个乘子,下标2表示第二个乘子。因为只有两个乘子,在二维情况下的约束很容易表示出来。见图1:
svm训练的方法
图1:边界约束使得乘子在方框内, 而线性等式约束使得乘子在对角线上,SMO的这一步就是要在这个线段上找个最优点。

先计算第二个拉格朗日算子。如果结果y1不等于y2,线段的边界就会变为:
svm训练的方法
而如果y1等于y2,边界就约束为:
svm训练的方法
那么沿着这个对角线段的目标函数可以表示为:
svm训练的方法
在通常情况下,这个目标函数是明确的,沿着线形等式约束的方向,有个最小值,而且最终值是大于0的。在这种情况下,SMO在下面的约束条件下计算最小值:
svm训练的方法
Ei=ui-yi,是第i个训练样本的误差。在下一步中,这种有约束的最小值可以通过没有约束的最小值来表示,如下:
svm训练的方法
设s=y1y2,那么第一个拉格朗日算子就可以通过第二个算子来表示:
svm训练的方法
在一些特殊情况下,目标函数不是正数。比如:如果kernel K不符合Mercer's条件,就会导致目标函数变得不确定。即使Kernel K没问题,有时候也会得到目标函数为0的情况,比如:很多训练样本含有同样的输入向量。不过,不管在什么情况下,SMO同样起作用,即使目标函数不为正,在此情况下,需要多考虑一个目标函数,如公式19的最后俩:
svm训练的方法


2,挑选策略
对两个拉格郎日乘子分别采用不同的策略,第一个乘子的选择,在SMO算法中通过外层的一个循环实现。外层循环在整个训练集上搜索,看是否每一个样本都不满足KKT条件,如果有一个不满足KKT条件,那它就被选择进行优化。训练集中的样本都满足上述条件后,再检查训练集中的所有位于边界的样本是否满足KKT条件, 若有不满足的, 即被选择进行优化。重复进行,直到所有的样本都满足KKT条件。接下来进行第二个乘子的选择,SMO选择使目标函数值最小的乘子作为第二个乘子进行优化。如果这种方法失败,那么SMO在所有的非边界样本上进行搜索,使目标函数值最小的乘子;若失败,则在整个训练集上搜索, 寻找使目标函数值最小的乘子。

参考:John C. Platt "Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines" 1998
原创粉丝点击