SVM学习笔记
一、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学习笔记的更多相关文章
- SVM学习笔记(一)
支持向量机即Support Vector Machine,简称SVM.一听这个名字,就有眩晕的感觉.支持(Support).向量(Vector).机器(Machine),这三个毫无关联的词,硬生生地凑 ...
- SVM学习笔记(二)----手写数字识别
引言 上一篇博客整理了一下SVM分类算法的基本理论问题,它分类的基本思想是利用最大间隔进行分类,处理非线性问题是通过核函数将特征向量映射到高维空间,从而变成线性可分的,但是运算却是在低维空间运行的.考 ...
- SVM学习笔记(一):libsvm参数说明(转)
LIBSVM 数据格式需要---------------------- 决策属性 条件属性a 条件属性b ... 2 1:7 2:5 ... 1 1:4 2:2 ... 数据格式转换--------- ...
- SVM学习笔记-线性支撑向量机
对于PLA算法来说,最终得到哪一条线是不一定的,取决于算法scan数据的过程. 从VC bound的角度来说,上述三条线的复杂度是一样的 Eout(w)≤Ein0+Ω(H)dvc= ...
- SVM学习笔记5-SMO
首先拿出最后要求解的问题:$\underset{\alpha}{min}W(\alpha)=\frac{1}{2} \sum_{i,j=1}^{n}y^{(i)}y^{(j)}\alpha_{i}\a ...
- SVM学习笔记4-核函数和离群点的处理
核函数在svm里,核函数是这样定义的.核函数是一个n*n(样本个数)的矩阵,其中:$K_{ij}=exp(-\frac{||x^{(i)}-x^{(j)}||^{2}}{2\sigma ^{2}})$ ...
- SVM学习笔记1-问题定义
问题定义: 给出一些样本,包含两类.svm试图找到一个超平面,将数据分开,并且每种样本到超平面的距离的最小值最大. 输入样本:$\{x_{i},y_{i}| 1\leq i\leq n \}$,$y_ ...
- 机器学习6—SVM学习笔记
机器学习牛人博客 机器学习实战之SVM 三种SVM的对偶问题 拉格朗日乘子法和KKT条件 支持向量机通俗导论(理解SVM的三层境界) 解密SVM系列(一):关于拉格朗日乘子法和KKT条件 解密SVM系 ...
- SVM学习笔记(二):什么是交叉验证
交叉验证:拟合的好,同时预测也要准确 我们以K折交叉验证(k-folded cross validation)来说明它的具体步骤.{A1,A2,A3,A4,A5,A6,A7,A8,A9} 为了简化,取 ...
随机推荐
- java入门第二步之helloworld【转】
前一篇博客已经介绍了jdk的安装:接下来我们就乘热打铁,完成第一个程序:helloworld(每学一样程序的新东西都是从实现helloworld开始的) 1.不是用开发工具IDE,只是使用记事本来实现 ...
- .NET开发知识体系
记得几年前写过一篇关于.NET开发方面的知识总结,但是随着技术的发展以及自己技术理解的提升,觉得有必要对那篇文章加以更新和完善. 最近在园子里也看到有人写关于.NET知识体系的文章,特别是灵感之源写的 ...
- 第三章 XHTML 表单
1.表单的主要作用在于在网页上提供一个图形用户界面,以采集和提交用户输入的数据. 2.HTML表单元素和属性可以分为两种类型:定义表单整体结构,使浏览器知道如何处理表单数据的元素:创建输入控件的元素. ...
- [示例]NSDictionary编程题-字典的排序应用(iOS5班)
代码? #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepo ...
- java四大名著
java编程思想effective Javajava核心技术java编程语言 外加: 深入理解java虚拟机 自己动手写java虚拟机 java并发编程的艺术 java常用算法手册 其他计算机需要看 ...
- HDU 1533 KM算法(权值最小的最佳匹配)
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- winform的comboBox使鼠标滑轮修改值失效
目标: winform窗体很多combobox下拉框,当他们其中的一个获得焦点的时候,如果滚动鼠标就会改变下拉框的值,要实现让鼠标滚轮不对下拉框的值造成影响 如下代码直接拷贝粘贴,不用修改 方法一: ...
- [开发笔记]-“在引用COM组件时,出现了无法嵌入互操作类型。。。”的错误
这两天在做一个需要将wps文档转换成word文档的程序,在调用wps的com组件时项目编译是没有问题的,但当运行的时候却弹出了下面的错误提示: 从网上百度一番后,找到了正确的解决方法. 先从Com组件 ...
- 常见的Web负载均衡方法
用户手动选择 通过在主站首页入口提供不同线路,不同服务器链接的方式,来实现负载均衡.在一些提供下载业务的网站中比较常见,如:华军软件园. DNS轮询 大多域名注册商都支持对同一主机名添加多条A记录,这 ...
- poj 1742 Coins (动态规划,背包问题)
Coins Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 32977 Accepted: 11208 Descripti ...