支持向量机(SVM)
来源:互联网 发布:管理学培训课程网络 编辑:程序博客网 时间:2024/06/03 02:26
综述
支持向量机(Support Vector Machines), 是一种二分类模型.也可以通过技巧,转化为多分类模型.比如说libSVM中就使用了one-against-one的策略使得SVM能够扩展到多分类.而libLiner则使用了one-against-rest的策略来扩展SVM.
支持向量机的基本模型: 定义在特征空间上的间隔最大化的线性分类器(间隔最大化也使得SVM区别于感知机).
学习策略: 间隔最大化.
学习算法: 求解凸二次规划的最优化算法. 其中一种快速学习算法,叫做序列最小最优化算法(SMO).
支持向量机可以从简到繁分为三大类,分别适用于三种不同的场景.
- 线性可分支持向量机(linear support vector machine in linearly separable
case)
适用于待分类数据线性可分的情况.能够得到唯一的最大间隔分离超平面.故又称为硬间隔支持向量机. - 线性支持向量机(linear support vector machine)
适用于待分类数据近似线性可分的情况.除少数点之外的大部分数据,都是线性可分时,通过软间隔最大化策略,可以学习到一个线性分类器.故又称为软间隔支持向量机. - 非线性支持向量机(non-linear support vector machine)
适用于待分类数据线性不可分的情况.通过核技巧再加上软间隔最大化,可以学习到一个非线性支持向量机,
第一章: 线性可分支持向量机
1.1 概述
考虑一个二分类问题.比如说,一个平面上,以一条直线为界,直线之上的部分属于正类,直线之下的部分属于负类.
如上图所示,红色直线之上的所有黄色点,均属于正类;红色直接之下的所有绿色点,均属于负类.每一个点,可以用坐标来表示.
则,所有数据,可以由两部分来完整的表达.第一部分就是其坐标,第二部分就是其所属类别.
上图所示为2维空间.我们将其推广到n维空间,每一个点的坐标可以记为
假设,给定一个特征空间上的训练数据集,
其中,
一般而言,线性可分的数据,可以有无数条分离超平面(即上诉红色直接)将两者分开.即感知机就是这样,感知机是不唯一的.SVM采用间隔最大化策略,可得到唯一分离超平面.
1.2 间隔的度量
既然要将间隔最大化,那么就出现一个问题,间隔如何来度量呢?这个时候就要引入两种间隔度量方式:函数间隔和几何间隔.
在以前的高中数学知识中,我们应该知道,点到直线的距离是如何求解的.
假设,现在有一条直线l,直线解析式为:
其中
则,A点到直线的距离:
显然,
其中, ω为原直线的法向量, 原直线可由(ω,b)确定.
若A被正确分类,当A属于正类时,
上式就成为几何间隔.其本质就是点到直线(或超平面)的距离.
而
称为函数间隔.
1.3 线性支持向量机(硬间隔)求解
由直线的点法式方程可知,当(ω,b)同时扩大n(n>0)倍时,直线方程未改变,几何间隔也不会改变,而上诉函数间隔同时会扩大n倍.由上也可知函数间隔是几何间隔的‖ω‖倍.
弄清楚了间隔的问题,这个时候需要来推导间隔最大化问题.我们以
s.t.
由函数间隔与几何间隔的关系,上式可以改写成:
s.t.
如上,将几何间隔最大化问题转化为函数间隔最大化问题.由之前分析可知,当(ω,b)同时扩大或缩小n倍时,
s.t.
上诉最优化问题就改写为一个凸二次规划问题了.就可以用最优化理论中各种求解凸二次规划算法来求解.求解出来最优解:
则线性可分支持向量机的分离超平面:
分类决策函数:
其中
1.4 支持向量
最后,我们得讲一讲支持向量机的名称由来.由上可知,我们的策略是寻求一个间隔最大的分离超平面.而间隔最大,就意味则,让距离最近的两个(或多个)不同类的点分别与分离超平面的距离最大,而与别的距离超平面较远的点没有太大关系.换句话说,就是大量数据中的极个别点决定的分离超平面.说到这儿,线性可分支持向量机也可以用这个办法得到其分离超平面,即找出距离最近的两个点,然后做一条连线,分离超平面就是过连线的中点并且垂直于连线的那个平面(这都是题外话了,因为实际使用的过程中,几乎不可能这样做的.效率太低,而且大部分情况数据都是线性不可分的).
通过上诉分析,我们可以得出一个结论.就是SVM是由极个别的特征向量确定的.而这些特征向量我们就成为支持向量(Support Vector). 在上诉最简单的情况下,支持向量就是函数间隔等于1的那些特征向量.
第二章: 线性支持向量机
2.1 线性支持向量机的求解
根据上诉章节所分析的内容, 我们将SVM的最终求解归结到求解一个凸二次规划问题.
s.t.
而上诉问题是在数据线性可分的情况下讨论的,即存在一张超平面能够绝对的将两类数据分在不同侧.
一般而言,实际运用中,很少有这么漂亮的数据,让你能够一刀将他们分开.其中难免会有少数数据是线性不可分的.就是你怎么切,都不能将所有数据分到不同侧.
如果SVM连这种问题都解决不了,那么SVM也就不会像现在这么火,被大家都拿来当神器的一样用了.
针对于那个个别的线性不可分的点又称为奇异点(outlier),我们引入松弛变量ξ来使之满足函数间隔大于等于1的条件.
s.t.
其中C是正则项(或者叫做惩罚项), 其含义有两点:
- 使得
12||ω||2 尽可能的小,即间隔尽量大. - 使得误分类点尽量小
C增大时对误分类的惩罚就越大, C增小时对误分类的惩罚就越小.
上诉问题也是一个凸二次规划问题,其最优解(ω,b,ξ)是存在的.其中ω的解唯一, b的解将会属于某个区间.
线性支持向量机的分离超平面方程:
分类决策函数:
其中
2.2 支持向量
关于线性支持向量机的支持向量,显然,将会比线性可分支持向量机会多一些,因为其中奇异点对分离超平面也是有决定作用的.
如上图所示,其中
第三章: 非线性支持向量机
3.1 概述
前面两章都只是铺垫,针对于实际运用中,前面两类SVM是很少用到的.而SVM正是由于该类的出现,才能够真正的广泛运用起来.
前面我们提到了线性可分,近似线性可分.而现实中,很多数据,是线性不可分的.
如上图所示,这样的数据,无论你刀法再好,也玩不出花儿来,都不能把他们一刀切开.一般而言,在低维度线性不可分的数据,再高纬度下,是能够线性可分的,或者进行一定的坐标变换,是能够将数据变换到一个线性可分的空间内的.
比如说上图,显然是存在一个椭圆能够将其区分开来.令该椭圆的解析式:
一般而言,用线性分类方法求解非线性可分分类问题的思路如下:
- 使用一个变换将原空间内线性不可分数据映射到线性可分的新空间;
- 在新空间内用前两章节方法学习一个线性分类模型
3.2 核技巧
核技巧就是完成上诉思路中第一条.核函数定义如下:
设X是输入空间(欧式空间
使得对所有x,z∈X,函数K(x,z)满足:
则称K(x,z)为核函数,其中ϕ(x)是映射函数.
实际使用中,直接计算核函数是比较容易的,但是想通过映射函数来计算核函数就比较难.并且,给定一个核函数,可能存在多组映射函数和特征空间与之对应.
3.3 对偶问题
由第二章最终的结果可以看到,其中想直接利用核函数是非常困难的.
s.t.
从上面的式子中我们是看不到有什么核函数的影子.所以下面我们需要引入该问题的对偶问题.为每一个不等式引入一个拉格朗日参数
原问题就变换为求上式中
我们首先求朗日函数
则,我们可以等到三个等式关系.
注意到一点, ω的向量二范数的平方
由上:
由:
可得:
则:
由上诉推导可知,原问题:
s.t.
等价于:
s.t.
上诉最优化问题还能继续化简:
s.t.
上诉最优化问题即为原问题的对偶问题.显然,其中
假设
带入到分类决策函数即可得到最终SVM的分类决策函数.
3.4 核技巧的运用
由上式对偶最优化问题可以看到,其中最大的一个特色是,其数据的特征向量均是已内积的形式出现.如果存在一个映射函数
其中K(x_i,x_j)是核函数.假设最优解
分离超平面:
分类决策函数:
其中,
前述中提到”直接计算核函数是比较容易的,但是想通过映射函数来计算核函数就比较难.”,则通过对偶问题来求解,就很好的避开了通过映射函数求解核函数的问题.直接将核函数带入到上诉最优化问题,然后对其求最优解即可.
3.5 常用核函数
常用的核函数总结如下:
- 线性核函数(liner kernel function)
K(xi,xj)=xi⋅xj - 多项式核函数(polynomial kernel function)
K(xi,xj)=(xi⋅xj+b)p - 高斯核函数(Gaussian Kernel function),即径向基核函数(RBF)
K(xi,xj)=exp(||xi−xj||22σ2) - sigmoid
K(xi,xj)=tanh(σ⋅(xi⋅xj)+b)
第四章 实现
OpenCV中有SVM的实现,熟悉OpenCV的朋友应该知道.另外,在很多地方比较常用的库还有LibSVM和LibLinear这两个.比如说,BING源代码中,使用用于训练与预测的SVM库就是LibLinear.LibSVM也是一个非常牛逼的SVM库.运用也非常得多.这些在作者网站上都能够免费下载得到.
LibSVM下载: http://download.csdn.net/detail/sunbibei/9172479
LibLinear官网: http://www.csie.ntu.edu.tw/~cjlin/liblinear/
- 支持向量机SVM
- SVM支持向量机
- svm支持向量机
- SVM支持向量机
- [SVM]支持向量机
- SVM 支持向量机
- 支持向量机SVM
- SVM 支持向量机
- svm支持向量机
- 支持向量机SVM
- svm支持向量机
- SVM (支持向量机)
- SVM支持向量机
- SVM支持向量机
- 支持向量机SVM
- 支持向量机(SVM)
- 支持向量机-SVM
- 支持向量机SVM
- Trump成功笔记9
- 深入理解RunLoop
- 设计模式——简单工厂模式
- OBIEE分析开发-条形图注意点
- day01
- 支持向量机(SVM)
- java动态代理(JDK和cglib)
- charles中如何对https抓包
- appcompat_v7库导入出错的解决办法
- heap
- pycharm-professional-4.5.4 注册码 破解
- 第三方QQ登录、获取用户质料
- 黑马程序员——【学习笔记】多线程——线程间通讯
- Pylearn2学习(一)