支持向量机
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. 核函数
以上是关于支持向量机的主要内容,如果未能解决你的问题,请参考以下文章