SVM 中的数学和算法

前言

本文转自 sealyao 的博客,原文链接「CSDN - SVM中的数学和算法」,是我在学习 SVM 的过程中找到的一篇讲解比较透彻的文章,这里转载过来分享给大家,并优化一下原文的排版。

SVM 中的数学和算法

支持向量机(Support Vector Machine)是 Cortes 和 Vapnik 于 1995 年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。

1 数学部分

1.1 二维空间

支持向量机的典型应用是分类,用于解决这样的问题:有一些事物是可以被分类的,但是具体怎么分类的我们又说不清楚,比如说下图中三角的就是 C1 类,圆圈的就是 C2 类,这都是已知的,好,又来了一个方块,这个方块是属于 C1 呢还是属于 C2 呢,说不清楚。SVM 算法就是试着帮您把这件事情说清楚的。

在二维空间里(这时候样本有两个参照属性),SVM 就是在 C1 和 C2 中间划一条线 g ( x ) = 0 g(x)=0 g(x)=0,线儿上边的属于 C1 类,线儿下边的属于 C2 类,这时候方块再来,咱就有章程了。

关于 g ( x ) = 0 g(x) = 0 g(x)=0 得再啰嗦几句, g ( x ) g(x) g(x) 里边的 x x x 不是横坐标,而是一个向量, ω \omega ω 也不是解析几何里边的斜率,也是向量。 ω x \omega x ωx是一个向量积。

对 C1 类中的点: g ( x ) &gt; 0 g(x) &gt; 0 g(x)>0;对于 C2 类中的点: g ( x ) &lt; 0 g(x) &lt; 0 g(x)<0 ;

如果我们用 y y y 来表示类型,+1 代表 C1 类,-1 代表 C2 类。

那么对于所有训练样本而言,都有: y i g ( x i ) &gt; 0 y_ig(x_i)&gt;0 yig(xi)>0,那么 g ( x ) = 0 g(x) = 0 g(x)=0 就能够正确分割所有训练样本的那条线,只要把 g ( x ) = 0 g(x) = 0 g(x)=0 这条线给找出来就能凑合用了。

这也就只能凑合用,因为满足这个条件的 g ( x ) = 0 g(x) = 0 g(x)=0 太多了,追求完美的我们要的是最优的那条线。怎么才是最优的呢?直觉告诉我们 g ( x ) = 0 g(x) = 0 g(x)=0 这条线不偏向 C1 那边,也不偏向 C2 那边,就应该是最优的了吧。对,学名叫分类间隔,下图红线的长度就是分类间隔。

在二维空间中,求分类间隔,可以转化为求点到线的距离,点到线的距离可以表示为 ∣ g ( x ) ∣ ∣ ω ∣ \frac{|g(x)|}{|\omega|} ωg(x) (向量表示)。为简单计,把整个二维空间归一化(等比放大或缩小),使得对于所有的样本,都有 ∣ g ( x ) ∣ &gt; = 1 |g(x)|&gt;=1 g(x)>=1,也就是让 C1 和 C2 类中离 g ( x ) = 0 g(x)=0 g(x)=0 最近的训练样本的 ∣ g ( x ) ∣ = 1 |g(x)|=1 g(x)=1,这时分类间隔就是 2 ∣ ω ∣ \frac{2}{|\omega|} ω2,这个间隔越大越好,那么 ∣ ω ∣ |\omega| ω 越小越好。

1.2 多维空间

现在我们已经在二维空间中抽象出一个数学问题,求满足如下条件的 g ( x ) = 0 g(x)=0 g(x)=0

m i n ( 1 2 ∣ ω ∣ 2 ) s t . y i g ( x i ) − 1 ≥ 0 min(\frac{1}{2} |\omega|^2)st. y_i g(x_i) - 1 \geq 0 min(21ω2)st.yig(xi)10

即在满足 y i g ( x i ) − 1 ≥ 0 y_i g(x_i) - 1 \geq 0 yig(xi)10 条件下能使 1 2 ∣ ω ∣ 2 \frac{1}{2} |\omega|^2 21ω2 取最小值的那个 ω \omega ω。在二维空间中, ω \omega ω 可以近似的理解为斜率,在样本确定,斜率确定的情况下, g ( x ) = ω x + b g(x) = \omega x +b g(x)=ωx+b 中的那个b也是可以确定的,整个 g ( x ) = 0 g(x) = 0 g(x)=0 也就确定了。

现在我们讨论的只是二维空间,但是我们惊喜的发现,在二维空间中的结论可以很容易的推广到多维空间。比如说:

我们仍然可以把多维空间中的分割面(超平面)表示为 g ( x ) = ω x + b = 0 g(x) = \omega x +b =0 g(x)=ωx+b=0

多维空间中点到面的距离仍然可以表示为 ∣ g ( x ) ∣ ∣ ω ∣ \frac{|g(x)|}{|\omega|} ωg(x)。如下图,平面表示为 g ( x ) = ω x + b = 0 g(x) = \omega x +b =0 g(x)=ωx+b=0 x x x x p x_p xp 在面上的投影, r r r x x x 到面的距离,简单推导如下:

ω \omega ω 向量垂直于平面 g ( x ) = ω x + b = 0 g(x) = \omega x +b =0 g(x)=ωx+b=0,有: x = x p + r ω ∣ ω ∣ x = x_p +r\frac{\omega}{|\omega|} x=xp+rωω

把上式带入 g ( x ) = ω x + b = 0 g(x) = \omega x +b =0 g(x)=ωx+b=0 中,得到 ω ( x − r ω ∣ w ∣ ) + b = 0 \omega(x - r\frac{\omega}{|w|}) + b = 0 ω(xrwω)+b=0

化简得到 ω x + b − r ∣ ω ∣ = 0 \omega x + b -r|\omega| = 0 ωx+brω=0,所以 g ( x ) = r ∣ ω ∣ g(x) = r|\omega| g(x)=rω,向量 x x x 到平面 g ( x ) = ω x + b = 0 g(x) = \omega x +b =0 g(x)=ωx+b=0 的距离 r = g ( x ) ∣ ω ∣ r=\frac{g(x)}{|\omega|} r=ωg(x),这和二维空间中结论也是一致的。

现在我们把 SVM 从二维空间推广到多维空间,即求满足如下条件的 g ( x ) = 0 g(x)=0 g(x)=0

m i n ( 1 2 ∣ ω ∣ 2 ) s t . y i ( ω x i + b ) − 1 ≥ 0 min(\frac{1}{2} |\omega|^2)st. y_i (\omega x_i + b) - 1 \geq 0 min(21ω2)st.yi(ωxi+b)10

1.3 拉格朗日因子

这是一个典型的带约束条件的求极值问题,目标函数是 ω \omega ω 的二次函数,约束函数是 ω \omega ω 的线性函数:二次规划问题。求解二次规划问题的一般性方法就是添加拉格朗日乘子,构造拉格朗日函数(理论上这儿应该还有一些额外的数学条件,拉格朗日法才是可用,就略过了)。

具体求解步骤如下:

1.3.1 构造拉格朗日函数

L ( ω , b ) = 1 2 ∣ ω ∣ 2 − Σ i α i ( y i ( ω x i + b ) − 1 ) L(\omega, b) = \frac{1}{2}|\omega|^2 - \Sigma_i\alpha_i (y_i (\omega x_i + b) - 1) L(ω,b)=21ω2Σiαi(yi(ωxi+b)1)

其中 ω \omega ω b b b 是未知量。

1.3.2 对 ω \omega ω b b b 求偏导数,令偏导数为 0

∂ ( ω ) = ∣ ω ∣ − Σ i α i y i x i = 0 , 即 ∣ ω ∣ = Σ i α i y i x i \partial (\omega) = |\omega| - \Sigma_i\alpha_i y_i x_i =0 ,即 |\omega| = \Sigma_i\alpha_i y_i x_i (ω)=ωΣiαiyixi=0ω=Σiαiyixi

∂ ( b ) = Σ i α i y i = 0 , α i ≥ 0 \partial (b) = \Sigma_i\alpha_i y_i = 0, \alpha_i \geq 0 (b)=Σiαiyi=0,αi0

1.3.3 把上式带回拉格朗日函数,得到拉格朗日对偶问题,把问题转化为求解 α i \alpha_i αi

    ( 1 2 ∣ ω ∣ 2 − Σ i α i ( y i ( ω x i + b ) − 1 ) ) (\frac{1}{2}|\omega|^2 - \Sigma_i\alpha_i (y_i (\omega x_i +b) -1)) (21ω2Σiαi(yi(ωxi+b)1))

= ( 1 2 ∣ ω ∣ 2 − Σ i α i y i x i ω − Σ i α i y i b + Σ i α i ) = (\frac{1}{2}|\omega|^2 - \Sigma_i\alpha_i y_i x_i \omega - \Sigma_i\alpha_i y_i b +\Sigma_i\alpha_i) =(21ω2ΣiαiyixiωΣiαiyib+Σiαi)

= ( Σ i α i − 1 2 ∣ ω ∣ 2 ) = (\Sigma_i\alpha_i - \frac{1}{2}|\omega|^2) =(Σiαi21ω2)

= ( Σ i α i − 1 2 Σ i Σ j α i α j y i y j x i x j ) , α i ≥ 0 = (\Sigma_i\alpha_i - \frac{1}{2}\Sigma_i\Sigma_j\alpha_i\alpha_jy_iy_jx_ix_j),\alpha_i \geq 0 =(Σiαi21ΣiΣjαiαjyiyjxixj),αi0

1.3.4 最后把问题转化为求解满足下列等式的 α i \alpha_i αi

m i n ( 1 2 Σ i Σ j α i α j y i y j x i x j − Σ i α i ) , α i ≥ 0 min(\frac{1}{2}\Sigma_i\Sigma_j\alpha_i\alpha_jy_iy_jx_ix_j - \Sigma_i\alpha_i),\alpha_i \geq 0 min(21ΣiΣjαiαjyiyjxixjΣiαi),αi0

1.4 线性化

好,现在我们再来梳理一下 SVM 的分类逻辑,在空间中找一个分割面(线)把样本点分开,分割面(线)的最优条件就是分类间隔最大化,分类间隔是基于点到平面(直线)的距离来计算的。问题是所有的分割面都是平面,所有的分割线都是直线吗?显然不是。

比如特征是房子的面积 x x x,这里的 x x x 是实数,结果 y y y 是房子的价格。假设我们从样本点的分布中看到 x x x y y y 符合三次曲线,那么我们希望使用 x x x 的三次多项式来逼近这些样本点。

在二维空间中这是非线性的,这样我们前面的推理都没法用了------点到曲线的距离?不知道怎么算。但是如果把 x x x 映射到三维空间 Φ ( x ) = ( x , x 2 , x 3 ) T \Phi(x) = (x,x^2,x^3)^T Φ(x)=(x,x2,x3)T,那么对于 Φ ( x ) \Phi(x) Φ(x) 来说, y = ω Φ ( x ) + b y = \omega\Phi(x) + b y=ωΦ(x)+b 就是线性的,也就是说,对于低维空间中非线性的线(面),在映射到高维空间中时,就能变成线性的。于是我们还需要把问题做一个小小的修正,我们面临的问题是求解:

m i n ( 1 2 Σ i Σ j α i α j y i y j x i x j − Σ i α i ) , α i ≥ 0 min(\frac{1}{2}\Sigma_i\Sigma_j\alpha_i\alpha_jy_iy_jx_ix_j - \Sigma_i\alpha_i),\alpha_i \geq 0 min(21ΣiΣjαiαjyiyjxixjΣiαi),αi0

这里面引入了一个 Kernel,核函数,用于样本空间的线性化。

1.5 松弛变量

上面就是一个比较完整的推导过程,但是经验表明把上述条件丢给计算机进行求解,基本上是无解的,因为条件太苛刻了。实际上,最经常出现的情况如下图红色部分,在分类过程中会出现噪声,如果对噪声零容忍那么很有可能导致分类无解。

为了解决这个问题又引入了松弛变量。把原始问题修正为:

m a x ( 1 2 ∣ ω ∣ 2 ) + C Σ i γ i    s   t .    y i ( ω x i + b ) ≥ 1 − γ ,   γ ≥ 0 max(\frac{1}{2}|\omega|^2) + C\Sigma_i\gamma_i \ \ s\ t.\ \ y_i(\omega x_i + b) \geq 1 - \gamma,\ \gamma \geq 0 max(21ω2)+CΣiγi  s t.  yi(ωxi+b)1γ, γ0

按照拉格朗日法引入拉格朗日因子:

L ( ω , b , γ ) = ( 1 2 ∣ ω ∣ 2 ) + C Σ i γ i − Σ i α i ( y i ( ω x i + b ) − 1 + γ i ) − Σ i μ i γ i L(\omega, b, \gamma) = (\frac{1}{2}|\omega|^2) + C\Sigma_i\gamma_i - \Sigma_i\alpha_i(y_i(\omega x_i + b) -1 + \gamma_i) - \Sigma_i \mu_i\gamma_i L(ω,b,γ)=(21ω2)+CΣiγiΣiαi(yi(ωxi+b)1+γi)Σiμiγi

对上式分别求 ω , b , γ \omega, b, \gamma ω,b,γ 的导数得到:

∂ ( ω ) = ∣ ω ∣ − Σ i , 即   ∣ ω ∣ = Σ i α i y i x i \partial(\omega) = |\omega| - \Sigma_i,即\ |\omega| = \Sigma_i\alpha_i y_i x_i (ω)=ωΣi ω=Σiαiyixi

∂ ( b ) = Σ i α i y i = 0 ,   a i ≥ 0 \partial(b) = \Sigma_i\alpha_i y_i = 0,\ a_i \geq 0 (b)=Σiαiyi=0, ai0

∂ ( γ i ) = C − α i − μ i ,   α i ≥ 0 ,   μ i ≥ 0 \partial(\gamma_i) = C - \alpha_i - \mu_i, \ \alpha_i \geq 0, \ \mu_i \geq 0 (γi)=Cαiμi, αi0, μi0

带回 L ( ω , b , γ ) L(\omega,b,\gamma) L(ω,b,γ) 得到拉格朗日的对偶问题:

m i n ( 1 2 Σ i Σ j α i α j y i y j K e r n e l ( x i , x j ) − Σ i α i ) ,   C ≥ α i ≥ 0 min(\frac{1}{2}\Sigma_i\Sigma_j\alpha_i\alpha_jy_iy_j Kernel (x_i,x_j) - \Sigma_i\alpha_i),\ C\geq\alpha_i \geq 0 min(21ΣiΣjαiαjyiyjKernel(xi,xj)Σiαi), Cαi0

另外当目标函数取极值时,约束条件一定是位于约束边界(KKT条件),也就是说:

α i ( y i ( ω x i + b ) − 1 + γ i ) = 0 \alpha_i(y_i(\omega x_i + b) - 1 + \gamma_i) = 0 αi(yi(ωxi+b)1+γi)=0

μ i γ i = ( C − α i ) γ i = 0 \mu_i\gamma_i = (C - \alpha_i)\gamma_i =0 μiγi=(Cαi)γi=0

分析上面式子可以得出以下结论:

α i = C \alpha_i = C αi=C 时:
γ i \gamma_i γi 可以不为零,就是说该点到分割面的距离小于 1 ∣ ω ∣ \frac{1}{|\omega|} ω1,是误分类点。

α i = 0 \alpha_i = 0 αi=0 时:
γ i \gamma_i γi 为零, ( y i ( ω x i + b ) − 1 + γ i ) &gt; 0 (y_i(\omega x_i + b) - 1 + \gamma_i) &gt;0 (yi(ωxi+b)1+γi)>0,表示该点到分割面的距离大于 1 ∣ ω ∣ \frac{1}{|\omega|} ω1 ,是正确分类点。

0 &lt; α i &lt; C 0 &lt; \alpha_i &lt; C 0<αi<C 时:
γ i \gamma_i γi 为零, ( y i ( ω x i + b ) − 1 + γ i ) = 0 (y_i(\omega x_i + b) - 1 + \gamma_i) = 0 (yi(ωxi+b)1+γi)=0,该点就是支持向量。

再用数学语言提炼一下:

令$ L_\omega = \frac{1}{2}\Sigma_i\Sigma_j\alpha_i\alpha_jy_iy_j Kernel (x_i,x_j) - \Sigma_i\alpha_i$,其对 α i \alpha_i αi 的偏导数为:

∂ ( α i ) = y i Σ j α j y j K e r n e l ( x i , x j ) − 1 \partial(\alpha_i) = y_i\Sigma_j\alpha_jy_j Kernel (x_i,x_j) -1 (αi)=yiΣjαjyjKernel(xi,xj)1

KKT 条件可以表示为:

y i ( ω x i + b ) = y i Σ j α j y j K e r n e l ( x i , x j ) + b = { ≥ 1 ,     α i = 0 1 ,   0 &lt; α i &lt; C ≤ 1 ,      α i = C y_i(\omega x_i + b) = y_i\Sigma_j\alpha_j y_j Kernel(x_i,x_j) + b = \left\{\begin{matrix}\geq 1,\ \ \ \alpha_i =0 &amp; \\1,\ 0&lt;\alpha_i&lt;C &amp; \\\leq 1,\ \ \ \ \alpha_i = C &amp; \end{matrix}\right. yi(ωxi+b)=yiΣjαjyjKernel(xi,xj)+b=1,   αi=01, 0<αi<C1,    αi=C

∂ ( α i ) \partial(\alpha_i) (αi) 表示该 KKT 条件就是:

{ − y i ∂ ( α i ) ≤ b ,   ( y i = 1 , α i &lt; C ) o r ( y i = − 1 , α i &gt; 0 ) − y i ∂ ( α i ) ≥ b ,   ( y i = 1 , α i &gt; 0 ) o r ( y i = − 1 , α i &lt; C ) \left\{\begin{matrix}-y_i\partial(\alpha_i)\leq b,\ (y_i = 1,\alpha_i&lt;C) or (y_i = -1,\alpha_i&gt;0) \\ -y_i\partial(\alpha_i)\geq b,\ (y_i = 1,\alpha_i&gt;0) or (y_i = -1,\alpha_i&lt;C) \end{matrix}\right. {yi(αi)b, (yi=1,αi<C)or(yi=1,αi>0)yi(αi)b, (yi=1,αi>0)or(yi=1,αi<C)

g ( α i ) = − y i ∂ ( α i ) g(\alpha_i) = -y_i\partial(\alpha_i) g(αi)=yi(αi),则

所有的 g ( α i ) , ( y i = 1 , α i &gt; 0 ) 或 者 ( y i = − 1 , α i &lt; C ) g(\alpha_i),(y_i = 1, \alpha_i &gt;0) 或者 (y_i = -1,\alpha_i&lt;C) g(αi),(yi=1,αi>0)(yi=1,αi<C)

大于所有的 g ( α i ) , ( y i = 1 , α i &lt; C ) 或 者 ( y i = − 1 , α i &gt; 0 ) g(\alpha_i),(y_i = 1, \alpha_i &lt; C) 或者 (y_i = -1,\alpha_i &gt;0) g(αi),(yi=1,αi<C)(yi=1,αi>0)。这里 b b b 作为中间数被忽略了,因为 b b b 是可以由 α i \alpha_i αi 推导得到的。

2 算法部分

对于样本数量比较多的时候(几千个),SVM所需要的内存是计算机所不能承受的。目前,对于这个问题的解决方法主要有两种:块算法和分解算法。这里,libSVM采用的是分解算法中的SMO(串行最小化)方法,其每次训练都只选择两个样本。基本流程如下:

这里有两个重要的算法,一个是 α \alpha α 的选择,另一个是 α \alpha α 的更新。

2.1 α \alpha α 的选择算法

选择两个和KKT条件违背的最严重的两个 α i \alpha_i αi,包含两层循环:

外层循环:优先选择遍历非边界样本,因为非边界样本更有可能需要调整,而边界样本常常不能得到进一步调整而留在边界上。在遍历过程中找出 ( y i = 1 , α i &lt; C ) 或 者 ( y i = − 1 , α i &gt; 0 ) (y_i = 1, \alpha_i &lt; C) 或者 (y_i = -1,\alpha_i &gt;0) (yi=1,αi<C)(yi=1,αi>0) 的所有样本中 − y i ∂ ( α i ) -y_i\partial(\alpha_i) yi(αi) 值最大的那个(这个样本是最有可能不满足 − y i ∂ ( α i ) ≤ b -y_i\partial(\alpha_i)\leq b yi(αi)b 条件的样本。

内层循环:对于外层循环中选定的那个样本 α i \alpha_i αi,找到这样的样本 α j \alpha_j αj,使得:

{ ( ∂ ( α i ) + ∂ ( α j ) ) 2 ( K e r n e l ( i , i ) + K e r n e l ( j , j ) − 2 K e r n e l ( i , j ) ) ,   y 1 y 2 = − 1 ( ∂ ( α i ) + ∂ ( α j ) ) 2 ( K e r n e l ( i , i ) + K e r n e l ( j , j ) + 2 K e r n e l ( i , j ) ) ,   y 1 y 2 = + 1 \left\{\begin{matrix}\frac{(\partial(\alpha_i) + \partial(\alpha_j))^2}{(Kernel(i,i) + Kernel(j,j) - 2Kernel(i,j))},\ y_1y_2 = -1 \\ \frac{(\partial(\alpha_i) + \partial(\alpha_j))^2}{(Kernel(i,i) + Kernel(j,j) + 2Kernel(i,j))},\ y_1y_2 = +1 \end{matrix}\right. {(Kernel(i,i)+Kernel(j,j)2Kernel(i,j))((αi)+(αj))2, y1y2=1(Kernel(i,i)+Kernel(j,j)+2Kernel(i,j))((αi)+(αj))2, y1y2=+1

最大,上式是更新 α \alpha α 中的一个算式,表示的是在选定 α i \alpha_i αi α j \alpha_j αj 为更新算子的情况下, δ ( α j ) \delta(\alpha_j) δ(αj) 最大。

如果选择 α \alpha α 的过程中发现 KKT 条件已经满足了,那么算法结束。

2.2 α \alpha α 的更新算法

由于SMO每次都只选择2个样本,那么等式约束可以转化为直线约束:

α 1 + y 1 y 2 α 2 = d ( 常 数 ) \alpha_1 + y_1y_2\alpha_2 = d(常数) α1+y1y2α2=d()

转化为图形表示为:

那么 α 2 \alpha_2 α2 的取值范围是:

{ L = m a x ( 0 , α 1 − α 2 ) , H = m i n ( C 2 , C 1 + α 2 − α 1 ) , y 1 y 2 = − 1 L = m a x ( 0 , α 2 + α 1 − C 1 ) , H = m i n ( C 2 , α 2 + α 1 ) , y 1 y 2 = + 1 \left\{\begin{matrix}L = max(0,\alpha_1 - \alpha_2), H = min(C_2,C_1 + \alpha_2- \alpha_1 ) ,y_1y_2 = -1 \\ L = max(0,\alpha_2 + \alpha_1 - C_1), H = min(C_2, \alpha_2+ \alpha_1 ) ,y_1y_2 = +1 \end{matrix}\right. {L=max(0,α1α2),H=min(C2,C1+α2α1),y1y2=1L=max(0,α2+α1C1),H=min(C2,α2+α1),y1y2=+1

α 1 + y 1 y 2 α 2 = d \alpha_1 + y_1y_2\alpha_2 = d α1+y1y2α2=d 代入 1 2 Σ i Σ j α i α j y i y j K e r n e l ( x i , x j ) − Σ i α i \frac{1}{2}\Sigma_i\Sigma_j\alpha_i\alpha_jy_iy_j Kernel (x_i,x_j) - \Sigma_i\alpha_i 21ΣiΣjαiαjyiyjKernel(xi,xj)Σiαi中,得到一个一元二次方程,求极值得到:

{ α 2 n e w ∗ = α 2 + − ∂ ( α 1 ) − ∂ ( α 2 ) K ( 1 , 1 ) + K ( 2 , 2 ) + 2 K ( 1 , 2 ) ,   y 1 y 2 = − 1 α 2 n e w ∗ = α 2 + − ∂ ( α 1 ) − ∂ ( α 2 ) K ( 1 , 1 ) + K ( 2 , 2 ) − 2 K ( 1 , 2 ) ,   y 1 y 2 = + 1 \left\{\begin{matrix}\alpha_2^{new*} = \alpha_2 + \frac{-\partial(\alpha_1) - \partial(\alpha_2)}{K(1,1) + K(2,2) + 2K(1,2)},\ y_1y_2 = -1 \\ \alpha_2^{new*} = \alpha_2 + \frac{-\partial(\alpha_1) - \partial(\alpha_2)}{K(1,1) + K(2,2) - 2K(1,2)},\ y_1y_2 = +1 \end{matrix}\right. {α2new=α2+K(1,1)+K(2,2)+2K(1,2)(α1)(α2), y1y2=1α2new=α2+K(1,1)+K(2,2)2K(1,2)(α1)(α2), y1y2=+1

最终:

α 2 n e w = { H ,   α 2 n e w ∗ ≥ H α 2 n e w ∗ ,   0 &lt; α 2 n e w ∗ &lt; H L , α 2 n e w ∗ ≥ L \alpha_2^{new} = \left\{\begin{matrix}H,\ \alpha_2^{new*}\geq H \\ \alpha_2^{new*},\ 0&lt;\alpha_2^{new*}&lt;H \\ L,\alpha_2^{new*}\geq L \end{matrix}\right. α2new=H, α2newHα2new, 0<α2new<HL,α2newL

2.3 其他

上面说到 SVM 用到的内存巨大,另一个缺陷就是计算速度,因为数据大了,计算量也就大,很显然计算速度就会下降。因此,一个好的方式就是在计算过程中逐步去掉不参与计算的数据。因为,实践证明,在训练过程中, α i \alpha_i αi 一旦达到边界( α i = 0 \alpha_i = 0 αi=0 或者 α i = C \alpha_i = C αi=C), α i \alpha_i αi 的值就不会变,随着训练的进行,参与运算的样本会越来越少。

LibSVM 采用的策略是在计算过程中,检测 active_size 中的 α i \alpha_i αi 值,如果 α i \alpha_i αi到了边界,那么就应该把相应的样本去掉(变成 inactived ),并放到栈的尾部,从而逐步缩小 active_size 的大小。

b的计算 ,基本计算公式为: b = y i − Σ j α j y j K e r n e l ( x i , x j ) b = y_i - \Sigma_j\alpha_jy_jKernel(x_i,x_j) b=yiΣjαjyjKernel(xi,xj)

理论上, b b b 的值是不定的。当程序达到最优后,只要用任意一个标准支持向量机( 0 &lt; α i &lt; C 0&lt;\alpha_i&lt;C 0<αi<C)的样本带入上式,得到的 b b b 值都是可以的。目前,求 b b b 的方法也有很多种。在 libSVM 中,分别对 y = + 1 y=+1 y=+1 y = − 1 y=-1 y=1 的两类所有支持向量求 b b b,然后取平均值。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.全主元高斯约当消去法2.LU分解法3.追赶法4.五对角线性方程组解法5.线性方程组解的迭代改善6.范德蒙方程组解法7.托伯利兹方程组解法8.奇异值分解9.线性方程组的共轭梯度法10.对称方程组的乔列斯基分解法11.矩阵的QR分解12.松弛迭代法第2章插值1.拉格朗日插值2.有理函数插值3.三次样条插值4.有序表的检索法5.插值多项式6.二元拉格朗日插值7.双三次样条插值第3章数值积分1.梯形求积法2.辛普森求积法3.龙贝格求积法4.反常积分5.高斯求积法6.三重积分第4章特殊函数1.г函数、贝塔函数、阶乘及二项式系数2.不完全г函数、误差函数3.不完全贝塔函数4.零阶、一阶和任意整数阶的第一、二类贝赛函数5.零阶、一阶和任意整数阶的第一、二类变形贝赛函数6.分数阶第一类贝赛尔函数和变形贝赛尔函数7.指数积分和定指数积分8.连带勒让德函数第5章函数逼近1.级数求和2.多项式和有理函数3.切比雪夫逼近4.积分和导数的切比雪夫逼近5.有切比雪夫逼近函数的多项式逼近第6章特征值问题1.对称矩阵的雅可比变换2.变实对称矩阵为三对角对称矩阵3.三对角矩阵的特征值和特征向量4.变一般矩阵为赫申伯格矩阵5.实赫申伯格矩阵的QR算法第7章数据拟合1.直线拟合2.线性最小二乘法3.非线性最小二乘法4.绝对值偏差最小的直线拟合第8章方程求根和非线性方程组的解法1.图解法2.逐步扫描法和二分法3.割线法和试位法4.布伦特方法5.牛顿拉斐森法6.求复系数多项式根的拉盖尔方法7.求实系数多项式根的贝尔斯托方法8.非线性方程组的牛顿拉斐斯方法第9章函数的极值和最优化1.黄金分割搜索法2.不用导数的布伦特法3.用导数的布伦特法4.多元函数的下山单纯形法5.多元函数的包维尔法6.多元函数的共轭梯度法7.多元函数的变尺度法8.线性规划的单纯形法第10章傅里叶变换谱方法1.复数据快速傅里叶变换算法2.实数据快速傅里叶变换算法一3.实数据快速傅里叶变换算法二4.快速正弦变换和余弦变换5.卷积和逆卷积的快速算法6.离散相关和自相关的快速算法7.多维快速傅里叶变换算法第11章数据的统计描述1.分布的矩——均值、平均差、标准差、方差、斜差和峰态2.位数的搜索3.均值与方差的显著性检验4.分布拟合的X平方检验5.分布拟合的K-S检验法第12章解常微分方程组1.定步长四阶龙格库塔法2.自适应变步长的龙格库塔法3.改进的点法4.外推法第13章偏微分方程的解法1.解边值问题的松驰法2.交替方向隐式方法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值