第六章 支持向量机
6.1 SVM基本型
6.1.1 基本型
给定训练样例集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
m
,
y
m
)
}
,
y
i
∈
{
−
1
,
+
1
}
D=\{(\boldsymbol x_1,y_1),(\boldsymbol x_2,y_2),\cdots,(\boldsymbol x_m,y_m)\},y_i\in\{-1,+1\}
D={(x1,y1),(x2,y2),⋯,(xm,ym)},yi∈{−1,+1},我们可用超平面来划分特征(类似感知机),特征空间中的超平面方程为:
w
T
x
+
b
=
0
\begin{aligned} \boldsymbol{w}^\mathbf{T}\boldsymbol{x}+b=0 \end{aligned}
wTx+b=0
我们称距离超平面最近的几个训练样本点为支持向量(support vector),规定支持向量满足
y
i
(
w
T
x
i
+
b
)
=
1
y_i(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}_i+b)=1
yi(wTxi+b)=1,两个异类支持向量到超平面的距离之和称为间隔(margin):
γ
=
2
∣
∣
w
∣
∣
\begin{aligned} \gamma=\frac{2}{||\boldsymbol w||} \end{aligned}
γ=∣∣w∣∣2
如下图所示,红线就是我们想找的超平面:
![](https://i-blog.csdnimg.cn/blog_migrate/33a9da0afede3a747293f8af5f6b61e9.png#pic_center)
支持向量机(Support Vector Machine,SVM)的目标就是找到间隔最小的超平面:
min
w
,
b
2
∣
∣
w
∣
∣
s.t.
y
i
(
w
T
x
i
+
b
)
⩾
1
,
i
=
1
,
2
,
⋯
,
m
\begin{aligned} \underset{\boldsymbol w,b}{\text{min}}\quad &\frac{2}{||\boldsymbol w||} \\ \text{s.t.}\quad &y_i(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}_i+b)\geqslant1,\quad i=1,2,\cdots,m \\ \end{aligned}
w,bmins.t.∣∣w∣∣2yi(wTxi+b)⩾1,i=1,2,⋯,m
为方便求解,我们取上式的等价形式:
min
w
,
b
1
2
∣
∣
w
∣
∣
2
s.t.
y
i
(
w
T
x
i
+
b
)
⩾
1
,
i
=
1
,
2
,
⋯
,
m
\begin{aligned} \underset{\boldsymbol w,b}{\text{min}}\quad &\frac{1}{2}||\boldsymbol w||^2 \\ \text{s.t.}\quad &y_i(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}_i+b)\geqslant1,\quad i=1,2,\cdots,m \\ \end{aligned}
w,bmins.t.21∣∣w∣∣2yi(wTxi+b)⩾1,i=1,2,⋯,m
这就是支持向量机的基本型。
6.1.2 求解SVM
显而易见,支持向量机是一个凸优化问题,因此有多种方法进行求解,这里为了方便引出后续概念,采用拉格朗日对偶(lagrange duality)方法进行求解。
关于拉格朗日对偶相关的凸优化内容问题,请点击这里。
经证明,支持向量机是一个强对偶问题,因此原问题的最小值就是对偶问题(dual problem)的最大值。
经计算,可以得到对偶问题:
max
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
s.t.
∑
i
=
1
m
α
i
y
i
=
0
α
i
⩾
0
,
i
=
1
,
2
,
⋯
,
m
\begin{aligned} \underset{\boldsymbol\alpha}{\max}\quad &\sum^m_{i=1}\alpha_i-\frac{1}{2}\sum^m_{i=1}\sum^m_{j=1}\alpha_i\alpha_jy_iy_j\boldsymbol x^\mathbf T_i\boldsymbol x_j \\ \text{s.t.}\quad &\sum^m_{i=1}\alpha_iy_i=0\\ &\alpha_i\geqslant0,\quad i=1,2,\cdots,m \\ \end{aligned}
αmaxs.t.i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxji=1∑mαiyi=0αi⩾0,i=1,2,⋯,m
其KKT条件为:
{
α
i
⩾
0
y
i
(
w
T
x
i
+
b
)
−
1
⩾
0
α
i
(
y
i
(
w
T
x
i
+
b
)
−
1
)
=
0
\begin{aligned} \left\{\begin{matrix}\alpha_i\geqslant0\\y_i(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}_i+b)-1\geqslant0 \\\alpha_i(y_i(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}_i+b)-1)=0\end{matrix}\right. \end{aligned}
⎩
⎨
⎧αi⩾0yi(wTxi+b)−1⩾0αi(yi(wTxi+b)−1)=0
求解该对偶问题,得到模型:
f
(
x
)
=
∑
i
=
1
m
α
i
y
i
x
i
T
x
i
+
b
f(\boldsymbol x)=\sum^m_{i=1}\alpha_iy_i\boldsymbol x^\mathbf T_i\boldsymbol x_i+b
f(x)=i=1∑mαiyixiTxi+b
显然,对于支持向量机来说,大部分的训练样本都不需要保留,最终结果仅与支持向量有关(因为其对应
α
≠
0
\alpha\neq0
α=0)。
在求解方法上,可采用SMO等算法,这里不做详细展开。
6.2 核函数
若数据集在特征空间内非线性可分,则仅使用SVM基本型无法解决问题。
对于此问题,可将样本从原始空间映射到一个更高维的特征空间,使得样本在新特征空间内线性可分。(线性回归:像,太像了)
首先给出一条定理:如果原始空间是有限维,则一定存在一个高维特征空间使样本线性可分
令 ϕ ( x ) \phi(\boldsymbol x) ϕ(x)表示将 x \boldsymbol x x映射后的特征向量,定义核函数(kernel function) κ ( x i , x j ) = ϕ ( x i ) T ϕ ( x j ) \kappa(\boldsymbol x_i,\boldsymbol x_j)=\phi(\boldsymbol x_i)^\bold T\phi(\boldsymbol x_j) κ(xi,xj)=ϕ(xi)Tϕ(xj)
则模型可写为
f
(
x
)
=
∑
i
=
1
m
α
i
y
i
κ
(
x
i
,
x
j
)
+
b
f(\boldsymbol x)=\sum^m_{i=1}\alpha_iy_i\kappa(\boldsymbol x_i,\boldsymbol x_j)+b
f(x)=i=1∑mαiyiκ(xi,xj)+b
只要一个对称函数所对应的核矩阵(kernel matrix)半正定,则它就可以当作核函数使用,换而言之,任何一个核函数都隐式地定义了一个再生核希尔伯特空间(RKHS)。
其中,核矩阵
K
\bold K
K为:
K
=
(
κ
(
x
1
,
x
1
)
⋯
κ
(
x
1
,
x
j
)
⋯
κ
(
x
1
,
x
m
)
⋮
⋱
⋮
⋱
⋮
κ
(
x
i
,
x
1
)
⋯
κ
(
x
i
,
x
j
)
⋯
κ
(
x
i
,
x
m
)
⋮
⋱
⋮
⋱
⋮
κ
(
x
m
,
x
1
)
⋯
κ
(
x
m
,
x
j
)
⋯
κ
(
x
m
,
x
m
)
)
\bold K=\begin{pmatrix} \kappa(\boldsymbol x_1,\boldsymbol x_1) & \cdots & \kappa(\boldsymbol x_1,\boldsymbol x_j) & \cdots & \kappa(\boldsymbol x_1,\boldsymbol x_m) \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ \kappa(\boldsymbol x_i,\boldsymbol x_1) & \cdots & \kappa(\boldsymbol x_i,\boldsymbol x_j) & \cdots & \kappa(\boldsymbol x_i,\boldsymbol x_m) \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ \kappa(\boldsymbol x_m,\boldsymbol x_1) & \cdots & \kappa(\boldsymbol x_m,\boldsymbol x_j) & \cdots & \kappa(\boldsymbol x_m,\boldsymbol x_m) \\ \end{pmatrix}
K=
κ(x1,x1)⋮κ(xi,x1)⋮κ(xm,x1)⋯⋱⋯⋱⋯κ(x1,xj)⋮κ(xi,xj)⋮κ(xm,xj)⋯⋱⋯⋱⋯κ(x1,xm)⋮κ(xi,xm)⋮κ(xm,xm)
但是我们一般不知道什么样的核函数是好用的,如果核函数的选择不合适,则很可能导致性能不佳。
在选择核函数方面,就需要一些经验指导了,下表列出了一些常用核函数:
人们发展出一系列基于核函数的学习方法,统称为核方法(kernel methods),最常见的便是将核函数引入线性学习器,使其拓展为非线性学习器。
6.3 软间隔
显然,SVM不允许有任何一个错误样本,但这在现实生活中显然是不常见的。
因此我们允许SVM在某些样本上出错,即允许某些样本不满足约束,但在最大化间隔的同时,不满足约束的样本应该尽量少。
对优化目标进行改进:
min
w
,
b
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
m
l
(
y
i
(
w
T
x
i
+
b
)
−
1
)
\begin{aligned} \underset{\boldsymbol w,b}{\text{min}}\quad &\frac{1}{2}||\boldsymbol w||^2+C\sum^m_{i=1}\mathscr l(y_i(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}_i+b)-1) \\ \end{aligned}
w,bmin21∣∣w∣∣2+Ci=1∑ml(yi(wTxi+b)−1)
式中
C
>
0
C>0
C>0是一个常数,
l
\mathscr l
l是损失函数,常采用以下三种形式:
hinge损失
:
l
hinge
(
z
)
=
max
(
0
,
1
−
z
)
指数损失
:
l
exp
(
z
)
=
exp
(
−
z
)
对率损失
:
l
log
(
z
)
=
log
(
1
+
exp
(
−
z
)
)
\begin{aligned} &\text{hinge损失}:\mathscr l_\text{hinge}(z)=\max(0,1-z)\\ &指数损失:\mathscr l_\text{exp}(z)=\exp(-z)\\ &对率损失:\mathscr l_\text{log}(z)=\log(1+\exp(-z))\\ \end{aligned}
hinge损失:lhinge(z)=max(0,1−z)指数损失:lexp(z)=exp(−z)对率损失:llog(z)=log(1+exp(−z))
使用hinge损失,引入松弛变量解得(具体求解过程略,请参考西瓜书与南瓜书):
min
w
,
b
,
ξ
i
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
m
ξ
i
s.t.
y
i
(
w
T
x
i
+
b
)
⩾
1
−
ξ
i
ξ
i
⩾
0
,
i
=
1
,
2
,
⋯
,
m
\begin{aligned} \underset{\boldsymbol w,b,\xi_i}{\text{min}}\quad &\frac{1}{2}||\boldsymbol w||^2+C\sum^m_{i=1}\xi_i \\ \text{s.t.}\quad &y_i(\boldsymbol{w}^\mathbf{T}\boldsymbol{x}_i+b)\geqslant1-\xi_i\\ &\xi_i\geqslant0,\quad i=1,2,\cdots,m \\ \end{aligned}
w,b,ξimins.t.21∣∣w∣∣2+Ci=1∑mξiyi(wTxi+b)⩾1−ξiξi⩾0,i=1,2,⋯,m
上式即为软间隔支持向量机,相对的,6.1节中得到的SVM为硬间隔支持向量机。
更一般的,可以将优化目标写为这种形式:
min
f
Ω
(
f
)
+
C
∑
i
=
1
m
l
(
f
(
x
i
)
,
y
i
)
\begin{aligned} \underset{f}{\text{min}}\quad &\Omega(f)+C\sum^m_{i=1}\mathscr l(f(\boldsymbol x_i),y_i) \\ \end{aligned}
fminΩ(f)+Ci=1∑ml(f(xi),yi)
其中前一项称为结构风险(structural risk),表述了我们希望获得具有何种性质的模型,后一项称为经验风险(empirical tisk),用于描述模型与训练数据的契合程度。
从降低过拟合角度分析,可将前一项称为正则化项, C C C称为正则化常数,常用向量范数当作正则化项。
6.4 支持向量回归
支持向量回归(Support Vector Regression,SVR)类似线性回归,但仅当 f ( x ) f(\boldsymbol x) f(x)与 y y y之间的差别绝对值大于 ϵ \epsilon ϵ时才计算损失。
形象来说,就是把一条线变成了一根带子,如图:
![](https://i-blog.csdnimg.cn/blog_migrate/518267528a1b7c6c48f421d34f5979d8.png#pic_center)
因此,SVR的优化目标为:
min
w
,
b
1
2
∣
∣
w
∣
∣
2
+
C
∑
i
=
1
m
l
ϵ
(
f
(
x
i
)
−
y
i
)
l
ϵ
(
z
)
=
{
0
if
∣
z
∣
⩽
ϵ
∣
z
∣
−
ϵ
,
otherwise
\begin{aligned} \underset{\boldsymbol w,b}{\text{min}}\quad \frac{1}{2}||\boldsymbol w||^2+C\sum^m_{i=1}\mathscr l_\epsilon(f(\boldsymbol x_i&)-y_i) \\ \mathscr l_\epsilon(z)=\begin{cases}0 & \text{ if } |z|\leqslant\epsilon \\|z|-\epsilon, & \text{ otherwise }\end{cases} \end{aligned}
w,bmin21∣∣w∣∣2+Ci=1∑mlϵ(f(xilϵ(z)={0∣z∣−ϵ, if ∣z∣⩽ϵ otherwise )−yi)
其中
l
ϵ
\mathscr l_\epsilon
lϵ称为
ϵ
\epsilon
ϵ-不敏感损失函数
形式上来说,SVR类似软间隔支持向量机,因此可以采用类似的办法求解,这里不作具体展开。
同样的,SVR也可以引入特征映射与核函数。
参考资料
周志华:《机器学习》
Datawhale:【吃瓜教程】《机器学习公式详解》(南瓜书)与西瓜书公式推导直播合集