数据挖掘入门系列教程(八点五)之SVM介绍以及从零开始公式推导

还是老规矩,这一篇博客是对SVM进行介绍,下一篇博客就是使用SVM进行具体的使用。

SVM介绍

首先介绍SVM是什么,SVM(support vector machine)名为支持向量机,又名支持向量网络,是一个非常经典且高效的分类模型,是一种监督式的学习方法。

从名字上面来理解,SVM分为两个部分,"支持向量(support vector)"以及“机(machine)”。“machine”很简单的理解,就是算法的意思,那么“support vector”是什么呢? 这个现在不进行介绍,待我慢慢的引入。

线性分类

在介绍SVM之前,我们得先对线性分类器进行介绍。下面是一个二维平面的的分类问题,红色代表类别为+1,蓝色的代表类别是-1。中间的线就代表分割这两类问题的超平面。对于分类问题来说,红色和蓝色的点都是数据集中已知的,而我们的目的就是找到一个最适合的超平面,将数据进行分类。

对于线性二分类模型,给定一组数据{(x1,y1),(x2,y2),,(xm,ym)}, 其中xiRd,y{1,1},二分类任务的目标是希望从数据中学得一个假设函数h:R{1,1},使得h(xi)=yi

(1)h(xi)={1yi=11yi=1

二分类

那么问题来了,我们如何去寻找一个能够将yi=±1划分开的超平面?首先我们可以设超平面的函数是:

(2)f(x)=wTx+b

这里有一个值得注意的点,下面的这个公式会在后面的推导中经常用到。

(3)yi2=1

尽管有很多的问题都是线性不可分的,但是呢,目前我们只讨论线性可分问题,到后面我们再讨论如何将非线性问题转成线性问题。因此,暂时我们不需要去纠结如果是非线性问题怎么办。

我们可以直观的从图中进行感受,这样的超平面是有多个的,那么如何寻找一个最合适的超平面呢(也就是寻找最合适的wTb)?接下来引出间隔的概念来寻找最合适的超平面。

间隔

如下图所示,超平面f(x)=wTx+b,则xx0到超平面的投影,x0对应的类别是y0w为超平面的法向量,γx0到超平面的距离(带正负号)。

距离

因此

γ=f(x0)||w||:γ~=y0γ

这样我们就推出了间隔的表达式γ~=y0γ。对于给定的数据集,我们当然是希望数据集中的数据离超平面越远越好,因为这样所能够容忍的误差也就越大。那么这个远如何来确定呢?接下来让我们讨论什么是最大间隔分类器。

最大间隔分类器

如果我们给定如下的数据集,那么对于下面的数据集,哪一些最不可能分类成功呢?毋庸置疑的,就是最靠近f(x)=wTx+b超平面的数据点(比如下图中被红色和黄色圈出来的点)。而被圈出来的点也就是被称之为“支持向量”。因为在模型中我们考虑他们就可以了。

最大分类间隔

首先我们假设支持向量分布在ωTx+b=±1超平面上,这里取值为1只是为了方便,该值并不影响后面的优化结果。很显然,支持向量到超平面ωTx+b=±1的距离为1ω。两侧的距离加起来就是2ω。在前面我们说过,我们希望距离越大越好,也就是说2ω越大越好,同时对于数据集中数据的分布满足y(ωT+b)x1。因此,我们得到了如下的优化问题:

(4){max2ωs.t.yi(ωTxi+b)1,i=1,2,...,m

为了方便后续的推导,该优化问题等价于:

(5){min12ω2s.t.yi(ωTxi+b)1,i=1,2,...,m

拉格朗日乘子法(Lagrange multipliers)

拉格朗日乘子法是一种寻找多元函数在一组约束下的极值的方法。通过引拉格朗日乘子,可将有 d个变量与k个约束条件的最优化问题转化为具有d+k个变量的无约束优化问题求解。下面让我们来进行推导。

拉格朗日乘子法推导

如下图所示z=f(x,y)g(x,y)=0,如果我们需要求zg(x,y)条件下的极值。从几何角度来说,我们可以画出z=Ci的等高线,等高线与g(x,y)相切的点(x0,y0)即为极值点。如下图所示:

因为在点(x0,y0)取得极值,那么,f(x0,y0)//g(x0,y0),也就是说此时梯度平行。也就是说(fx(x0,y0),fy(x0,y0))//(gx(x0,y0),gy(x0,y0))(这个是可以证明的,但是在这里就不证明了)因此有:

fx(x0,y0)gx(x0,y0)=fy(x0,y0)gy(x0,y0)=λ0λ00

即:

(6){fx(x0,y0)+λ0gx(x0,y0)=0fy(x0,y0)+λ0gy(x0,y0)=0g(x,y)=0

如果此时我们有一个辅助函数L(x,y,λ)=f(x,y)+λg(x,y),对其求偏导然后求极值点可得:

(7){L(x,y,λ)x=fx(x,y)+λgx(x,y)=0L(x,y,λ)y=fy(x,y)+λgy(x,y)=0L(x,y,λ)λ=g(x,y)=0

显而易见公式(6)和公式(7)相等。因此我们对z=f(x,y)在条件f(x,y)=0的条件下求极值(x0,y0)的问题变成了求拉格朗日函数L(x,y,λ)=f(x,y)+λg(x,y)偏导数为0的解。

KKT条件(Karush-Kuhn-Tucker Conditions)

上面我们讨论的是在等式约束条件下求函数极值的问题(也就是g(x,y)=0)but,如果如果是不等式条件下,我们应该如何来使用拉格朗日函数来求解呢?下面引出KKT条件。

什么是KKT条件呢?它是在满足一些有规则的条件下,一个非线性规划问题能有最优化解法的一个必要条件。也就是说优化问题在最优值处必须满足KKT条件

例如我们有以下优化问题:

(1)minxf(x) s.t. hi(x)=0(i=1,,m)gj(x)0(j=1,,n)

其拉格朗日函数为:

(8)L(x,λ,μ)=f(x)+i=1mλihi(x)+j=1nμjgj(x)

则其KKT条件为:

(2){gj(x)0μj0μjgj(x)=0h(x)=0

接下来让我们来解释一下为什么是这样的。(不一定是数学证明)。

下面我们只讨论f(x)在不等式gi(x)<0条件下取min情况。这里可能有人会说,如果我要求max怎么办?很简单那,将f(x)取反即可,就变成了求min的情况。同样对于gi(x)>0的情况,我们取反就变成了g(x)=gi(x)<0

对于上述讨论,有两种情况如下图(图中x代表极小值点):

  • 情况一:极小值点xgi(x)<0的区域内
  • 情况二:极小值点xgi(x)=0

首先我们先讨论情况二,对于情况二很好理解,此时的“不等式约束”变成了“等式约束”。那么其在极值点满足以下条件:

(9)h(x)=0g(x)=0μ0

h(x)=0g(x)=0我们很好理解,但是为什么我们对μ还要进行限制呢?然后为什么限制还为μ0呢?首先我们来考虑一下f(x)g(x)x点的梯度方向(首先f(x)g(x)x点的梯度方向肯定是平行的【梯度的方向代表函数值增加最快的方向】)。

  • 对于f(x)来说,等值线大小由中心到周围逐渐增大,因此它的梯度方向指向可行域。为图中红色的箭头号。
  • 对于g(x)来说,梯度方向肯定是指向大于0的一侧,那么就是要背离可行域。为图中黄色的箭头号。

梯度方向

在前面拉格朗日乘子法中我们有以下推导:

fx(x0,y0)gx(x0,y0)=fy(x0,y0)gy(x0,y0)=λ0λ00

又因为g(x)f(x)梯度方向相反,因此λ00。 因此对于9μ0

接下来让我们来讨论情况一。情况一是极小值$x^* g(x)$的可行域中,因此,我们可以将其看成没有不等式约束条件。那么其在极值点满足以下条件:

h(x)=0g(x)0μ=0

对比两种情况:

  • 情况一:μ=0g(x)0
  • 情况二:μ0g(x)=0

综合情况一和情况二,可得到KKT条件为:

(3){gj(x)0()μj0()μjgj(x)=0()h(x)=0

拉格朗日乘子法对偶问题

对于如下优化问题:

(10)minxf(x) s.t. hi(x)=0(i=1,,m)gj(x)0(j=1,,n)

其拉格朗日函数为:

(4)L(x,λ,μ)=f(x)+i=1mλihi(x)+j=1nμjgj(x)s.t.μj0

对于上述的优化问题(10)我们可以等价于(下面的称之为主问题):

(5)minxmaxλ,μL(x,λ,μ) s.t. μi0,i=1,2,,m

证明如下:

(6)minxmaxλ,μL(x,λ,μ)=minx(f(x)+maxλ,μ(i=1mμigi(u)+j=1nλjhj(u)))=minx(f(x)+{0 若x满足约束否则)=minuf(u)

其中, 当gi(x)不满足约束时, 即gi(x)>0, 我们可以令μ=, 使得μigi(x)=; 当hj(x)不满足约束时, 即 hj(x)0, 我们可以取λj=, 使得λjhj(x)=。当x满足约束时, 由于 μi0gi(x)0, 则 μigj(x)0,因此我们可以取最大值0。 实际上也就是说如果10存在最优解,则最优解必须满足KKT条件。

对于10其对偶问题为:

(7)maxλ,μminxL(x,λ,μ) s.t. μi0,i=1,2,,m

对偶问题是主问题的下界(他们两个具有弱对偶性):

p=minxmaxλ,μL(x,λ,μ)maxλ,μminxL(x,λ,μ)=g

你可以记忆成“廋死的骆驼比马大”,还看到一个记忆方法为“宁为凤尾不为鸡头”。hhh

证明如下:

maxxminyf(x,y)minymaxxf(x,y)let g(x)=minyf(x,y)then g(x)f(x,y),ymaxxg(x)maxxf(x,y),ymaxxg(x)minymaxxf(x,y)

Slater 条件

前面我们讨论了弱对偶性,这里我们将进行讨论Slater条件,但是为什么我们要讨论Slater条件呢?原因很简单,我们想让上面的弱对偶问题转成强对偶问题。

Slater定理是说,当Slater条件成立且原问题是凸优化问题时,则强对偶性成立。这里有几个名词值得注意:

  • 凸优化问题

    如果一个优化问题满足如下格式,我们就称该问题为一个凸优化问题:

    minf(x)s.tgi(x)0,i=1,...,m hi(x)=0,i=1,...,p

    其中f(x)是凸函数,不等式约束g(x)也是凸函数,等式约束h(x)是仿射函数。

    1. 凸函数是具有如下特性的一个定义在某个向量空间的凸子集C(区间)上的实值函数f:对其定义域上任意两点x1,x2总有f(x1+x22)f(x1)+f(x2)2

      一阶凸函数

    2. 仿射函数

      仿射函数,即最高次数为1的多项式函数。

  • 强对偶性

    弱对偶性是p=minxmaxλ,μL(x,λ,μ)maxλ,μminxL(x,λ,μ)=g,也就是pg,则强对偶性是p=g

说了这么多,那什么是Slater条件呢?

  1. 原问题是凸优化问题
  2. 存在x使得g(x)0严格成立。(换句话说,就是存在x使得g(x)<0成立)

值得注意的是线性支持向量机满足Slater条件(因为12ww1yi(wTxi+b)均为凸函数),也就是它满足强对偶性。

最大间隔分类器与拉格朗日乘子法

前面说了这么多,实际上也就是为这个地方做铺垫。我们可以将最大间隔分类问题转化成在KKT条件下的拉格朗日函数的极值问题,然后又因为其满足Slater条件,我们可以转化成强对偶问题。

在最大间隔分类中,我们得到如下结论:

(11){min12ω2s.t.yi(ωTxi+b)1,i=1,2,...,m

其拉格朗日函数为:

(8)L(w,b,α):=12ww+i=1mαi(1yi(wxi+b))s.t.αi0,i=1,2,...,m

其对偶问题(满足强对偶性)为:

(12)maxαminw,b(12ww+i=1mαi(1yi(wxi+b))) s.t. αi0,i=1,2,,m

然后我们来求:

(9)minw,b(12ww+i=1mαi(1yi(wxi+b))) s.t. αi0,i=1,2,,m

上式对于(ω,b)属于无约束优化问题,令偏导为零可得:

(13)Lw=0w=i=1mαiyixiLb=0i=1mαiyi=0

代入(12)消去(ω,b)可得:

(14)minα12i=1mj=1mαiαjyiyjxixji=1mαi s.t. i=1mαiyi=0αi0,i=1,2,,m

因此问题变成了寻找合适的α使得(12)成立。

又因为11在极值点必定满足KKT条件。也就是说αi(1yi(wxi+b))=0,当αi>0时必有1yi(wxi+b)=0。因此对于αi>0对应的样本是支持向量,对于非支持向量,则αi=0

最大分类间隔

对于13有:

(10)w=i=1mαiyixi=i:αi=0m0yixi+i:αi>0mαiyixi=iSVαiyixi(SV)

然后我们可以求b了,对于支持向量有yk=ωx+b,因此:

(11)b=ykwx=yk(iSVαiyixi)xk=ykiSVαiyixixk

通过上面的推导,我们能够知道支持向量机的(ω,b)仅由支持向量决定。实践中, 为了得到对 $b ,使b$的平均值。

综上,我们想计算出合适的ωb,就必须计算出αi,然后我们就可以得到支持向量,在然后我们我们通过支持向量和αi就可以计算出ωb

至于怎么求αi,我们使用可以使用后面介绍的SMO算法求解,首先我们来介绍一下核方法。

核技巧

在前面的讨论中,我们对样本的考虑都是线性可分的。但是实际上,大部分的情况下,数据都是非线性可分的。比如说异或问题。在前面的章节神经网络中,我们是通过使用增加一层隐层来解决这个问题,那么对于SVM我们应该怎么解决呢?SVM中使用核技巧(kernel trick)来解决非线性问题。

核技巧

既然在原始的特征空间Rd不是线性可分的,支持向量机希望通过一个映射ϕ:RdRd~, 使得数据在新的空间Rd~是线性可分的。可以证明(但是我证明不出),当d有限时, 一定存在d~, 使得样本在空间Rd~中线性可分。

核函数

ϕ(x)x映射后的特征向量,因此划分的超平面可以表示为f(x)=ϕ(x)+b。同时11可以改为:

(12)minw,b12w2 s.t. yi(wTϕ(xi)+b)1,i=1,2,,m

然后14可以写成如下的形式:

(15)minα12i=1mj=1mαiαjyiyjϕ(xi)ϕ(xj)i=1mαi s.t. i=1mαiyi=0αi0,i=1,2,,m

求解15面临一个很大的问题,那就是ϕ(xi)ϕ(xj)很难计算(一般来说它们都是高维的甚至无穷维),首先需要计算特征在Rd~的映射,然后又要计算在他的内积,复杂度为O(d~)。因此我们通过使用核技巧,将这两步并将复杂度降低到Rd。即核技巧希望构造一个核函数κ(xi,xj),使得:

(13)κ(xi,xj)=ϕ(xi)ϕ(xj)

实际上核函数不仅仅只用于SVM,对于所有涉及到向量内积的运算,我们都可以使用核函数来解决。

因此15可以改写成:

(15)minα12i=1mj=1mαiαjyiyjκ(xi,xj)i=1mαi s.t. i=1mαiyi=0αi0,i=1,2,,m

对于核函数来说,我们可以自己造,但是通常我们会从一些常见的核函数中进行选择:根据不同问题选择不同的参数。下图是是一些常见的核函数。

软间隔

前面我们讨论的情况都是超平面都是能够完美的将数据进行分开(即使是非线性数据,我们使用核函数进行骚操作然后进行分割),这种所有样本都满足约束的情况称之为硬间隔(hard margin),但实际上数据是有噪音的,如果使用核函数进行骚操作,然后在找到一个线性可分超平面,可能就会造成模型过拟合,同样也可能我们找不到合适的核函数。因此,我们将标准放宽,允许一定的“错误”,称之为软间隔(soft margin):

我们希望在优化间隔的同时,允许错误样本的出现,但是我们同样希望出现错误的样本越少越好。因此优化目标5可写成:

(16){minw,b(12w2+Ci=1m0/1(yi(wTxi+b)1))s.t.yi(ωTxi+b)1,i=1,2,...,m

其中C>0是一个常数,0/1是“0/1损失函数”。

(14)0/1(z)={1, if z<00, otherwise 

可以很简单的知道,C取无穷大时,16迫使所有样本均满足约束。当C取有限值时,允许一些样本不满足约束。but,还是有些问题,0/1是非凸,非连续的一个函数,会使得上式(16)变得不好求解,因此人们通常使用其他的函数来替代0/1,称之为“替代损失(surrogate loss)”。下面是几种常用的替代损失函数:

(15)hinge 损失hinge(z)=max(0,1z) 指数损失(exponential loss): exp(z)=exp(z) 对率损失(logistic loss): log(z)=log(1+exp(z))

对应的图如下:

代替损失

下面将以hinge为例子介绍软间隔支持向量机的推导。

软间隔支持向量机推导

hinge函数hinge(z)=max(0,1z)等价于:

(16)ξi={0 if yi(wϕ(xi)+b)11yi(wϕ(xi)+b) otherwise 

ξi我们称之为松弛变量(slack variable),样本违背约束越远,则松弛变量值越大。因此优化目标式(5)可以写成:

(17)minw,b,ξ(12ww+Ci=1mξi) s.t. yi(wϕ(xi)+b)1ξi,i=1,2,,mξi0,i=1,2,,m

同样在这里C越大,代表我们希望越多的样本满足约束。软间隔的拉格朗日函数为:

(18)L(w,b,ξ,α,β):=12ww+Ci=1mξi+i=1mαi(1ξiyi(wϕ(xi)+b))+i=1mβi(ξi)

其KKT条件为:

(17){1ξiyi(wϕ(xi)+b)0,ξi0()αi0,βi0()αi(1ξiyi(wϕ(xi)+b))=0,βiξi=0()

其对偶问题为:

(18)maxα,βminw,b,ξL(w,b,ξ,α,β) s.t. αi0,i=1,2,,mβi0,i=1,2,,m

minw,b,ξL(w,b,ξ,α,β)的优化属于无约束的优化问题,我们通过将偏导置零的方法得到(w,b,ξ)的最优值:

(19)Lw=0w=i=1mαiyiϕ(xi)Lb=0i=1mαiyi=0Lξ=0αi+βi=C

因为βi=Cαi0,因此我们约束0αiC,将βi=Cαi,w=i=1mαiyiϕ(xi),代入式(18)可得:

(20)minα12i=1mj=1mαiαjyiyjϕ(xi)ϕ(xj)i=1mαi s.t. i=1mαiyi=0,0αiC

如果我们将式(17)看成如下一般形式:

(19)minf(Ω(f)+Ci=1m(f(xi),yi))

对于Ω(f)我们称之为“结构风险(structural risk)”,第二项i=1m(f(xi),yi)称之为“经验分享(empirical risk)“,而C的作用就是对两者进行折中。

SMO算法

前面说了这么多,终于终于,我们要开始说SMO(Sequential minimal optimization,序列最小化)算法了。首先说一下这个算法的目的,这个算法就是用来求αi的。SMO算法是一种启发式算法,基本思路是如果所有变量的解都满足最优化问题的KKT条件,则该最优化问题的解就得到了。

对于式(19)如果我们将ϕ(xi)ϕ(xj)使用核函数来表示则有:

(21)minα12i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαi s.t. i=1Nαiyi=00αiC,i=1,2,,N

假如我们选择α1,α2作为变量(至于为什么不是只选择一个变量是因为存在i=1Nαiyi=0这个约束条件),固定其他变量αi(i=3,4,,N),则式(20)问题可以变成:

(22)minα1,α2W(α1,α2)=12K11α12+12K22α22+y1y2K12α1α2(α1+α2)+y1α1i=3NyiαiKi1+y2α2i=3NyiαiKi2 s.t. α1y1+α2y2=i=3Nyiαi=ς0αiC,i=1,2

在式(21)中省略了i=3Nαi这个式子,是因为该式为常数项。

因为α1y1+α2y2=y1=±1,y2=±1,因此有:

(23){α1α2=k(y1y2)α1+α2=k(y1=y2) s.t. 0α1C0α2C

我们可以将式(22)用图表示出来:

因为α1α2存在线性关系,这样两个变量的最优化问题成为了实质上单变量的最优化问题,因此,我们可以看成其为变量α2的最优化问题。

(22)的初始可行解为α1old ,α2old ,最优解为α1new ,α2new。对于αinew来说,其取值范围必须满足:

Lαinew H

  • 情况1:L=max(0,α2old α1old ),H=min(C,C+α2old α1old )
  • 情况2:L=max(0,α2old +α1old C),H=min(C,α2old +α1old )

设我们计算出来的α2α2new,unc,则有:

α2new={Hα2new,unc>Hα2new,uncLα2new,uncHLα2new,unc<L

那么问题就回到了如果我们有α2old我们如何得到α2new,unc呢?

首先我们设一个超平面函数g(x)如下:

g(x)=wϕ(x)+b19w=i=1mαiyiϕ(xi)g(x)=j=1mαjyjK(x,xj)+b

然后我们令

(20)Ei=g(xi)yi=(j=1NαjyjK(xj,xi)+b)yi,i=1,2

同时引进记号:

(21)vi=j=3NαjyjK(xi,xj)=g(xi)j=12αjyjK(xi,xj)b,i=1,2

因此式(22)可以改写成:

(24)W(α1,α2)=|12K11α12+12K22α22+y1y2K12α1α2(α1+α2)+y1v1α1+y2v2α2

又因为α1y1+α2y2=ς,yiyi=1,因此α1可以表示为:

(22)α1=(ςy2α2)y1

代入式(24)中,我们有:

(23)W(α2)=12K11(sα2y2)2+12K22α22+y2K12(sα2y2)α2(sα2y2)y1α2+v1(sα2y2)+y2v2α2

然后,我们对α2求导数:

(24)Wα2=K11α2+K22α22K12α2K11Sy2+K12sy2+y1y21v1y2+y2v2

令其导数为0可得:

(25)(K11+K222K12)α2=y2(y2y1+ςK11ςK12+v1v2)=y2[y2y1+ςK11ςK12+(g(x1)j=12yjαjK1jb)(g(x2)j=12yjαjK2jb)]

又因为ς=α1oldy1+α2oldy2代入式(25)可得:

(26)(K11+K222K12)α2new , unc =y2((K11+K222K12)α2old y2+y2y1+g(x1)g(x2))=(K11+K222K12)α2old +y2(E1E2)

令:

(25)η=K11+K222K12=Φ(x1)Φ(x2)2

因此式(26)可化简为:

(27)α2new ,unc=α2old +y2(E1E2)η

同时有:

α2new={Hα2new,unc>Hα2new,uncLα2new,uncHLα2new,unc<L

因为我们已经得到α2new,根据α1newα2new之间的线性关系,我们可以就可以得到α1new了。

我们每次完成两个变量的优化之后,都需要重新更新阈值。具体更新可以看下面部分。

SMO变量的选择方法

通过前面部分我们知道SMO算法就是选择两个变量进行优化,其中至少有一个变量是违反了KKT条件(假如没有违反的话,我们也就没必要进行计算了)。我们可以使用α1代表第一个变量,α2代表第二个变量。

  1. 第一个变量的选择

    我们称第一个变量的选择为外层循环,外层循环在训练样本中选择违反KKT条件最严重的样本点。对于KKT条件,我们可以转成以下的形式:

    (28)αi=0yig(xi)1(1)0<αi<Cyig(xi)=1(2)αi=Cyig(xi)1(3)g(xi)=j=1NαjyjK(xi,xj)+b

    证明如下:

    对于上式(1)

    (26)αi=0,αi+βi=C,KKTβiξi=0βi=C,ξi=0KTT1ξiyig(xi)αi[yig(xi)(1ξi)]=0yig(xi)1

    对于上式(2)

    (27)0<αi<C,αi+βi=C,KKTβiξi=00<βi<C,ξi=0KTT1ξiyig(xi)αi[yig(xi)(1ξi)]=0yig(xi)=1ξi=1

    对于上式(3)

    (28)αi=C,αi+βi=C,KKTβiξi=0βi=0ξi0KTT1ξiyig(xi)αi[yig(xi)(1ξi)]=0yig(xi)=1ξi1

    当然我们也可以给定一定的精度范围ε,此时KKT条件就变成了:

    (29)ai=0yig(xi)1ε0<ai<C1εyig(xi)1+εai=Cyig(xi)1+ε

    然后我们通过变形后的KKT条件,获得违背的样本点违背最严重的作为第一个变量就🆗了。那么如何度量这个严重性呢?emm,就看g(xi)距离KKT条件有多远就行了。

  2. 第二个变量的选择

    第二个变量选择的过程称之为内层循环,其标准是希望能够使α2有足够大的变化。由式(27)我们知道:

    (30)α2new ,unc=α2old +y2(E1E2)η

    也就是说α2的变化量依赖于|E1E2|,因此我们可以选择式|E1E2|最大的α2。因为α1已经确定,所以E1也就已经确定,因此我们只需要确定E2即可。如果E1为正,则选取α2使E2最小,如果E1为负,则选取α2使E2最大。

当我们完成两个变量的优化后(优化后的变量),我们就需要来更新阈值b

  • 若更新后的0<α1<C由式(28)中的式(2)可知:

(31)i=1NαiyiKi1+b=y1

​ 于是有:

(32)b1new=y1i=3NαiyiKi1α1newy1K11α2newy2K21

​ 由Ei的定义式Ei=g(xi)yi=(j=1NαjyjK(xj,xi)+b)yi,i=1,2,有:

(33)E1=i=3NαiyiKi1+α1oldy1K11+α2oldy2K21+boldy1

​ 因此则有:

(34)y1i=3NαiyiKi1=E1+α1old y1K11+α2old y2K21+bold 

​ 最终:

(35)b1new =E1y1K11(α1new α1old )y2K21(α2new α2old )+bold 

  • 同理若0<α2<C,则有

    (36)b2new =E2y1K12(α1new α1old )y2K22(α2new α2old )+bold 

  • α1new,α2new同时满足0<αinew<C,则最终:

bnew=b1new+b2new2

  • α1new,α2new0或者C,那么最终:

    bnew=b1new+b2new2

    综上:

    (37)b={b1new,0<α1<Cb2new,0<α2<C12(b1new+b2new), others 

更新完α1α2后我们需要将Ei进行更新,以便后续的αib的求解。

(38)E1=i=3NαiyiKi1+α1newy1K11+α2newy2K21+bnewy1E2=i=3NαiyiKi2+α1newy1K12+α2newy2K22+bnewy2

总结

综上,SVM就介绍了,SVM看起来很简单,就是找到一条合适的线能够比较好的分割数据集。为了数值化“比较好”这个词,我们引出了间隔的概念,然后我们希望这个间隔足够大,并且所有的数据完美的分离在间隔的两边。于是这个问题就变成了在一定条件下的极值问题。然后我们选择使用拉格朗日乘子法去解决这个问题,其中在极值点会满足KKT条件。为了简化求解,我们通过Slater条件将问题转成了对偶问题。面对非线性问题,我们选择使用核技巧去解决,同时为了避免过拟合,我们选择使用软间隔;并最终使用SMO算法取得到合适的解。

说实话,本来只是想稍微的介绍一下SVM以及它的原理,自己其实对SVM也是属于之听过没真正的了解过的情况。听别人说SVM不是很难,但是最后却发现emm,越推感觉数学越奇妙。也许上面的内容看起来并不难,但是它却是由前人耗费无数的日日夜夜最终才得出了答案,也许这就是科学的魅力吧!

下面是参考的内容,其中强烈推荐《统计学习方法第2版》

参考

posted @   渣渣辉啊  阅读(2330)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示