一、SVM概述
支持向量机(support vector machine)是一系列的监督学习算法,能用于分类、回归分析。原本的SVM是个二分类算法,通过引入“OVO”或者“OVR”可以扩展到多分类问题。其学习策略是使间隔最大化,也就是常说的基于结构风险最小化寻找最优的分割超平面。SVM学习问题可以表示为凸优化问题,也可以转变为其对偶问题,使用SMO算法求解。线性SVM与LR有很多相似的地方,分类的准确性能也差不多,当数据量比较少时SVM可能会占据优势,但是SVM不方便应用于软分类(probability estimates)。SVM的另一优势是灵活的核函数用于学习非线性问题,常用的核函数是高斯核(rbf)、多项式核(poly),也可以自己定义核函数。SVM的算法的复杂度是,所以当数据量比较大时,SVM的效率比较低。尽管有人说SVM在工业界大数据量应用中很少使用,但是其思想还是非常优秀的,在笔试、面试非常常见,需要认真学习。
二、SVM简单推导
1. SVM原始问题
原始的SVM问题是在线性可分的情况下,根据“最大化最小间距”的原则寻找最优的超平面w,b。抽象成如下数学优化问题。首先要知道点到超平面的距离公式,可以联想以前学过的点到直线的距离,距离公式见下图红色框框。为了便于求解,同时缩放w,b使得最小的函数间隔为1(函数间隔、几何间隔见参考链接1),最后将最大问题转变为最小优化问题,整理出标准的SVM的数学形式。SVM原始的标准形式可以从正则化的角度看成是在Ein=0的L2正则化。基于SVM最大化边界条件得到的模型有更好的范化能力。SVM标准问题是二次凸目标函数加线性的限制条件,可以使用现成的二次规划程式求解(QP)。
2. SVM的对偶问题
SVM原始问题使用QP求解,复杂度和样本特征属性成正比,在处理线性问题时尚可忍受。但是使用线性模型处理非线性问题是,需要将原始特征转换到更高的维度才能使用线性模型,SVM也不例外。原始特征转到线性可分的高维特征会导致特征维度爆炸式增长,例如原始特征维度为2,转换后为5,如果原始空间是3维的,转换后会得到19维的新空间,,使得QP求解变得很麻烦。SVM满足KKT条件,通过拉格朗日算子将原始问题转变为其等价的对偶问题。对偶问题会更容易求解,可以很自然的引入核函数,进而将SVM推广到非线性分类问题。求解对偶SVM问题首先分别令w,b的偏导为0,得到w,b和alpha之间的关系式,最后变成只含有alpha的优化问题,可以使用SMO算法求解alpha,最后根据之前的关系式得到w,b。
3 .SVM核函数
文章开头讲过SVM的一大优势是可以使用的kernel处理线性不可分的情况。回顾之前使用特征转换的方式线性分类器处理非线性问题,将原始数据转到高维空间,在高维空间进行分类的操作。这种方式的缺点是转换后维度爆炸增长,效率太低。核函数处理线性不可分问题本质上也是转换到可线性处理的高维空间,但是核函数的方式是“隐式”的。核函数直接在低纬空间进行向量内积的运算,不需要显示地写出映射到高维空间的结过,避免了高维空间的复杂计算。解决了之前的维度爆炸问题。常见的核函数有高斯核这个核函数号称能将原始空间映射到无穷维度,调节gamma,gamma越小高次特征权重衰减越快,gamma越大,模型越复杂,越容易过拟合;多项式核,gama越大,模型越复杂。线性核是,原始空间中的内积,就是在原始空间分类。除此之外还可以自己定义核函数。下右图比较了使用SVM核函数、LR、决策树分类的区别,后面两个都是直线或者是直线的组合,说明SVM在非线性分类的优势。
4 .SVM松弛变量(软边界)
基于最大边界距离的SVM相比以前的线性分类器有更好的泛化能力,引入核函数能处理线性不可分的问题。但是这种“始终坚持线性可分的SVM”很容易受噪声、异常点的影响,异常点的存在会使超平面发生变化,甚至造成原本线性可分的数据变得不在可分,模型变得复杂,严重的会造成过拟合,影响模型的泛化能力。为了处理这种情况,SVM在实际使用中会加入松弛变量,允许数据点在一定程度上偏离超平面。软边界SVM,松弛变量体现在惩罚系数C上,C越大,对错误点的惩罚越大,最大边距越小,模型越复杂。带有松弛变量的SVM,同样有其对偶问题,并能使用核函数。通过对偶问题,可以看出,优化问题没变,只是对alpha增加了一个上界C。这样现在的SVM可以处理线性、非线性、并能容忍噪声和outliers。
5. 从L2正则化理解SVM
SVM与LR有很多相似的地方,可以表示为L2正则化模型的形式。下左图简单的罗列了Soft SVM转化为L2形式的过程。一种新的误差测量函数hinge loss=max(1-ys,0)。标准L2形式中的lamda用C表示,lamda = 1/2C,C越大,lamda越小,正则化项越小。右边那张图是台大林的课件中的原图,比较了zero_one,SCE,hingeloss之间的区别,hinge Loss是zero one的上界。除此之外kernel SVM可以看做是在转换后Z空间的logReg,SVM确实和正则化的LR是非常近似的。实际中LR和线性SVM的性能也相近。
6. SVR(support vector Regression)
SVR是基于epsilon-insensitive error 损失函数的回归模型,准确的说是一种Tube Regression。在Tube之内不算错误,在Tube之外根据距离Tube的远近计算错误。相比基于平方错误的一般回归模型,Tube在很大范围与一般回归模型相似,而且Tube模型受异常样本的影响更小。L2 正则化的Tube Regression模型是一种稀疏的回归模型,模型参数w有很多为0。模仿SVM能将L2正则化的Tube Regression写成SVM的形式,称为SVR。SVR使用二次规划求解(QP),也可以模仿SVM引入Lagrange Multipliers写成SVM的对偶形式求解。参数C调节Regularization 的程度,C越大,相当于正则化系数lamda越小。参数epsilon表示Tube的宽度。
三、凸二次规划和SMO算法
1. 二次规划
原始SVM能带入QP问题求解,对偶问题使用特殊的QP问题求解。百科中有一段很短的话介绍二次规划,二次规划的标准形式如下,当G=0时,退化为线性规划;G为半正定时,称为凸二次规划,至少存在一个向量满足约束条件并且在可行域有下界,存在一个全局最小值;G为正定时,称为严格的凸二次规划,全局最小值存在且唯一。SVM属于半正定的情况。SVM的QP解法就是将SVM化为QP形式,带入现成的QP求解包求解。
2. SMO算法
QP问题求解二次规划,QP的复杂度与样本的特征维度有关。在数据量比较大时,需要较大的计算能力支撑。SMO算法是Platt在1996年提出的,用于解决SVM的对偶问题,SVM的对偶问题是在一堆alpha中求目标函数的最小值。SMO算法的核心是将大的优化问题分解为多个小优化问题求解。为了求解那么多的alpha算子,SMO每次任意抽取两个乘子alpha1和alpha2,固定其它的算子。不断迭代求解出所有的alpha,最终求b。SMO算法没有想象中的那么难,july的支持向量通俗导论中介绍得很详细。
参考资料:
1.支持向量机系列:http://blog.pluskid.org/?page_id=683
2.支持向量机通俗导论pdf:http://pan.baidu.com/s/1eQrgiOU
3.台大林老师机器学习技法SVM六讲:https://class.coursera.org/ntumltwo-002/lecture