首页 > 代码库 > svm
svm
现在的目标函数是二次的,约束条件是线性的,所以它是一个凸二次规划问题。这个问题可以用现成的QP (Quadratic Programming) 优化包进行求解。
由于这个问题的特殊结构,还可以通过拉格朗日对偶性变换到对偶变量的优化问题,即通过求解与原问题等价的对偶问题(dual problem)得到原始问题的最优解,
一言以蔽之:在一定的约束条件下,目标最优,损失最小。
一者对偶问题往往更容易求解;
二者可以自然的引入核函数,进而推广到非线性分类问题。
拉格朗日对偶性:
目标函数:
转换成对偶函数:
换言之,之所以从minmax的原始问题,转化为maxmin的对偶问题,一者因为是的近似解,二者,转化为对偶问题后,更容易求解。
下面可以先求L 对w、b的极小,再求L 对的极大。
对偶问题求解的3个步骤
(1)、首先固定,要让 L 关于 w 和 b 最小化,我们分别对w,b求偏导数,即令 ?L/?w 和 ?L/?b 等于零
(2)、求对的极大,即是关于对偶问题的最优化问题。经过上面第一个步骤的求w和b,得到的拉格朗日函数式子已经没有了变量w,b,只有。
(3)在求得L(w, b, a) 关于 w 和 b 最小化,以及对的极大之后,最后一步便是利用SMO算法求解对偶问题中的拉格朗日乘子。
惩罚因子C
其中: 是一个参数,用于控制目标函数中两项(“寻找 margin 最大的超平面”和“保证数据点偏差量最小”)之间的权重。
C越大表示有些样本很重要,决不能分类错误就给一个很大的C,要求保证分类误差很小,不能分类错误
C越大越重视离群点和分类错误点
C是一个你必须事先指定的值,指定这个值以后,解一下,得到一个分类器,然后用测试数据看看结果怎么样,如果不够好,换一个C的值,再解一次优化问题,得到另一个分类器,
再看看效果,如此就是一个参数寻优的过程,但这和优化问题本身决不是一回事,优化问题在解的过程中,C一直是定值,要记住。
松弛变量ξ
SVM引入了松弛变量ξ是为解决过拟合的办法
SMO算法
第一步选取一对,选取方法使用启发式方法;
第二步固定除之外的其他参数,确定W极值条件下的, 其中由表示。
那么在每次迭代中,如何更新乘子呢?
- 步骤1:先“扫描”所有乘子,把第一个违反KKT条件的作为更新对象,令为a2;
- 步骤2:在所有不违反KKT条件的乘子中,选择使|E1 ?E2|最大的a1(其中,而,求出来的E代表函数ui对输入xi的预测值与真实输出类标记yi之差)。
- 值得一提的是,每次更新完两个乘子的优化后,都需要再重新计算b,及对应的Ei值。
SVM的优点:
SVM学习问题可以表示为凸优化问题,因此可以利用已知的有效算法发现目标函数的全局最小值。
而其他分类方法(如基于规则的分类器和人工神经网络)都采用一种基于贪心学习的策略来搜索假设空间,这种方法一般只能获得局部最优解。
SVM的缺点:
svm