<>一、简介
支持向量机(support vector
machines)是一种二分类模型,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,最终转化为一个凸二次规划问题来求解。由简至繁的模型包括:
* 当训练样本线性可分时,通过硬间隔最大化,学习一个线性可分支持向量机;
* 当训练样本近似线性可分时,通过软间隔最大化,学习一个线性支持向量机;
* 当训练样本线性不可分时,通过核技巧和软间隔最大化,学习一个非线性支持向量机;
<>二、线性可分支持向量机
1、间隔最大化和支持向量
如果一个线性函数能够将样本分开,称这些数据样本是线性可分的。那么什么是线性函数呢?其实很简单,在二维空间中就是一条直线,在三维空间中就是一个平面,以此类推,如果不考虑空间维数,这样的线性函数统称为
超平面
。我们看一个简单的二维空间的例子,O代表正类,X代表负类,样本是线性可分的,但是很显然不只有这一条直线可以将样本分开,而是有无数条,我们所说的线性可分支持向量机就对应着能将数据正确划分并且
间隔最大的直线。
下面我们开始计算间隔,其实间隔就等于两个异类支持向量的差在 w 上的投影,即:
其中 x⃗+{{\vec{x}}_{+}}x+ 和 x⃗−{{\vec{x}}_{-}}x− 分别表示两个正负支持向量,因为 x⃗+
{{\vec{x}}_{+}}x+ 和 x⃗−{{\vec{x}}_{-}}x− 满足 yi(wTxi+b)=1
{{y}_{i}}({{w}^{T}}{{x}_{i}}+b)=1yi(wTxi+b)=1,即:
,
推出:
,
代入公式(4)中可以得到:
至此,我们求得了间隔,SVM的思想是使得间隔最大化,也就是:
显然,最大化 2∣∣w∣∣\frac{2}{||w||}∣∣w∣∣2 相当于最小化 ||w||,为了计算方便,将公式(6)转化成如下:
公式(7)即为支持向量机的基本型。
2、对偶问题
公式(7)本身是一个凸二次规划问题,可以使用现有的优化计算包来计算,但我们选择更为高效的方法。对公式(7)使用拉格朗日乘子法得到其对偶问题,该问题的拉格朗日函数可以写为:
公式(8)分别对 w 和 b求偏导:
令其分别为0,可以得到:
将公式(9)(10)代入公式(8),可得:
此时,原问题就转化为以下仅关于 $\alpha $ 的问题:
解出 $\alpha $ 之后,根据公式(9)可以求得 w , 进而求得 b,可以得到模型:
上述过程的KKT条件为:
我们分析一下,对于任意的训练样本 (xi,yi)({{x}_{i}},{{y}_{i}})(xi,yi),
* 若 αi=0{{\alpha }_{i}}=0αi=0,则其不会在公式(13)中的求和项中出现,也就是说,它不影响模型的训练;
* 若 αi>0{{\alpha }_{i}}>0αi>0,则 yif(xi)−1=0{{y}_{i}}f({{x}_{i}})-1=0yi
f(xi)−1=0,也就是 yif(xi)=1{{y}_{i}}f({{x}_{i}})=1yif(xi)=1,即该样本一定在边界上,是一个支持向量。
这里显示出了支持向量机的重要特征:当训练完成后,大部分样本都不需要保留,最终模型只与支持向量有关。
<>三、非线性支持向量机和核函数
对于非线性问题,线性可分支持向量机并不能有效解决,要使用非线性模型才能很好地分类。先看一个例子,如下图,很显然使用直线并不能将两类样本分开,但是可以使用一条椭圆曲线(非线性模型)将它们分开。非线性问题往往不好求解,所以希望能用解线性分类问题的方法求解,因此可以采用非线性变换,将非线性问题变换成线性问题。
对于这样的问题,可以将训练样本从原始空间映射到一个更高维的空间,使得样本在这个空间中线性可分,如果原始空间维数是有限的,即属性是有限的,那么一定存在一个高维特征空间是样本可分。令
ϕ(x)\phi (x)ϕ(x)表示将 x 映射后的特征向量,于是在特征空间中,划分超平面所对应的的模型可表示为:
f(x)=wTϕ(x)+bf(x)={{w}^{T}}\phi (x)+bf(x)=wTϕ(x)+b (14)
于是有最小化函数:
其对偶问题为:
若要对公式(16)求解,会涉及到计算 ϕ(xi)Tϕ(xj)\phi {{({{x}_{i}})}^{T}}\phi ({{x}_{j}})ϕ(xi)Tϕ
(xj),这是样本 xi{{x}_{i}}xi 和 xj{{x}_{j}}xj
映射到特征空间之后的内积,由于特征空间的维数可能很高,甚至是无穷维,因此直接计算ϕ(xi)Tϕ(xj)\phi {{({{x}_{i}})}^{T}}\phi
({{x}_{j}})ϕ(xi)Tϕ(xj)通常是困难的,于是想到这样一个函数:
即 xi{{x}_{i}}xi 和 xj{{x}_{j}}xj 在特征空间中的内积等于他们在原始样本空间中通过函数 κ(xi,xj)\kappa
({{x}_{i}},{{x}_{j}})κ(xi,xj) 计算的函数值,于是公式(16)写成如下:
求解后得到:
这里的函数 κ(xi,xj)\kappa ({{x}_{i}},{{x}_{j}})κ(xi,xj)
就是核函数,在实际应用中,通常人们会从一些常用的核函数里选择(根据样本数据的不同,选择不同的参数,实际上就得到了不同的核函数),下面给出常用的核函数:
*
线性核:
*
多项式核(d是多项式的次数,d=1是退化为线性核):
*
高斯核(σ>0\sigma >0σ>0):
*
拉普拉斯核(σ>0\sigma >0σ>0):
*
sigmiod核(β>0,θ>0\beta >0,\theta >0β>0,θ>0):
此外,核函数也可以通过组合得到,在此不再赘述。
<>四、线性支持向量机(软间隔支持向量机)与松弛变量
1、线性支持向量机
在前面的讨论中,我们假设训练样本在样本空间或者特征空间中是线性可分的,但在现实任务中往往很难确定合适的核函数使训练集在特征空间中线性可分,退一步说,即使瞧好找到了这样的核函数使得样本在特征空间中线性可分,也很难判断是不是由于过拟合造成。
线性不可分意味着某些样本点 (xi,yi)({{x}_{i}},{{y}_{i}})(xi,yi)
不能满足间隔大于等于1的条件,样本点落在超平面与边界之间。为解决这一问题,可以对每个样本点引入一个松弛变量ξi≥0{{\xi }_{i}}\ge 0ξi≥0
,使得间隔加上松弛变量大于等于1,这样约束条件变为:
同时,对于每一个松弛变量 ξi≥0{{\xi }_{i}}\ge 0ξi≥0,支付一个代价 ξi≥0{{\xi }_{i}}\ge 0ξi≥0
,目标函数变为:
其中 C>0C>0C>0为惩罚参数,C值大时对误分类的惩罚增大, C值小时对误分类的惩罚减小,公式(21)包含两层含义:使 12∣∣w∣∣2
\frac{1}{2}||w|{{|}^{2}}21∣∣w∣∣2 尽量小即间隔尽量大,同时使误分类点的个数尽量小,C是调和两者的系数。
有了公式(21),可以和线性可分支持向量机一样考虑线性支持向量机的学习过程,此时,线性支持向量机的学习问题变成如下凸二次规划问题的求解(原始问题):
2、对偶问题
与线性可分支持向量机的对偶问题解法一致,公式(22)的拉格朗日函数为:
其中 αi≥0,μi≥0{{\alpha }_{i}}\ge 0,{{\mu }_{i}}\ge 0αi≥0,μi≥0 是拉格朗日乘子。
令 L(w,b,α,ξ,μ)L(w,b,\alpha ,\xi ,\mu )L(w,b,α,ξ,μ) 对 $w,b,\xi $的偏导数为0可得如下:
将公式(24)(25)(26)代入公式(23)得对偶问题:
解出 $\alpha $ 之后,根据公式(9)可以求得 w , 进而求得 b,可以得到模型:
。
上述过程的KKT条件为:
我们分析一下,对于任意的训练样本 (xi,yi)({{x}_{i}},{{y}_{i}})(xi,yi) ,总有 αi=0{{\alpha
}_{i}}=0αi=0 或者 yif(xi)−1+ξi=0{{y}_{i}}f({{x}_{i}})-1+{{\xi }_{i}}=0yif(xi)−1
+ξi=0 。
* 若 αi=0{{\alpha }_{i}}=0αi=0 ,则该样本不出现在公式(13)中,不影响模型。
* 若 αi>0{{\alpha }_{i}}>0αi>0,必有 yif(xi)−1+ξi=0
{{y}_{i}}f({{x}_{i}})-1+{{\xi }_{i}}=0yif(xi)−1+ξi=0 ,即 yif(xi)=1−ξi
{{y}_{i}}f({{x}_{i}})=1-{{\xi }_{i}}yif(xi)=1−ξi ,此时该样本为支持向量。
由于 C=αi+μiC={{\alpha }_{i}}+{{\mu }_{i}}C=αi+μi (公式26)
* 若 αi<C{{\alpha }_{i}}<Cαi<C, 则必有 μi>0{{\mu }_{i}}>0μi>0
,根据公式(28)知ξi=0{{\xi }_{i}}=0ξi=0 ,即该样本恰好落在最大间隔的边界上;
* 若 αi=C{{\alpha }_{i}}=Cαi=C ,则 μi=0{{\mu }_{i}}=0μi=0,此时若 ξi≤1{{\xi
}_{i}}\le 1ξi≤1 则该样本在最大间隔内部,若 ξi>1{{\xi }_{i}}>1ξi>1 则样本分类错误。
<>五、总结
至此,关于SVM的三类问题:线性可分支持向量机与硬间隔最大化,非线性支持向量机与核函数,线性支持向量机与软间隔最大化一一介绍完毕,最后附上博主 Duanxx
对SVM使用范围的一段总结:
我们所面对的所有的机器学算法,都是有适用范围的,或者说,我们所有的机器学习算法都是有约束的优化问题。而这些约束,就是我们在推导算法之前所做的假设。
比如:Logistics Regression,在Logistics Regression中,假设后验概率为Logistics
分布;再比如:LDA假设fk(x)fk(x)是均值不同,方差相同的高斯分布;这些都是我们在推导算法之前所做的假设,也就是算法对数据分布的要求。
而对于SVM而言,它并没有对原始数据的分布做任何的假设,这就是SVM和LDA、Logistics
Regression区别最大的地方。这表明SVM模型对数据分布的要求低,那么其适用性自然就会更广一些。如果我们事先对数据的分布没有任何的先验信息,即,不知道是什么分布,那么SVM无疑是比较好的选择。
但是,如果我们已经知道数据满足或者近似满足高斯分布,那么选择LDA得到的结果就会更准确。如果我们已经知道数据满足或者近似满足Logistics
分布,那么选择Logistics Regression就会有更好的效果。
如有问题,欢迎批评指正~
热门工具 换一换