SVM支持向量机详解

支持向量机(support vector machines, SVM)是二分类算法,所谓二分类即把具备多个特性(属性)的数据分为两类,目前主流机器学习算法中,神经网络等其余机器学习模型已经能很好完成二分类、多分类,学习和研究SVM,理解SVM背后丰富算法知识,对之后研究其余算法大有裨益;在实现SVM过程当中,会综合利用以前介绍的一维搜索、KKT条件、惩罚函数等相关知识。本篇首先经过详解SVM原理,后介绍如何利用python从零实现SVM算法。python

    为便于理解,假设样本有两个属性,能够把属性值分别对应到二维空间轴的x,y轴上,以下图所示:算法

二维坐标.png

实例中样本明显的分为两类,黑色实心点不妨为类别一,空心圆点可命名为类别二,在实际应用中会把类别数值化,好比类别一用1表示,类别二用-1表示,称数值化后的类别为标签。每一个类别分别对应于标签一、仍是-1表示没有硬性规定,能够根据本身喜爱便可,须要注意的是,因为SVM算法标签也会参与数学运算,这里不能把类别标签设为0。网络

    仍是对应于上图,若是能须要找到一条直线,将上述的实心点与空心点分为两个部分,当下次还有其余样本点时,将其属性值做为坐标绘制到坐标轴上后,根据新样本点与直线位置关系,就能够判断出其类别。知足这样直线有无数条,SVM是要找到最合适一条:观察上图,绿线确定不行,该条分类直线在没有验证集前提下已经错了;而蓝色线和红色均可以实现分类,蓝色线与实心黑点靠的太近,相比而言,红色线更‘公允’些。红色线就是SVM须要找出的分类直线,数学语言描述红线的‘公允’特性可表述为:将黑点和空心点视为两个集合,若是找到一个直线,使得黑点集合中的一些点离直线最近,这些点到该直线距离为d;空心点集合中也能找到一系列的点,离直线最近,距离一样也是d,则该直线就是咱们要找到线性分类器,同时称两个集合中离直线最近的点为支持向量,SVM支持向量机就是由此得名的。koa

    一些算法书籍中这样描述SVM算法,找出一个直线,使得直线与两边集合最近的点的间隔空间最大,从上图也能够看出来,黑色点离蓝线最近的点,其距离小于到红线距离(直角的斜边)。能找到支持向量就必定找到分类直线,反之亦然,以上是针对两个属性值,经过观察二维平面便可以引出SVM的算法的特色,若是样本属性很是多呢,如何概括算法的规律性?首先说下凸集可分离定理,该定理不只是SVM的核心理论支持,更是机器学习算法的基石。机器学习

1、凸集可分离定理函数

    仍是以二维空间为例,中学时代咱们就学过直线方程,好比有直线方程y=2x-1,以下图所示:学习

超平面.png

把直线方程y=2x-1写成内积形式:优化

内积一.gif

向量(-2,1)对应上图中OA向量,把OA向量变为单位向量,即方向与OA相同,模为1向量OS,S的坐标为 坐标1.gif,将直线方程两边同除以52.gif,可得:url

内积一.gif

(x,y)表明直线y=2x-1上任意一点,上式说明y=2x-1上任意一点与单位向量S:坐标1.gif的内积是标准内积1.gif,图中向量OP的长度为标准内积3.gif,取负号是由于OP向量方向与OS方向相反;上图中向量v一、v2在OS向量上投影都是OP,这个例子说明:经过引入一个向量OS,直线y=2x-1上无数的点在向量OS上均可以用标准内积1.gif来表示,或者说,直线y=2x-1在向量OS上均可以用坐标(0,标准内积1.gif)表示。经过内积投影的方式,能够把高维数据变为向量上一个实数,这是一个线性泛函的过程,数学领域中经常使用内积来下降数据维度,把多维数据处理成一个实数便于后期分析、处理。spa

    引伸到任意维度时,上面方程可用集合公式表达:S:{x | pTx=α}  x∈Rn。对应于上图:p向量对应向量OS,x为直线上任意一点,在SVM算法中,称x点构成的集合S为超平面。有时高维数据集合投影到向量p的内积值是一个范围:好比{x | pTx>=α}或{y | pTy<=-α},高维数据被投影到向量p的两个区间上:

凸集.png

接下来介绍凸集分离定理:

上图中X,Y在高维空间中都是凸集,且X∩Y=Φ;将X、Y投影到向量p上后,能够获得两个凸集X',Y',在向量p上X'、Y'必定处在向量p的两端,即X',Y'两个凸集是可分离的。

    注意定理中有两个条件,一是X,Y是凸集,二是X,Y交集为空集。X',Y'可分离意味着在向量p上能够将二者区分开,而X与X'、Y与Y'都是一一映射,X',Y'可区分开就间接地意味着X,Y也可区分开,这里所谓的'可区分开'也就是SVM所要实现的二分法。凸集可分离定理说明两个没有交集的凸集是线性可分的,同时,若是两个数据集不能线性分开时,能够经过核函数将数据变为两个凸集,因此凸集可分离定理对核函数生成也有着指导意义。

2、 SVM算法

2.1 超平面与最大间隔

    前面介绍过,能把数据实现二分类的线性分类器称为超平面,SVM算法须要求出最大间隔的超平面,可设超平面为S:{x|pTx=α},因为pTx=α等式两边可除以一个正数就能够把p归一化为单位向量,不妨设p是一个已经处理后的单位向量,此设定不影响SVM算法。通常文献中,超平面一般写成隐函数形式:

S:{x|pTx-α=0}   x∈Rn,p∈Rn,||p||=1

由几何知识可知,空间任意一点x到超平面S的距离公式为:

距离公式.gif

属于两个分类的支持向量到该超平面的距离都为d , d>0,因为支持向量是各自分类数据中,距离超平面最近的点,针对全部数据有如下不等式:

    条件.gif      ⑴

公式(1)两边同除以d,可得: 处理1.gif ,使用换元法,令:

设定2.gif                               ⑵

这样就获得约束条件常见形式:

条件3.gif                             ⑶

接下来要把公式(3)脱掉绝对值符号,SVM是一个二分类问题:可设定ωTx+b>=1时分类标签y=1;ωTx+b<=-1时分类标签y=-1,这样一来,全部的数据都有不等式:

y(ωTx+b)>=1                  ④

再回过头来看换元设定,ω=pT/d,等式两边取范数运算有:||ω||=||pT||/d=1/d,可得d=1/||ω||,SVM算法须要在知足公式4约束的基础上,使得间隔距离d最大。假设待分类数据共有m个,实现SVM算法等同于求解一个带有不等式约束的非线性规划问题:

svm线性规划.png

上面的问题也能够表述为求最小值的问题:

svm线性规划22.png ⑤

超平面实现分类效果、以及各个参数之间关系可参考下图:

1608295305531001632.png

2.2 最大软间隔

    实践中因为异常数据的存在,致使超平面不能彻底将数据分为两部分,以下图:

软间隔1.png

两个分类中混杂了少许的异常数据,除去极少数的异常点,上图中超平面能分离大多数样本。⑤式引入松弛变量后能够兼容上图的情形:

松弛变量.png(5.1)

软间隔.jpg

xi.gif正常状况下等于0,表示样本点分列在支持向量的两侧;xi.gif>0时表明的是异常数据当0<xi.gif<1时,表明数据在超平面与支持向量之间,如上图中的点2和点4;而xi.gif>1时表明数据到了对方空间中,如上图的点1和点3。知足(5.1)式的间隔称为软间隔,软间隔优化结果不只须要支持向量的间隔最大,还要使得各个xi.gif尽可能的小换句话说超平面肯定后,被定义为异常数据的样本个数要尽可能的少。

3、求解带约束的非线性规划问题

    SVM算法最后归结为求解式(5),这是一个有约束的非线性规划问题,接下来经过两种方法求解,一种方案是利用以前介绍惩罚函数,优势是简单直接容易理解,不受约束条件数量的限制;另外一种方案是数学解析法,其原理是拉格朗日对偶原理的应用,计算中涉及到对偶问题、鞍点、SMO算法等,解析法是一种理论性较强方法。

 

3.1 拉格朗日对偶 

3.1.1 对偶问题

    为后期求导方便,将公式(5)的目标函数f(ω)改成:

fw2.gif

乘以一个正数后与以前优化问题是等效的,新的目标函数与约束条件合成一个函数L(ω,b,α):

拉格朗日2.png

L(ω,b,α)称为拉格朗日函数,因为yi(ωTxi+b)-1>=0,αi≥0,在可行区内恒有L(ω,b,α)<=f(ω),若有常数ω*,b*,α*知足下面关系:

L(ω*,b*,α)<=L(ω*,b*,α*)<=L(ω,b,α*)  ⑥

称ω*,b*,α*是L(ω,b,α)函数的鞍点,此时ω*,b*是原问题的最优解。观察⑥式,L(ω*,b*,α)是仅含有参数α的函数,产生这个函数的过程是:ω,b分别取不一样的值,代入L(ω,b,α)后获得一系列参数为α的函数簇Φ,当ω=ω*,b=b*时,函数L(ω*,b*,α)是函数簇Φ中下界函数,图像上看,L(ω*,b*,α)在函数簇Φ全部函数的下方,L(ω*,b*,α)函数可用θ(α)=inf{L(ω,b,α)}表示,inf意为取得函数簇Φ的下界,当α=α*时,函数θ(α)有最大值,即L(ω*,b*,α)<=L(ω*,b*,α*);而α取不一样值代入L(ω,b)后获得一系列参数为ω,b的函数簇Ψ,L(ω,b,α*)表明函数簇Ψ的上界函数,公式表示:φ(ω,b)=L(ω,b,α*)=sup{L(α)},当ω=ω*,b=b*时φ(ω,b)有最小值L(ω*,b*,α*)。

    ⑥式不等式形式称为弱对偶条件,当取等号时,L(ω*,b*,α*)是θ(α)函数最大值,同时也是φ(ω,b)函数最小值,此时为强对偶条件。SVM默认是知足强对偶条件的,知足强对偶条件时,max{θ(α)}=L(ω*,b*,α*)=min{f(ω)} ,也称下面的⑦与⑤是拉格朗日对偶问题:

max : θ(α)=inf{L(ω,b,α)}        

s.t. α>=0     ⑦

上面过程没有给出鞍点就是K-T点证实、强对偶成立的条件,可参考相关资料详细研究,拉格朗日函数鞍点示意图以下:

鞍点.png

上图中红色虚线表明ω,b分别取不一样的值,代入L(ω,b,α)后获得一系列参数为α的函数簇Φ,绿色点表明函数簇Φ中每一个函数最大值;绿色虚线为α取不一样值代入L(ω,b,α)后获得一系列参数为ω,b的函数簇Ψ,红色点表明函数簇Ψ中每一个函数最小值。显然函数簇Φ中下界函数θ(α)的最大值、函数簇Ψ上界函数φ(ω,b)的最小值,两点重合,该点为拉格朗日鞍点。

    求⑦最大值时首选要知道函数θ(α)的具体形式,已经知道,θ(α)是函数簇Φ的下界函数,函数簇Φ是把L(ω,b,α)中α视为符号常量、ω,b视为变量,那么求L(ω,b)最小值时,求导等于0时,ω,b都将是α函数,将ω,b代入L(ω,b,α)中便可获得θ(α)。

求导1.png

我.png                                  (7.1)

求导二.png                    (7.2)

(7.1)代入拉格朗日函数L(ω,b,α)可得:

代入.png

因为 等于0.gif ,因此上式可化为:

θ(α)=theta.png ⑧

求 max:θ(α)便可获得SVM的最优解,⑧是一个二次凸优化问题,求解⑧通用办法是利用SMO算法。

3.1.2 SMO算法

    介绍SMO算法以前,先结合软间隔定义(5.1)式看看参数αi除了知足(7.1)、(7.2)还有其余哪些特性。软间隔要求间隔最大基础上,松弛变量xi.gif整体要小,即获得超平面以后,被定义为异常数据样本数量要尽可能的少。按照这个定义生成新的拉格朗日函数:

拉格朗日2.png(8.1)

求解上式最小值的过程当中,逐渐增大C将使xi.gif值变小,C是惩罚系数。按照对偶函数思想,为获得下界函数θ(α),先对其余参数求偏导获得如下等式组:

约束条件1.png

条件前两个结果以前已经推导过,最后一个条件说明0≤αi≤C。

   SMO算法用坐标上升法来实现参数优化,该方法在以前文章中介绍过,详细可参考连接:梯度降低法。简略回顾下,坐标上升法选择一个参数vi同时固定并初始化其余变量,目标函数此时变为vi的函数,求导并置零后,vi变为其余固定变量的函数,代入初始值后,获得vi优化值,再切换到下一个变量,重复以上操做直至函数值收敛,获得最优解。

    因为有条件条件2.gif存在,若选择αi之外的变量固定,αi必定是个常量,因此SMO算法一般一次取两个变量后固定其他的变量。不妨设先取α1 、α2(注意,下标1和2不表明第一个样本和第二个样本),此时其余变量被初始化而固定,获得如下等式:

a12.gif    

上式中ζ是一个常数,上式代入到⑧式中,目标函数θ(α)变为只含有α2的函数:

1610453905611058385.png

K(xi,xj)表明利用核函数求两个样本向量的泛函,本篇中K是个内积函数,求θ(α2)的梯度:

求导1.png

在α2初始值基础上,沿着梯度方向前进是最大值方向,这样就获得α2新的值:

new.gif           

获得α2新的值后接下来求α新的值:

等式2.png (10.1)

经过公式⑩获得α2新的值,实质是沿着梯度方向前进,且步长为1,若是读者了解一维搜索算法,能看出这里步长应该是计算出来的,不能盲目直接设置为1。步长系数的肯定,在SMO算法中体现为对α一、α2新值的进一步裁剪。再回过头来看公式⑨,根据y1,y2是否同号,α一、α2会有如下两种线性关系:

y1≠y2时:α1-α2=k

y1=y2时:α1+α2=k

根据k为正负状况,以上两种线性关系可用下图表示:

边界.png

 

余下文章请点击连接    SVM详解

​​

相关文章
相关标签/搜索