机器学习笔记(二)SVM原理


SVM是非常常用的分类器算法,其能够在二分类问题上有很好的表现,并且具有处理非线性数据的能力。其参数容易调节,但比较容易出现过拟合现象。

SVM原理

SVM最优化问题

SVM 的目标是找到一个由支持向量所确定的超平面,该超平面能够使得各类样本到超平面的距离最远。如图所示:
在这里插入图片描述

在m维空间中,任意超平面可以用以下方程来描述:
w T x + b = 0 w^{T} x+b=0 wTx+b=0
其中 w w w为超平面系数:
w = ( w 1 w 2 ⋮ w m ) w=\left(\begin{array}{c} w_{1} \\ w_{2} \\ \vdots \\ w_{m} \end{array}\right) w=w1w2wm
样本 x x x同样用列向量表示:
x = ( x 1 x 2 ⋮ x m ) x=\left(\begin{array}{c} x_{1} \\ x_{2} \\ \vdots \\ x_{m} \end{array}\right) x=x1x2xm
那么样本 x x x到超平面的距离可以表示为:
∣ w T x + b ∣ ∥ w ∥ \frac{\left|w^{T} x+b\right|}{\|w\|} wwTx+b
其中 ∥ w ∥ = w 1 2 + … w n 2 \|w\|=\sqrt{w_{1}^{2}+\ldots w_{n}^{2}} w=w12+wn2
支持向量到超平面的距离为1,非支持向量的样本到超平面的距离大于1,于是有:
{ w T x + b ≥ 1 y = 1 w T x + b ≤ − 1 y = − 1 \left\{\begin{array}{l} w^{T} x+b \geq 1 \quad y=1 \\ w^{T} x+b \leq-1 \quad y=-1 \end{array}\right. {wTx+b1y=1wTx+b1y=1
该式可以简化为:
y ( w T x + b ) ≥ 1 y\left(w^{T} x+b\right) \geq 1 y(wTx+b)1
那么支持向量到超平面的距离为:
d = y ( w T x + b ) ∥ w ∥ d=\frac{y\left(w^{T} x+b\right)}{\|w\|} d=wy(wTx+b)
SVM的优化目标是使得该距离最大化,并乘以2方便后续求导,对优化结果没有影响:
max ⁡ 2 ∗ y ( w T x + b ) ∥ w ∥ \max 2 * \frac{y\left(w^{T} x+b\right)}{\|w\|} max2wy(wTx+b)
由于在支持向量上, y ( w T x + b ) = 1 y\left(w^{T} x+b\right)=1 y(wTx+b)=1,所以上式可以进一步简化为:
max ⁡ 2 ∥ w ∥ \max \frac{2}{\|w\|} maxw2
转化为最小化为问题并乘方抵消根号后得到了SVM的最优化问题:
min ⁡ 1 2 ∥ w ∥ 2  s.t.  y i ( w T x i + b ) ≥ 1 \min \frac{1}{2}\|w\|^{2} \text { s.t. } \quad y_{i} \quad\left(w^{T} x_{i}+b\right) \geq 1 min21w2 s.t. yi(wTxi+b)1
在实际训练过程中,样本不会被超平面严格地分为两类,个别样本会越过超平面而被分类错误,为了减小这类样本对SVM的影响,需要增加软间隔。相比于硬间隔的约束条件,增加软间隔后,SVM允许个别样本点出现在间隔带内,如图所示:
在这里插入图片描述

确定软间隔的方式是为每一个样本引入一个松弛变量 ξ i \xi_{i} ξi,此时SVM的目标函数为:
min ⁡ α 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i s.t  y i ( w T x i + b ) ≫ 1 − ξ i ξ i ≥ 0 \begin{array}{c} \min _{\alpha} \frac{1}{2}\|w\|^{2}+C \sum_{i=1}^{N} \xi_{i} \\ \text {s.t } y_{i}\left(w^{T} x_{i}+b\right) \gg 1-\xi_{i} \\ \xi_{i} \geq 0 \end{array} minα21w2+Ci=1Nξis.t yi(wTxi+b)1ξiξi0
其中C是惩罚系数,结合拉格朗日函数,KKT条件等得到最优化目标函数为:
min ⁡ α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i , x j ) − ∑ i = 1 N α i  s.t  ∑ i = 1 n y i α i = 0 0 ≤ α i ≤ C \begin{array}{c} \min _{\alpha} \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j} K\left(x_{i}, x_{j}\right)-\sum_{i=1}^{N} \alpha_{i} \\ \text { s.t } \sum_{i=1}^{n} y_{i} \alpha_{i}=0 \\ 0 \leq \alpha_{i} \leq C \end{array} minα21i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαi s.t i=1nyiαi=00αiC

SVM的增量学习

由于在实际过程中,故障诊断数据集往往是不充足的,而使用全部历史数据和新数据进行模型的重新训练需耗费大量时间,不利于诊断模型的实际应用。基于支持向量机的增量学习方法具有在学习过程中的不断加强认识,不断扩充知识库以及不断逐步学习的能力。
基于支持向量机的增量学习方法首先将按照传统支持向量机的步骤学习历史数据集并保存决策超平面与支持向量。仅保存支持向量可以使得后续学习步骤节约大量的存储空间与计算资源。当该方法学习后续新数据集时,会将旧数据集的支持向量与新数据集共同组成训练集并实现模型知识库更新。
(i) 首先使用支持向量机学习历史数据集 ,并获得决策超平面与所有支持向量,对于历史数据集 S S S的最优化目标函数为:
min ⁡ α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i , x j ) − ∑ i = 1 N α i  s.t  ∑ i = 1 n y i α i = 0 0 ≤ α i ≤ C \begin{array}{c} \min _{\alpha} \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j} K\left(x_{i}, x_{j}\right)-\sum_{i=1}^{N} \alpha_{i} \\ \text { s.t } \sum_{i=1}^{n} y_{i} \alpha_{i}=0 \\ 0 \leq \alpha_{i} \leq C \end{array} minα21i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαi s.t i=1nyiαi=00αiC
(ii) 将旧数据集的支持向量与新数据集 I I I共同组成训练集并完成支持向量机的更新。该算法的目标函数为:
min ⁡ w , b , ξ 1 2 ∥ w ∥ 2 + C ( ∑ t ∈ I ξ i + L ∑ i ∈ S ξ i ) s.t  y i ( w T x i + b ) ≥ 1 − ξ i ξ i > 0 \begin{array}{c} \min _{w, b, \xi} \frac{1}{2}\|w\|^{2}+C\left(\sum_{t \in I} \xi_{i}+L \sum_{i \in S} \xi_{i}\right) \\ \text {s.t } y_{i}\left(w^{T} x_{i}+b\right) \geq 1-\xi_{i} \\ \xi_{i}>0 \end{array} minw,b,ξ21w2+C(tIξi+LiSξi)s.t yi(wTxi+b)1ξiξi>0
其中 I I I是训练集中属于新数据集中的部分, S S S是训练集中属于旧数据集的支持向量的部分。 L L L是使得旧数据集的支持向量在训练过程中权重更大的常数。使用 L L L的原因是旧数据集仅保留了支持向量数据,相对于新数据存在严重的数据不平衡,所以需要对旧数据集的支持向量采用更大的惩罚系数,保证最终的超平面不会偏向新数据集。L一般取如下值:
L = N ′ S V S L=\frac{N^{\prime}}{S V_{S}} L=SVSN
其中 N ′ N^{\prime} N是旧数据集的样本数量, S V S S V_{S} SVS是支持向量数量。最优化目标函数为:
min ⁡ α ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i , x j ) − ∑ i = 1 N α i  s.t  ∑ i = 1 N α i y i = 0 α i ≥ 0 { C L = α i + u i , ( i ∈ s ) C = α i + u i , ( i ∈ I ) \begin{array}{l} \min _{\alpha} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j} K\left(x_{i}, x_{j}\right)-\sum_{i=1}^{N} \alpha_{i} \\ \text { s.t } \sum_{i=1}^{N} \alpha_{i} y_{i}=0 \\ \quad \alpha_{i} \geq 0 \\ \quad\left\{\begin{array}{l} C L=\alpha_{i}+u_{i},(i \in s) \\ C=\alpha_{i}+u_{i},(i \in I) \end{array}\right. \end{array} minαi=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαi s.t i=1Nαiyi=0αi0{CL=αi+ui,(is)C=αi+ui,(iI)
其中 是对应约束条件 的拉格朗日算子。
(iii) 保存求得的支持向量与决策平面,对于每一个新数据集,重复步骤(ii),完成模型更新。
基于SVM的增量学习技术路线如图所示
基于SVM的增量学习技术路线

SVM的参数

在使用过程中一般都是使用RBF核,其具有最好的性能,能够很好地处理非线性数据。将数据标准化后再由SVM训练能够有效地提高训练效率和性能。
在实验中有特点的C和Gamma参数能够使得验证集分类成绩达到99.99%,交叉验证效果表现良好,但是在未经过训练的测试集上效果表现很差。
降低C和Gamma能够有效降低模型的过拟合问题

代码实现

sklearn封装实现:
https://github.com/beiluo-horizon/Machine-Learning-Model/blob/master/SVM_Method.py
libsvm封装实现:
没有实现自动寻优的函数
https://github.com/beiluo-horizon/Machine-Learning-Model/blob/master/libsvm.py

参考

https://zhuanlan.zhihu.com/p/77750026?utm_source=wechat_session
https://zhuanlan.zhihu.com/p/31886934

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值