支持向量机

Posted yijuncheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了支持向量机相关的知识,希望对你有一定的参考价值。

1. 间隔与支持向量

数据集$D = { ({{f{x}}_1},{y_1}),({{f{x}}_2},{y_2}),...,({{f{x}}_m},{y_m})} $,其中${{f{x}}_i} = { {x_{i1}},{x_{i2}},...,{x_{id}}} $,包含d维特征,${y_i} in {  - 1, + 1} $。

分类学习就是在样本空间里找到一个超平面,能够分离开“+”、“-”两类。如下图所示,在二维特征的样本空间里,找到一条线能够分离开两类。但是针对该数据集D,这样的线可能有很多,我们应该用哪一个呢?直观上看,应该是正中间加粗的那条线是“最合适”的线,对训练集D局部扰动的“容忍”性最好。换言之,这个划分超平面所产生的分类结果是最鲁棒的,对未见示例的泛化能力最强. 

技术分享图片

该超平面可通过线性方程来描述,${{f{omega }}^T}{f{x}} + b = 0$,该超平面记为$({f{omega }},b)$。

假设超平面$({f{omega }},b)$能将训练样本正确分类,即对于$({{f{x}}_i},y_i) in D$,若$y_i = +1$,则有${{{f{omega }}^T}{{f{x}}_i} + b}>0$,若$y_i = -1$,则有${{{f{omega }}^T}{{f{x}}_i} + b}<0$。令,

$left{ {egin{array}{*{20}{c}}
{{{f{omega }}^T}{{f{x}}_i} + b ge + 1,{y_i} = + 1}\\
{{{f{omega }}^T}{{f{x}}_i} + b le - 1,{y_i} = - 1}
end{array}} ight.$

 技术分享图片

距离超平面最近的这几个训练样本点(如上图中被圈出来的三个样本点)等号成立,被称为"支持向量" (support vector),两个异类支持向量到超平面的距离之和为 $gamma  = frac{2}{{left| {f{omega }} ight|}}$,称为“间隔”。

我们希望在满足样本约束${y_i}({{f{omega }}^T}{{f{x}}_i} + b) ge 1$的条件下,找到具有最大间隔的划分超平面$mathop {max }limits_{{f{omega }},b} frac{2}{{left| {f{omega }} ight|}}$。

支持向量机的基本型如下,

$egin{array}{l}
mathop {min }limits_{{f{omega }},b} frac{1}{2}{left| {f{omega }} ight|^2}\\
{ m{s}}{ m{.t}}{ m{. }}{y_i}({{f{omega }}^T}{{f{x}}_i} + b) ge 1,i = 1,2,...,m
end{array}$

2. 对偶问题

我们希望求解支持向量机基本型的最小化问题,来得到大间隔划分超平面所对应的{+1,-1}二分类模型

$f({f{x}}) = {{f{omega }}^T}{f{x}} + b$

怎么求这个凸优化问题,求得最优模型参数$f{omega }, b$呢?

我们对每条约束引入拉格朗日乘子$alpha_i ge 0$,则该问题的拉格朗日函数可写为,

$L({f{omega }},b,{f{alpha }}) = frac{1}{2}{left| {f{omega }} ight|^2} + sumlimits_{i = 1}^m {{alpha _i}left( {1 - {y_i}left( {{{f{omega }}^T}{{f{x}}_i} + b} ight)} ight)} $

该优化问题表示为,

$mathop {{ m{min}}}limits_{{ m{w,b}}} mathop {max }limits_{{alpha _i} ge 0} L(w,b,alpha )$

转化为对偶问题,

$mathop {max }limits_{{alpha _i} ge 0} mathop {{ m{min}}}limits_{{ m{w,b}}} L(w,b,alpha )$

求$L({f{omega }},b,{f{alpha }})$对$f{omega }$和$b$的偏导为零

$egin{array}{l}
{f{omega }} = sumlimits_{i = 1}^m {{alpha _i}{y_i}} {{f{x}}_i},\\
0 = sumlimits_{i = 1}^m {{alpha _i}{y_i}} .
end{array}$

则对偶问题表示为

$egin{array}{l}
mathop {max }limits_{f{alpha }} sumlimits_{i = 1}^m {{alpha _i} - } frac{1}{2}sumlimits_{i = 1}^m {sumlimits_{j = 1}^m {{alpha _i}{alpha _j}} } {y_i}{y_j}leftlangle {{{f{x}}_i},{{f{x}}_j}} ight angle \\
s.t. sumlimits_{i = 1}^m {{alpha _i}{y_i}} = 0,\\
{alpha _i} ge 0,i = 1,2,...,m.
end{array}$

解得${f{alpha }}$后,求出$f{omega }$和$b$即可得到模型,

$egin{array}{l}
f({f{x}}) = {{f{omega }}^T}{f{x}} + b\\
= sumlimits_{i = 1}^m {{alpha _i}{y_i}{{f{x}}^T}{f{x}} + b}
end{array}$

从对偶优化问题解出$alpha_i$,对应着每一个样本$({{f{x}}_i},y_i)$,和它满足的约束。满足KKT条件,

$left{ {egin{array}{*{20}{c}}
{{alpha _i} ge 0;}\\
{{y_i}f({{f{x}}_i}) - 1 ge 0;}\\
{{alpha _i}({y_i}f({{f{x}}_i}) - 1) = 0.}
end{array}} ight.$

所以,对于任意训练样本$({{f{x}}_i},y_i)$,总有$alpha _i=0$或${y_i}f({{f{x}}_i})=1$。若$alpha _i=0$,则该样本不会在$f{omega }$求和模型中出现,不会对$f({f{x}})$有任何影响; 若$alpha _i>0$,则必有${y_i}f({{f{x}}_i})=1$,所对应的样本点位于最大间隔边界上,是一个支持向量。这显示出支持向量机的一个重要性质:训练完成后?大部分的训练样本都不需保留,最终模型仅与支持向量有关 。

那么如何求解${f{alpha }} = ({alpha _1};{alpha _2},...,{alpha _m})$呢,这里介绍一个高效算法,SMO

SMO 的基本思路是先固定$alpha _i$之外的所有参数,然后求$alpha _i$上的极值。由于存在约束$sumlimits_{i = 1}^m {{alpha _i}{y_i}}  = 0$,若固定$alpha _i$之外的其他变量,则 $alpha _i$可由其他变量导出,所以SMO每次选择两个变量$alpha _i$和$alpha _j$,并固定其他参数。这样,在参数初始化后, SMO 不断执行如下两个步骤直至收敛:

  • 选取一对需要更新的变量$alpha _i$和$alpha _j$,
  • 固定除$alpha _i$和$alpha _j$以外的参数,求解对偶优化问题,获得更新后的$alpha _i$和$alpha _j$

 3. 核函数

 
























以上是关于支持向量机的主要内容,如果未能解决你的问题,请参考以下文章

支持向量机

支持向量机原理 线性支持向量机的软间隔最大化模型

支持向量机

什么是支持向量机?

支持向量机

支持向量机原理线性不可分支持向量机与核函数