【SVM预测】基于蝙蝠算法优化SVM实现预测matlab源码

SVM

1. 基本概念

支持向量机(Support Vector Machine, SVM)的基本模型是在特征空间上找到最佳的分离超平面使得训练集上正负样本间隔最大。SVM是用来解决二分类问题的有监督学习算法,在引入了核方法之后SVM也可以用来解决非线性问题。\ 一般SVM有下面三种:

  • 硬间隔支持向量机(线性可分支持向量机):当训练数据线性可分时,可通过硬间隔最大化学得一个线性可分支持向量机。
  • 软间隔支持向量机:当训练数据近似线性可分时,可通过软间隔最大化学得一个线性支持向量机。
  • 非线性支持向量机:当训练数据线性不可分时,可通过核方法以及软间隔最大化学得一个非线性支持向量机。

2. 硬间隔支持向量机

给定训练样本集D={(x1→,y1),(x2→,y2),…,(xn→,yn)}D={(x1→,y1),(x2→,y2),…,(xn→,yn)},yi∈{+1,−1}yi∈{+1,−1},ii表示第ii个样本,nn表示样本容量。分类学习最基本的想法就是基于训练集DD在特征空间中找到一个最佳划分超平面将正负样本分开,而SVM算法解决的就是如何找到最佳超平面的问题。超平面可通过如下的线性方程来描述:

w⃗ Tx⃗ +b=0(1)(1)w→Tx→+b=0

其中 w⃗ w→表示法向量,决定了超平面的方向; bb表示偏移量,决定了超平面与原点之间的距离。\ 对于训练数据集DD假设找到了最佳超平面 w∗→x⃗ +b∗=0w∗→x→+b∗=0,定义决策分类函数

f(x⃗ )=sign(w∗→x⃗ +b∗)(2)(2)f(x→)=sign(w∗→x→+b∗)

该分类决策函数也称为线性可分支持向量机。\ 在测试时对于线性可分支持向量机可以用一个样本离划分超平面的距离来表示分类预测的可靠程度,如果样本离划分超平面越远则对该样本的分类越可靠,反之就不那么可靠。\ 那么,什么样的划分超平面是最佳超平面呢?\ 对于图1有A、B、C三个超平面,很明显应该选择超平面B,也就是说超平面首先应该能满足将两类样本点分开。

【SVM预测】基于蝙蝠算法优化SVM实现预测matlab源码_第1张图片

图1

\ 对于图2的A、B、C三个超平面,应该选择超平面C,因为使用超平面C进行划分对训练样本局部扰动的“容忍”度最好,分类的鲁棒性最强。例如,由于训练集的局限性或噪声的干扰,训练集外的样本可能比图2中的训练样本更接近两个类目前的分隔界,在分类决策的时候就会出现错误,而超平面C受影响最小,也就是说超平面C所产生的分类结果是最鲁棒性的、是最可信的,对未见样本的泛化能力最强。

【SVM预测】基于蝙蝠算法优化SVM实现预测matlab源码_第2张图片

图2

\ 下面以图3中示例进行推导得出最佳超平面。

【SVM预测】基于蝙蝠算法优化SVM实现预测matlab源码_第3张图片

图3

\ 空间中超平面可记为 (w⃗ ,b)(w→,b),根据点到平面的距离公式,空间中任意点 x⃗ x→到超平面 (w⃗ ,b)(w→,b)的距离可写为:

r=w⃗ x⃗ +b||w⃗ ||(3)(3)r=w→x→+b||w→||

假设超平面 (w⃗ ,b)(w→,b)能将训练样本正确分类,那么对于正样本一侧的任意一个样本 (xi→,yi)∈D(xi→,yi)∈D,应该需要满足该样本点往超平面的法向量 w⃗ w→的投影到原点的距离大于一定值 cc的时候使得该样本点被预测为正样本一类,即存在数值cc使得当 w⃗ Txi→>cw→Txi→>c时 yi=+1yi=+1。 w⃗ Txi→>cw→Txi→>c又可写为 w⃗ Txi→+b>0w→Txi→+b>0。在训练的时候我们要求限制条件更严格点以使最终得到的分类器鲁棒性更强,所以我们要求 w⃗ Txi→+b>1w→Txi→+b>1。也可以写为大于其它距离,但都可以通过同比例缩放 w⃗ w→和 bb来使得使其变为1,因此为计算方便这里直接选择1。同样对于负样本应该有w⃗ Txi→+b<−1w→Txi→+b<−1时 yi=−1yi=−1。即:

{w⃗ Txi→+b≥+1,w⃗ Txi→+b≤−1,yi=+1yi=−1(4)(4){w→Txi→+b≥+1,yi=+1w→Txi→+b≤−1,yi=−1

亦即:

yi(w⃗ Txi→+b)≥+1(5)(5)yi(w→Txi→+b)≥+1

如图3所示,距离最佳超平面 w⃗ x⃗ +b=0w→x→+b=0最近的几个训练样本点使上式中的等号成立,它们被称为“支持向量”(support vector)。记超平面 w⃗ x⃗ +b=+1w→x→+b=+1和 w⃗ x⃗ +b=−1w→x→+b=−1之间的距离为 γγ,该距离又被称为“间隔”(margin),SVM的核心之一就是想办法将“间隔” γγ最大化。下面我们推导一下 γγ与哪些因素有关:\ 记超平面 w⃗ x⃗ +b=+1w→x→+b=+1上的正样本为 x+→x+→,超平面 w⃗ x⃗ +b=−1w→x→+b=−1上的负样本为 x−→x−→,则根据向量的加减法规则 x+→x+→减去 x−→x−→得到的向量在最佳超平面的法向量 w⃗ w→方向的投影即为“间隔” γγ:

γ=(x+→−x−→)w⃗ ||w⃗ ||=x+→w⃗ ||w⃗ ||−x−→w⃗ ||w⃗ ||(6)(6)γ=(x+→−x−→)w→||w→||=x+→w→||w→||−x−→w→||w→||

而 w⃗ x+→+b=+1w→x+→+b=+1, w⃗ x−→+b=−1w→x−→+b=−1,即:

{w⃗ x+→=1−bw⃗ x+→=−1−b(7)(7){w→x+→=1−bw→x+→=−1−b

\ 将(7)带入(6)可得:

γ=2||w⃗ ||(8)(8)γ=2||w→||

也就是说使两类样本距离最大的因素仅仅和最佳超平面的法向量有关!\ 要找到具有“最大间隔”(maximum margin)的最佳超平面,就是找到能满足式(4)中约束的参数 w⃗ w→、 bb使得γγ最大,即:

{maxw⃗ ,b2||w⃗ ||s.t.yi(w⃗ Txi→+b)≥+1,i=1,2,…,n(9)(9){maxw→,b2||w→||s.t.yi(w→Txi→+b)≥+1,i=1,2,…,n

显然(9)等价于

{minw⃗ ,b12||w⃗ ||2s.t.yi(w⃗ Txi→+b)≥+1,i=1,2,…,n(10)(10){minw→,b12||w→||2s.t.yi(w→Txi→+b)≥+1,i=1,2,…,n

这就是SVM的基本型。

2.1 拉格朗日对偶问题

根据SVM的基本型求解出w⃗ w→和bb即可得到最佳超平面对应的模型:

f(x⃗ )=sign(w⃗ x⃗ +b)(11)(11)f(x→)=sign(w→x→+b)

该求解问题本身是一个凸二次规划(convex quadratic propgramming)问题,可以通过开源的优化计算包进行求解,但是这样就无法体现SVM的精髓,我们可以将该凸二次规划问题通过拉格朗日对偶性来解决。\ 对于式(10)的每条约束添加拉格朗日乘子αi≥0αi≥0,则该问题的拉格朗日函数可写为:

L(w⃗ ,b,α⃗ )=12||w⃗ ||2−∑i=1nαi(yi(w⃗ Txi+b)−1)(12)(12)L(w→,b,α→)=12||w→||2−∑i=1nαi(yi(w→Txi+b)−1)

其中 α⃗ =(α1,α2,…,αn)α→=(α1,α2,…,αn)分别是对应着各个样本的拉格朗日乘子。\ 将 L(w⃗ ,b,α⃗ )L(w→,b,α→)对 w⃗ w→和 bb求偏导并将偏导数等于零可得:

{w⃗ =∑ni=1αiyixi→∑ni=1αiyi=0(13)(13){w→=∑i=1nαiyixi→∑i=1nαiyi=0

将(13)带入(12)消去 w⃗ w→和 bb就可得到(10)的对偶问题:

⎧⎩⎨⎪⎪⎪⎪maxα∑ni=1αi−12∑ni=1∑nj=1αiαjyiyjxi→Txj→s.t.αi≥0,i=1,2,…,n∑ni=1αiyi=0(14)(14){maxα∑i=1nαi−12∑i=1n∑j=1nαiαjyiyjxi→Txj→s.t.αi≥0,i=1,2,…,n∑i=1nαiyi=0

由(14)可知我们并不关心单个样本是如何的,我们只关心样本间两两的乘积,这也为后面核方法提供了很大的便利。\ 求解出 α⃗ α→之后,再求解出 w⃗ w→和 bb即可得到SVM决策模型:

f(x⃗ )=w⃗ Tx⃗ +b=∑i=1nαiyixi→Tx⃗ +b(15)(15)f(x→)=w→Tx→+b=∑i=1nαiyixi→Tx→+b

2.2 SVM问题的KKT条件

在(10)中有不等式约束,因此上述过程满足Karush-Kuhn-Tucker(KKT)条件:

⎧⎩⎨⎪⎪αi≥0yi(w⃗ Tx⃗ +b)−1≥0,i=1,2,…,nαi(yi(w⃗ Tx⃗ +b)−1)=0(16)(16){αi≥0yi(w→Tx→+b)−1≥0,i=1,2,…,nαi(yi(w→Tx→+b)−1)=0

对于任意样本 (xi→,yi)(xi→,yi)总有 αi=0αi=0或 yi(w⃗ Tx⃗ +b)−1=0yi(w→Tx→+b)−1=0。如果 αi=0αi=0则由式(15)可知该样本点对求解最佳超平面没有任何影响。当 αi>0αi>0时必有 yi(w⃗ Tx⃗ +b)−1=0yi(w→Tx→+b)−1=0,表明对应的样本点在最大间隔边界上,即对应着支持向量。也由此得出了SVM的一个重要性质: 训练完成之后,大部分的训练样本都不需要保留,最终的模型仅与支持向量有关。\ 那么对于式(14)该如何求解 α⃗ α→呢?很明显这是一个二次规划问题,可使用通用的二次规划算法来求解,但是SVM的算法复杂度是 O(n2)O(n2),在实际问题中这种开销太大了。为了有效求解该二次规划问题,人们通过利用问题本身的特性,提出了很多高效算法,Sequential Minimal Optimization(SMO)就是一个常用的高效算法。在利用SMO算法进行求解的时候就需要用到上面的KKT条件。利用SMO算法求出 α⃗ α→之后根据:

{w⃗ =∑ni=1αiyixi→yi(w⃗ Tx⃗ +b)−1=0(17)(17){w→=∑i=1nαiyixi→yi(w→Tx→+b)−1=0

即可求出 w⃗ w→和 bb。求解出w⃗ w→和 bb之后就可利用

f(x⃗ )=sign(w⃗ Tx⃗ +b)(18)(18)f(x→)=sign(w→Tx→+b)

进行预测分类了,注意在测试的时候不需要 −1−1,测试时没有训练的时候要求严格。

3. 软间隔支持向量机

在现实任务中很难找到一个超平面将不同类别的样本完全划分开,即很难找到合适的核函数使得训练样本在特征空间中线性可分。退一步说,即使找到了一个可以使训练集在特征空间中完全分开的核函数,也很难确定这个线性可分的结果是不是由于过拟合导致的。解决该问题的办法是在一定程度上运行SVM在一些样本上出错,为此引入了“软间隔”(soft margin)的概念,如图4所示:

【SVM预测】基于蝙蝠算法优化SVM实现预测matlab源码_第4张图片

图4

\ 具体来说,硬间隔支持向量机要求所有的样本均被最佳超平面正确划分,而软间隔支持向量机允许某些样本点不满足间隔大于等于1的条件 yi(w⃗ xi→+b)≥1yi(w→xi→+b)≥1,当然在最大化间隔的时候也要限制不满足间隔大于等于1的样本的个数使之尽可能的少。于是我们引入一个惩罚系数 C>0C>0,并对每个样本点 (xi→,yi)(xi→,yi)引入一个松弛变量(slack variables) ξ≥0ξ≥0,此时可将式(10)改写为

⎧⎩⎨⎪⎪⎪⎪minw⃗ ,b(12||w⃗ ||2+C∑ni=1ξi)s.t.yi(w⃗ Txi→+b)≥1−ξi,i=1,2,…,nξi≥0(19)(19){minw→,b(12||w→||2+C∑i=1nξi)s.t.yi(w→Txi→+b)≥1−ξi,i=1,2,…,nξi≥0

上式中约束条件改为 yi(w⃗ xi→+b)≥1−ξiyi(w→xi→+b)≥1−ξi,表示间隔加上松弛变量大于等于1;优化目标改为 minw⃗ ,b(12||w⃗ ||2+C∑ni=1ξi)minw→,b(12||w→||2+C∑i=1nξi)表示对每个松弛变量都要有一个代价损失 CξiCξi, CC越大对误分类的惩罚越大、CC越小对误分类的惩罚越小。\ 式(19)是软间隔支持向量机的原始问题。可以证明 w⃗ w→的解是唯一的, bb的解不是唯一的,bb的解是在一个区间内。假设求解软间隔支持向量机间隔最大化问题得到的最佳超平面是 w∗→x⃗ +b∗=0w∗→x→+b∗=0,对应的分类决策函数为

f(x⃗ )=sign(w∗→x⃗ +b∗)(20)(20)f(x→)=sign(w∗→x→+b∗)

f(x⃗ )f(x→)称为软间隔支持向量机。\ 类似式(12)利用拉格朗日乘子法可得到上式的拉格朗日函数

L(w⃗ ,b,α⃗ ,ξ⃗ ,μ⃗ )=12||w⃗ ||2+C∑i=1nξi−∑i=1nαi(yi(w⃗ Txi→+b)−1+ξi)−∑i=1nμiξi(21)(21)L(w→,b,α→,ξ→,μ→)=12||w→||2+C∑i=1nξi−∑i=1nαi(yi(w→Txi→+b)−1+ξi)−∑i=1nμiξi

其中 αi≥0αi≥0、 μi≥0μi≥0是拉格朗日乘子。\ 令 L(w⃗ ,b,α⃗ ,ξ⃗ ,μ⃗ )L(w→,b,α→,ξ→,μ→)分别对 w⃗ w→, bb,ξ⃗ ξ→求偏导并将偏导数为零可得:

⎧⎩⎨⎪⎪w⃗ =∑ni=1αiyixi→∑ni=1αiyi=0C=αi+μi(22)(22){w→=∑i=1nαiyixi→∑i=1nαiyi=0C=αi+μi

将式(22)带入式(21)便可得到式(19)的对偶问题:

⎧⎩⎨⎪⎪⎪⎪maxα⃗ ∑ni=1αi−12∑ni=1∑nj=1αiαjyiyjxi→Txj→s.t.∑ni=1αiyi=0,i=1,2,…,n0≤αi≤C(23)(23){maxα→∑i=1nαi−12∑i=1n∑j=1nαiαjyiyjxi→Txj→s.t.∑i=1nαiyi=0,i=1,2,…,n0≤αi≤C

对比软间隔支持向量机的对偶问题和硬间隔支持向量机的对偶问题可发现二者的唯一差别就在于对偶变量的约束不同,软间隔支持向量机对对偶变量的约束是 0≤αi≤C0≤αi≤C,硬间隔支持向量机对对偶变量的约束是 0≤αi0≤αi,于是可采用和硬间隔支持向量机相同的解法求解式(23)。同理在引入核方法之后同样能得到与式(23)同样的支持向量展开式。\ 类似式(16)对于软间隔支持向量机,KKT条件要求:

⎧⎩⎨⎪⎪⎪⎪⎪⎪αi≥0,μi≥0yi(w⃗ x⃗ +b)−1+ξi≥0αi(yi(w⃗ x⃗ +b)−1+ξi)=0ξi≥0,μiξi=0(24)(24){αi≥0,μi≥0yi(w→x→+b)−1+ξi≥0αi(yi(w→x→+b)−1+ξi)=0ξi≥0,μiξi=0

同硬间隔支持向量机类似,对任意训练样本 (xi→,yi)(xi→,yi),总有 αi=0αi=0或 yi(w⃗ x⃗ +b−1+ξi)yi(w→x→+b−1+ξi),若 αi=0αi=0,则该样本不会对最佳决策面有任何影响;若 αi>0αi>0则必有 yi(w⃗ x⃗ +b)=1−ξiyi(w→x→+b)=1−ξi,也就是说该样本是支持向量。由式(22)可知若 αi\ 0μi>0进而有 ξi=0ξi=0,即该样本处在最大间隔边界上;若 αi=Cαi=C则 μi=0μi=0此时如果 xii≤1xii≤1则该样本处于最大间隔内部,如果 ξi>1ξi>1则该样本处于最大间隔外部即被分错了。由此也可看出,软间隔支持向量机的最终模型仅与支持向量有关。

4. 非线性支持向量机

现实任务中原始的样本空间DD中很可能并不存在一个能正确划分两类样本的超平面。例如图4中所示的问题就无法找到一个超平面将两类样本进行很好的划分。\ 对于这样的问题可以通过将样本从原始空间映射到特征空间使得样本在映射后的特征空间里线性可分。例如对图5做特征映射z=x2+y2z=x2+y2可得到如图6所示的样本分布,这样就很好进行线性划分了。

【SVM预测】基于蝙蝠算法优化SVM实现预测matlab源码_第5张图片

图5

【SVM预测】基于蝙蝠算法优化SVM实现预测matlab源码_第6张图片

图6

\ 令 ϕ(x⃗ )ϕ(x→)表示将样本点 x⃗ x→映射后的特征向量,类似于线性可分支持向量机中的表示方法,在特征空间中划分超平面所对应的模型可表示为

f(x⃗ )=w⃗ Tx+b(25)(25)f(x→)=w→Tx+b

其中 w⃗ w→和 bb是待求解的模型参数。类似式(10),有

{minw⃗ ,b12||w⃗ ||2s.t.yi(w⃗ Tϕ(x⃗ )+b)≥1,i=1,2,…,n(26)(26){minw→,b12||w→||2s.t.yi(w→Tϕ(x→)+b)≥1,i=1,2,…,n

其拉格朗日对偶问题是

⎧⎩⎨⎪⎪⎪⎪maxα∑ni=1αi−12∑ni=1∑nj=1αiαjyiyjϕ(xi→T)ϕ(xj→)s.t.αi≥0,i=1,2,…,n∑ni=1αiyi=0(27)(27){maxα∑i=1nαi−12∑i=1n∑j=1nαiαjyiyjϕ(xi→T)ϕ(xj→)s.t.αi≥0,i=1,2,…,n∑i=1nαiyi=0

求解(27)需要计算 ϕ(xi→T)ϕ(xj→)ϕ(xi→T)ϕ(xj→),即样本映射到特征空间之后的内积,由于特征空间可能维度很高,甚至可能是无穷维,因此直接计算 ϕ(xi→T)ϕ(xj→)ϕ(xi→T)ϕ(xj→)通常是很困难的,在上文中我们提到其实我们根本不关心单个样本的表现,只关心特征空间中样本间两两的乘积,因此我们没有必要把原始空间的样本一个个地映射到特征空间中,只需要想法办求解出样本对应到特征空间中样本间两两的乘积即可。为了解决该问题可设想存在核函数:

κ(xi→,xj→)=ϕ(xi→T)ϕ(xj→)(28)(28)κ(xi→,xj→)=ϕ(xi→T)ϕ(xj→)

也就是说 xi→xi→与 xj→xj→在特征空间的内积等于它们在原始空间中通过函数 κ(⋅,⋅)κ(⋅,⋅)计算的结果,这给求解带来很大的方便。于是式(27)可写为:

⎧⎩⎨⎪⎪maxα∑ni=1αi−12∑ni=1∑nj=1αiαjyiyjκ(xi→,xj→)s.t.αi≥0,i=1,2,…,n∑ni=1αiyi=0(29)(29){maxα∑i=1nαi−12∑i=1n∑j=1nαiαjyiyjκ(xi→,xj→)s.t.αi≥0,i=1,2,…,n∑i=1nαiyi=0

同样的我们只关心在高维空间中样本之间两两点乘的结果而不关心样本是如何变换到高维空间中去的。求解后即可得到

f(x⃗ )=w⃗ Tϕ(x⃗ )+b=∑i=1nαiyiϕ(x⃗ )Tϕ(x⃗ )+b=∑i=1nαiyiκ(xi→,xj→)+b(30)(30)f(x→)=w→Tϕ(x→)+b=∑i=1nαiyiϕ(x→)Tϕ(x→)+b=∑i=1nαiyiκ(xi→,xj→)+b

剩余的问题同样是求解 αiαi,然后求解 w⃗ w→和 bb即可得到最佳超平面。

支持向量回归

支持向量机不仅可以用来解决分类问题还可以用来解决回归问题,称为支持向量回归(Support Vector Regression,SVR)。\ 对于样本(x⃗ ,y)(x→,y)通常根据模型的输出 f(x⃗ )f(x→)与真实值(即groundtruth) yiyi之间的差别来计算损失,当且仅当 f(x⃗ )=yif(x→)=yi时损失才为零。SVR的基本思路是允许预测值 f(x⃗ )f(x→)与 yiyi之间最多有 εε的偏差,当 |f(x⃗ )−yi|≤ε|f(x→)−yi|≤ε时认为预测正确不计算损失,仅当 |f(x⃗ )−yi|>ε|f(x→)−yi|>ε时才计算损失。SVR问题可描述为:

minw⃗ ,b(12||w⃗ ||2+C∑i=1nLε(f(x⃗ )−yi))(31)(31)minw→,b(12||w→||2+C∑i=1nLε(f(x→)−yi))

其中, C≥0C≥0为惩罚项, LεLε为损失函数,定义为:

Lε(z)={0,|z|≤ε|z|−ξ,otherwise(32)(32)Lε(z)={0,|z|≤ε|z|−ξ,otherwise

进一步地引入松弛变量 ξiξi, ξ^iξ^i,则新的最优化问题为:

⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪minw⃗ ,b,ξ,ξ^i(12||w⃗ ||2+C∑ni=1(ξi+ξ^i))s.t.f(xi→)−yi≤ε+ξi,i=1,2,…,nyi−f(x⃗ )≤ε+ξ^iξi≥0,ξ^i≥0(33)(33){minw→,b,ξ,ξ^i(12||w→||2+C∑i=1n(ξi+ξ^i))s.t.f(xi→)−yi≤ε+ξi,i=1,2,…,nyi−f(x→)≤ε+ξ^iξi≥0,ξ^i≥0

这就是SVR的原始问题。类似地引入拉格朗日乘子 μi≥0μi≥0, μ^i≥0μ^i≥0, αi≥0αi≥0, α^i≥0α^i≥0,则对应的拉格朗日函数为:

L(w⃗ ,b,α⃗ ,α^⃗ ,ξ⃗ ,ξ^⃗ ,μ⃗ ,μ^⃗ )=12||w⃗ ||2+C∑i=1n(ξ+ξ^)−∑i=1nμiξi−∑i=1nμ^iξ^i+∑i=1nαi(f(xi→)−yi−ε−ξ)+∑i=1nα^i(yi−f(xi→)−ε−ξ^i)(34)(34)L(w→,b,α→,α^→,ξ→,ξ^→,μ→,μ^→)=12||w→||2+C∑i=1n(ξ+ξ^)−∑i=1nμiξi−∑i=1nμ^iξ^i+∑i=1nαi(f(xi→)−yi−ε−ξ)+∑i=1nα^i(yi−f(xi→)−ε−ξ^i)

令 L(w⃗ ,b,α⃗ ,α^⃗ ,ξ⃗ ,ξ^⃗ ,μ⃗ ,μ^⃗ )L(w→,b,α→,α^→,ξ→,ξ^→,μ→,μ^→)对 w⃗ ,b,ξ⃗ ,ξ^⃗ w→,b,ξ→,ξ^→的偏导数为零可得:

⎧⎩⎨⎪⎪⎪⎪⎪⎪w⃗ =∑ni=1()xi→∑ni=1(α^i−αi)=0C=αi+μiC=α^i+μ^i(35)(35){w→=∑i=1n()xi→∑i=1n(α^i−αi)=0C=αi+μiC=α^i+μ^i

将式(35)代入式(34)即可得到SVR的对偶问题:

{maxα,α^∑ni=1(yi(α^i−αi)−ε(α^i+αi)−12∑ni=1∑nj=1(α^i−αi)(α^j−αj)xi→Txj→)s.t.∑ni=1(α^i−αi)=00≤αi,α^i≤C(36)(36){maxα,α^∑i=1n(yi(α^i−αi)−ε(α^i+αi)−12∑i=1n∑j=1n(α^i−αi)(α^j−αj)xi→Txj→)s.t.∑i=1n(α^i−αi)=00≤αi,α^i≤C

其KKT条件为:

⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪αi(f(xi→)−yi−ε−ξi)=0α^i(f(xi→)−yi−ε−ξ^i)=0αiα^i=0,ξiξ^i=0(C−αi)ξi=0,(C−α^i)ξ^i=0(37)(37){αi(f(xi→)−yi−ε−ξi)=0α^i(f(xi→)−yi−ε−ξ^i)=0αiα^i=0,ξiξ^i=0(C−αi)ξi=0,(C−α^i)ξ^i=0

SVR的解形如:

f(x⃗ )=∑i=1n(α^i−αi)xi→Tx⃗ +b(38)(38)f(x→)=∑i=1n(α^i−αi)xi→Tx→+b

进一步地如果引入核函数则SVR可表示为:

f(x⃗ )=∑i=1n(α^i−αi)κ(xi→,x⃗ )+b(39)(39)f(x→)=∑i=1n(α^i−αi)κ(xi→,x→)+b

其中 κ(xi→,x⃗ )=ϕ(xi→)Tϕ(x⃗ )κ(xi→,x→)=ϕ(xi→)Tϕ(x→)为核函数。

常用核函数

| 名称 | 表达式 | 参数 | | -------- | ------------------------------------------------------------ | ------------- | | 线性核 | κ(xi→,xj→)=xi→Txj→κ(xi→,xj→)=xi→Txj→ |   | | 多项式核 | κ(xi→,xj→)=(xi→Txj→)nκ(xi→,xj→)=(xi→Txj→)n | n≥1n≥1为多项式的次数 | | 高斯核(RBF) | κ(xi→,xj→)=exp(−∥xi→−xj→∥22σ2)κ(xi→,xj→)=exp(−‖xi→−xj→‖22σ2) | σ>0σ>0为高斯核的带宽 | | 拉普拉斯核 | κ(xi→,xj→)=exp(−∥xi−xj∥σ)κ(xi→,xj→)=exp(−‖xi−xj‖σ) | σσ>0 | | Sigmoid核 | κ(xi→,xj→)=tanh(βxi→Txj→+θ)κ(xi→,xj→)=tanh(βxi→Txj→+θ) | thah为双曲正切函数 |

5. SVM的优缺点

优点:\ SVM在中小量样本规模的时候容易得到数据和特征之间的非线性关系,可以避免使用神经网络结构选择和局部极小值问题,可解释性强,可以解决高维问题。\ 缺点:\ SVM对缺失数据敏感,对非线性问题没有通用的解决方案,核函数的正确选择不容易,计算复杂度高,主流的算法可以达到O(n2)O(n2)的复杂度,这对大规模的数据是吃不消的。

6. 参考文献

周志华. 机器学习 [D]. 清华大学出版社,2016.\ 华校专、王正林. Python大战机器学习 [D]. 电子工业出版社,2017.\ Peter Flach著、段菲译. 机器学习 [D]. 人民邮电出版社,2016.\ Understanding Support Vector Machine algorithm from examples (along with code)\ KKT条件介绍

 

``` tic % 计时器 %% 清空环境变量 close all clear clc %format compact load('ISSL-Isomap.mat') % load CMPE原始 % mappedX=X; %% 数据提取 zc=mappedX(1:60,:);%特征输入 lie=mappedX(61:120,:); mo=mappedX(121:180,:); que=mappedX(181:240,:); duan=mappedX(241:300,:); mm=size(zc,1); nn=20;

a=ones(mm,1);%行为总体样本数 b=2ones(mm,1); c=3ones(mm,1); d=4ones(mm,1); f=5ones(mm,1);

n1=randperm(size(zc,1)); n2=randperm(size(lie,1)); n3=randperm(size(mo,1)); n4=randperm(size(que,1)); n5=randperm(size(duan,1));

trainwine = [zc(n1(1:nn),:);lie(n2(1:nn),:);mo(n3(1:nn),:);que(n4(1:nn),:);duan(n5(1:nn),:)]; % 相应的训练集的标签也要分离出来 trainwinelabels = [a(1:nn,:);b(1:nn,:);c(1:nn,:);d(1:nn,:);f(1:nn,:)]; % 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集 testwine = [zc(n1((nn+1):mm),:);lie(n2((nn+1):mm),:);mo(n3((nn+1):mm),:);que(n4((nn+1):mm),:);duan(n5((nn+1):mm),:)]; % 相应的测试集的标签也要分离出来 testwinelabels = [a((nn+1):mm,:);b((nn+1):mm,:);c((nn+1):mm,:);d((nn+1):mm,:);f((nn+1):mm,:)]; %% 数据预处理 % 数据预处理,将训练集和测试集归一化到[0,1]区间 [mtrain,ntrain] = size(trainwine); [mtest,ntest] = size(testwine);

dataset = [trainwine;testwine]; % mapminmax为MATLAB自带的归一化函数 [datasetscale,ps] = mapminmax(dataset',0,1); datasetscale = dataset_scale';

trainwine = datasetscale(1:mtrain,:); testwine = datasetscale( (mtrain+1):(mtrain+mtest),: );

%% Default parameters 默认参数

n=10; % Population size, typically10 to 40 Ngen=150; % Number of generations A=0.5; % Loudness (constant or decreasing) r=0.5; % Pulse rate (constant or decreasing) % This frequency range determines the scalings % You should change these values if necessary Qmin=0; % Frequency minimum Qmax=2; % Frequency maximum % Iteration parameters Niter=0; % Total number of function evaluations %这是什么意思??? % Dimension of the search variables d=2; % Number of dimensions % Lower limit/bounds/ a vector Lb=[0.01,0.01]; % 参数取值下界 Ub=[100,100]; % 参数取值上界 % Initializing arrays Q=zeros(n,1); % Frequency v=zeros(n,d); % Velocities % Initialize the population/solutions

% Output/display disp(['Number of evaluations: ',num2str(N_iter)]); disp(['Best =',num2str(best),' fmin=',num2str(fmin)]);

%% 利用最佳的参数进行SVM网络训练 cmdgwosvm = ['-c ',num2str(best(:,1)),' -g ',num2str(best(:,2))]; modelgwosvm = svmtrain(trainwinelabels,trainwine,cmdgwosvm); %% SVM网络预测 [predictlabel] = svmpredict(testwinelabels,testwine,modelgwosvm); total = length(testwinelabels);% 打印测试集分类准确率 right = length(find(predictlabel == testwinelabels)); Accuracy=right/total; % disp('打印测试集分类准确率'); % str = sprintf( 'Accuracy = %g%% (%d/%d)',accuracy(1),right,total); % disp(str); %% 结果分析 % 测试集的实际分类和预测分类图 figure; hold on; plot(testwinelabels,'o'); plot(predict_label,'r*'); xlabel('测试集样本','FontSize',12); ylabel('类别标签','FontSize',12); legend('实际测试集分类','预测测试集分类'); title('测试集的实际分类和预测分类图','FontSize',12); grid on snapnow

figure plot(1:N_gen,AAA); ```

【SVM预测】基于蝙蝠算法优化SVM实现预测matlab源码_第7张图片

你可能感兴趣的:(算法,机器学习,人工智能,深度学习,支持向量机)