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=⎝⎜⎜⎜⎛w1w2⋮wm⎠⎟⎟⎟⎞
样本
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=⎝⎜⎜⎜⎛x1x2⋮xm⎠⎟⎟⎟⎞
那么样本
x
x
x到超平面的距离可以表示为:
∣
w
T
x
+
b
∣
∥
w
∥
\frac{\left|w^{T} x+b\right|}{\|w\|}
∥w∥∣∣wTx+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+b≥1y=1wTx+b≤−1y=−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=∥w∥y(wTx+b)
SVM的优化目标是使得该距离最大化,并乘以2方便后续求导,对优化结果没有影响:
max
2
∗
y
(
w
T
x
+
b
)
∥
w
∥
\max 2 * \frac{y\left(w^{T} x+b\right)}{\|w\|}
max2∗∥w∥y(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\|}
max∥w∥2
转化为最小化为问题并乘方抵消根号后得到了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
min21∥w∥2 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α21∥w∥2+C∑i=1Nξis.t yi(wTxi+b)≫1−ξiξi≥0
其中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α21∑i=1N∑j=1NαiαjyiyjK(xi,xj)−∑i=1Nαi s.t ∑i=1nyiαi=00≤αi≤C
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α21∑i=1N∑j=1NαiαjyiyjK(xi,xj)−∑i=1Nαi s.t ∑i=1nyiαi=00≤αi≤C
(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,ξ21∥w∥2+C(∑t∈Iξi+L∑i∈Sξ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=1N∑j=1NαiαjyiyjK(xi,xj)−∑i=1Nαi s.t ∑i=1Nαiyi=0αi≥0{CL=αi+ui,(i∈s)C=αi+ui,(i∈I)
其中 是对应约束条件 的拉格朗日算子。
(iii) 保存求得的支持向量与决策平面,对于每一个新数据集,重复步骤(ii),完成模型更新。
基于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