一、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

SVM学习笔记的更多相关文章

  1. SVM学习笔记(一)

    支持向量机即Support Vector Machine,简称SVM.一听这个名字,就有眩晕的感觉.支持(Support).向量(Vector).机器(Machine),这三个毫无关联的词,硬生生地凑 ...

  2. SVM学习笔记(二)----手写数字识别

    引言 上一篇博客整理了一下SVM分类算法的基本理论问题,它分类的基本思想是利用最大间隔进行分类,处理非线性问题是通过核函数将特征向量映射到高维空间,从而变成线性可分的,但是运算却是在低维空间运行的.考 ...

  3. SVM学习笔记(一):libsvm参数说明(转)

    LIBSVM 数据格式需要---------------------- 决策属性 条件属性a 条件属性b ... 2 1:7 2:5 ... 1 1:4 2:2 ... 数据格式转换--------- ...

  4. SVM学习笔记-线性支撑向量机

    对于PLA算法来说,最终得到哪一条线是不一定的,取决于算法scan数据的过程. 从VC bound的角度来说,上述三条线的复杂度是一样的 Eout(w)≤Ein0+Ω(H)dvc= ...

  5. SVM学习笔记5-SMO

    首先拿出最后要求解的问题:$\underset{\alpha}{min}W(\alpha)=\frac{1}{2} \sum_{i,j=1}^{n}y^{(i)}y^{(j)}\alpha_{i}\a ...

  6. SVM学习笔记4-核函数和离群点的处理

    核函数在svm里,核函数是这样定义的.核函数是一个n*n(样本个数)的矩阵,其中:$K_{ij}=exp(-\frac{||x^{(i)}-x^{(j)}||^{2}}{2\sigma ^{2}})$ ...

  7. SVM学习笔记1-问题定义

    问题定义: 给出一些样本,包含两类.svm试图找到一个超平面,将数据分开,并且每种样本到超平面的距离的最小值最大. 输入样本:$\{x_{i},y_{i}| 1\leq i\leq n \}$,$y_ ...

  8. 机器学习6—SVM学习笔记

    机器学习牛人博客 机器学习实战之SVM 三种SVM的对偶问题 拉格朗日乘子法和KKT条件 支持向量机通俗导论(理解SVM的三层境界) 解密SVM系列(一):关于拉格朗日乘子法和KKT条件 解密SVM系 ...

  9. SVM学习笔记(二):什么是交叉验证

    交叉验证:拟合的好,同时预测也要准确 我们以K折交叉验证(k-folded cross validation)来说明它的具体步骤.{A1,A2,A3,A4,A5,A6,A7,A8,A9} 为了简化,取 ...

随机推荐

  1. select option居中显示

    <style> .ch-select{ padding:0px;} .ch-select input[type=text]{ width:100%; position:relative; ...

  2. java邮件

    我们用过很多邮件,qq,163,网易等. 一.发送邮件需要遵循smtp协议,接收邮件需要遵循pop3协议 二.发邮件的过程 假设用qq邮件 写邮件-->点 “发送” --> qq邮件服务器 ...

  3. linux系统设置静态IP 查看网卡配置文件

    http://jingyan.baidu.com/article/455a99508be7cda167277865.html vi /etc/sysconfig/network-scripts/ifc ...

  4. jQuery中的quickExpr

    jQuery 源码中的 quickExpr 是用来检测参数 selector 是否是复杂的 HTML 代码(如“abc<div>”)或 #id,匹配结果存放在数组 match 中 // A ...

  5. L1 - 运行机制

    var name = 'kl'; function person(){ alert(name); var name = 'ko'; } person(); 这段代码输出 ‘undefined’,这种现 ...

  6. POJ 1062 昂贵的聘礼 最短路 难度:0

    http://poj.org/problem?id=1062 #include <iostream> #include <cstring> #include <queue ...

  7. Hibernate 通过 Session 操纵对象

    Session 概述 •Session 接口是 Hibernate 向应用程序提供的操纵数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载 Java 对象的方法. •Session 具有 ...

  8. wp8.1 Study11:APP里文件读写和使用XML和Json序列化

    一.文件读写 1.基本操作(使用FileIO API) 这个方法在上一个stduy已经学过,那么贴出来复习下,代码如下: private async void writeTextToLocalStor ...

  9. Android 插入图片到媒体库

    今天介绍一下在Android中怎么插入图片到媒体库,下面看代码: final String titleName = Function.md5(imageUri.toLowerCase()) + &qu ...

  10. java基础之 switch

    switch 语句的格式: switch ( 整型或字符型变量 ) { case 变量可能值1 :   分支一; break; case 变量可能值2 :   分支二; break; case 变量可 ...