SVM原理与python实现
理论部分来源于机器学习西瓜书-周志华,此文供学习参考使用。
一、SVM概念
支持向量机(support vector machines, SVM)
是一种二分类模型
,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。
二、SVM原理
2.1 间隔与支持向量
给定训练样本集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
,
(
x
m
,
y
m
)
}
,
y
i
∈
{
−
1
,
+
1
}
D=\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \ldots,\left(x_{m}, y_{m}\right)\right\}, y_{i} \in\{-1,+1\}
D={(x1,y1),(x2,y2),…,(xm,ym)},yi∈{−1,+1}, 分类学习最基本的想法就是基于训练集
D
D
D 在样本空间中找到一个划分超平面, 将不同类别的样本分开. 但能将训练样本分开的划分超平面可能有很多, 如图所示, 我们应该努力去找到哪一个呢?
直观上看, 应该去找位于两类训练样本 “正中间” 的划分超平面,因为该划分超平面对训练样本局部扰动的 “容忍” 性最好。
在样本空间中, 划分超平面可通过如下线性方程来描述:
w
T
x
+
b
=
0
,
\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b=0,
wTx+b=0,其中
w
=
(
w
1
;
w
2
;
…
;
w
d
)
\boldsymbol{w}=\left(w_{1} ; w_{2} ; \ldots ; w_{d}\right)
w=(w1;w2;…;wd) 为法向量, 决定了超平面的方向;
b
b
b 为位移项, 决定 了超平面与原点之间的距离. 显然, 划分超平面可被法向量
w
\boldsymbol{w}
w 和位移
b
b
b 确定。
下面我们将其记为
(
w
,
b
)
(\boldsymbol{w}, b)
(w,b). 样本空间中任意点
x
\boldsymbol{x}
x 到超平面
(
w
,
b
)
(\boldsymbol{w}, b)
(w,b) 的距离可写为
r
=
∣
w
T
x
+
b
∣
∥
w
∥
.
r=\frac{\left|\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b\right|}{\|\boldsymbol{w}\|} .
r=∥w∥∣
∣wTx+b∣
∣.
点到平面的距离公式
d = ∣ A x 0 + B y 0 + C z 0 + D ∣ A 2 + B 2 + C 2 d=\frac{\left|A x_{0}+B y_{0}+C z_{0}+D\right|}{\sqrt{A^{2}+B^{2}+C^{2}}} d=A2+B2+C2∣Ax0+By0+Cz0+D∣
公式描述: 公式中的平面方程为 A x + B y + C z + D = 0 A x+B y+C z+D=0 Ax+By+Cz+D=0, ( A , B , C ) (A,B,C) (A,B,C)为平面法向量,点 P P P 的坐标 ( x 0 , y 0 , z 0 ) , d (x_0, y_0, z_0),d (x0,y0,z0),d 为 点 P P P 到平面的距离。
假设超平面
(
w
,
b
)
(w, b)
(w,b) 能将训练样本正确分类,使得数据集的正实例点和负实例点完全正确的划分到平面两侧,建立模型为:
f
(
x
)
=
s
i
g
n
(
w
T
x
+
b
)
f(x)=sign(\boldsymbol{w}^{\mathrm{T}}{\boldsymbol{x}}+b)
f(x)=sign(wTx+b)
即对于
(
x
i
,
y
i
)
∈
D
\left(x_{i}, y_{i}\right) \in D
(xi,yi)∈D, 若
w
T
x
i
+
b
>
0
\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b>0
wTxi+b>0,则有
y
i
=
y_{i}=
yi=
+
1
+1
+1 ; 若
w
T
x
i
+
b
<
0
\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b<0
wTxi+b<0,则
y
i
=
−
1
y_{i}=-1
yi=−1
y
i
=
{
1
,
w
T
x
i
+
b
>
0
−
1
,
w
T
x
i
+
b
<
0
y_i=\begin{cases}1,\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b>0 \\ -1,\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b<0 \end{cases}
yi={1,wTxi+b>0−1,wTxi+b<0
不妨令
{
w
T
x
i
+
b
⩾
+
1
,
y
i
=
+
1
w
T
x
i
+
b
⩽
−
1
,
y
i
=
−
1
\begin{cases}\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b \geqslant+1, & y_{i}=+1 \\ \boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b \leqslant-1, & y_{i}=-1\end{cases}
{wTxi+b⩾+1,wTxi+b⩽−1,yi=+1yi=−1
如下图所示, 距离超平面最近的这几个训练样本点使上式的等号成立, 它们被称为 “支持向量” (support vector), 两个异类支持向量到超平面的距离之和为
γ
=
2
∥
w
∥
\gamma=\frac{2}{\|w\|}
γ=∥w∥2
它被称为 “间隔” (margin)
欲找到具有 “最大间隔” (maximum margin)的划分超平面, 也就是要找到能满足约束的参数
w
\boldsymbol{w}
w 和
b
b
b, 使得
γ
\gamma
γ 最大, 即
max
w
,
b
2
∥
w
∥
s.t.
y
i
(
w
T
x
i
+
b
)
⩾
1
,
i
=
1
,
2
,
…
,
m
\max \limits_{\boldsymbol{w}, b} \frac{2}{\|\boldsymbol{w}\|} \\ \text { s.t. } y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right) \geqslant 1,\quad i=1,2, \ldots, m \text{}
w,bmax∥w∥2 s.t. yi(wTxi+b)⩾1,i=1,2,…,m
间隔貌似只与 w \boldsymbol{w} w有关,实际上 b b b通过约束条件对 w \boldsymbol{w} w取值有影响。
显然, 为了最大化间隔, 等价于最小化
∥
w
∥
2
\|\boldsymbol{w}\|^{2}
∥w∥2. 于是可重写为
min
w
,
b
1
2
∥
w
∥
2
s.t.
y
i
(
w
T
x
i
+
b
)
⩾
1
,
i
=
1
,
2
,
…
,
m
\begin{align} &\min _{\boldsymbol{w}, b} \frac{1}{2}\|\boldsymbol{w}\|^{2} \\ &\text{s.t. }y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right) \geqslant 1, \quad i=1,2, \ldots, m \end{align}
w,bmin21∥w∥2s.t. yi(wTxi+b)⩾1,i=1,2,…,m
这就是支持向量机的基本型,是一个含有不等式约束的凸二次规划问题,可以对其使用拉格朗日乘子法得到其对偶问题(dual problem)。
2.2 对偶问题
对式(1)使用拉格朗日乘子法可得到其 “对偶问题” (dual problem). 具体来说, 对式 (1) 的每条约束添加拉格朗日乘子
α
i
⩾
0
\alpha_{i} \geqslant 0
αi⩾0, 则该问题的拉格朗日函数可写为
L
(
w
,
b
,
α
)
=
1
2
∥
w
∥
2
+
∑
i
=
1
m
α
i
(
1
−
y
i
(
w
T
x
i
+
b
)
)
\begin{align} L(\boldsymbol{w}, b, \boldsymbol{\alpha})=\frac{1}{2}\|\boldsymbol{w}\|^{2}+\sum_{i=1}^{m} \alpha_{i}\left(1-y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right)\right) \end{align}
L(w,b,α)=21∥w∥2+i=1∑mαi(1−yi(wTxi+b))
其中
α
=
(
α
1
;
α
2
;
…
;
α
m
)
\boldsymbol{\alpha}=\left(\alpha_{1} ; \alpha_{2} ; \ldots ; \alpha_{m}\right)
α=(α1;α2;…;αm). 令
L
(
w
,
b
,
α
)
L(\boldsymbol{w}, b, \boldsymbol{\alpha})
L(w,b,α) 对
w
\boldsymbol{w}
w 和
b
b
b 的偏导为零可得
w
=
∑
i
=
1
m
α
i
y
i
x
i
0
=
∑
i
=
1
m
α
i
y
i
\begin{align} \boldsymbol{w} &=\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i} \\ 0 &=\sum_{i=1}^{m} \alpha_{i} y_{i} \end{align}
w0=i=1∑mαiyixi=i=1∑mαiyi
将式(4)代入 (3), 即可将
L
(
w
,
b
,
α
)
L(\boldsymbol{w}, b, \boldsymbol{\alpha})
L(w,b,α) 中的
w
\boldsymbol{w}
w 和
b
b
b 消去, 再考虑式 (5)的约束, 就得到式 (1) 的对偶问题
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{align} &\max _{\boldsymbol{\alpha}} \sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}_{j}\\ &\text { s.t. } \sum_{i=1}^{m} \alpha_{i} y_{i}=0 \alpha_{i} \geqslant 0, \quad i=1,2, \ldots, m . \end{align}
αmaxi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjxiTxj s.t. i=1∑mαiyi=0αi⩾0,i=1,2,…,m.
解出
α
\alpha
α 后, 求出
w
\boldsymbol{w}
w 与
b
b
b 即可得到模型
f
(
x
)
=
w
T
x
+
b
=
∑
i
=
1
m
α
i
y
i
x
i
T
x
+
b
(8)
\begin{aligned}\tag{8} f(\boldsymbol{x}) &=\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}+b \\ &=\sum_{i=1}^{m} \alpha_{i} y_{i} \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}+b \end{aligned}
f(x)=wTx+b=i=1∑mαiyixiTx+b(8)
从对偶问题(6)解出的
α
i
\alpha_{i}
αi 是式(3)中的拉格朗日乘子, 它恰对应着训练样本
(
x
i
,
y
i
)
\left(\boldsymbol{x}_{i}, y_{i}\right)
(xi,yi). 注意到式 (1) 中有不等式约束, 因此上述过程需满足
K
K
T
\mathrm{KKT}
KKT (Karush-Kuhn-Tucker) 条件, 即要求
{
α
i
⩾
0
y
i
f
(
x
i
)
−
1
⩾
0
;
α
i
(
y
i
f
(
x
i
)
−
1
)
=
0
(9)
\left\{\begin{array}{l}\tag{9} \alpha_{i} \geqslant 0 \\ y_{i} f\left(\boldsymbol{x}_{i}\right)-1 \geqslant 0 ; \\ \alpha_{i}\left(y_{i} f\left(\boldsymbol{x}_{i}\right)-1\right)=0 \end{array}\right.
⎩
⎨
⎧αi⩾0yif(xi)−1⩾0;αi(yif(xi)−1)=0(9)
于是; 对任意训练样本
(
x
i
,
y
i
)
\left(\boldsymbol{x}_{i}, y_{i}\right)
(xi,yi), 总有
α
i
=
0
\alpha_{i}=0
αi=0 或
y
i
f
(
x
i
)
=
1
y_{i} f\left(\boldsymbol{x}_{i}\right)=1
yif(xi)=1. 若
α
i
=
0
\alpha_{i}=0
αi=0, 则该样本将不会在式 (8) 的求和中出现, 也就不会对
f
(
x
)
f(x)
f(x) 有任何影响; 若
α
i
>
0
\alpha_{i}>0
αi>0, 则必有
y
i
f
(
x
i
)
=
1
y_{i} f\left(\boldsymbol{x}_{i}\right)=1
yif(xi)=1, 所对应的样本点位于最大间隔边界上, 是一个支持向量. 这显示出支持向量机的一个重要性质:训练完成后, 大部分的训练样本都不需保留, 最终模型仅与支持向量有关.
针对式(6)的求解采用 S M O SMO SMO算法,基本思路是先固定 α i \alpha_{i} αi 之外的所有参数, 然后求 α i \alpha_{i} αi 上的极值. 由于存在约束 ∑ i = 1 m α i y i = 0 \sum_{i=1}^{m} \alpha_{i} y_{i}=0 ∑i=1mαiyi=0, 若固定 α i \alpha_{i} αi 之外的其他变量, 则 α i \alpha_{i} αi 可由其他变量导出. 于是, S M O SMO SMO 每次选择两个变量 α i \alpha_{i} αi 和 α j \alpha_{j} αj, 并固定其他参数. 这样, 在参数初始化后, S M O SMO SMO不断执行如下两个步骤直至收敛:
- 选取一对需更新的变量 α i \alpha_{i} αi 和 α j \alpha_{j} αj;
- 固定
α
i
\alpha_{i}
αi 和
α
j
\alpha_{j}
αj 以外的参数, 求解式(6)获得更新后的
α
i
\alpha_{i}
αi 和
α
j
\alpha_{j}
αj.
注意到只需选取的 α i \alpha_{i} αi 和 α j \alpha_{j} αj 中有一个不满足 K K T \mathrm{KKT} KKT 条件(9), 目标函数就会在迭代后减小. 直观来看, KKT 条件违背的程度越大, 则变量更新后可能导致的目标函数值减幅越大. 于是, S M O SMO SMO 先选取违背 KKT 条件程度最大的变量. 第二个变量应选择一个使目标函数值减小最快的变量, 但由于比较各变量所对应的目标函数值减幅的复杂度过高, 因此 S M O SMO SMO 采用了一 个启发式: 使选取的两变量所对应样本之间的间隔最大. 一种直观的解释是, 这样的两个变量有很大的差别, 与对两个相似的变量进行更新相比, 对它们进行 更新会带给目标函数值更大的变化.
S
M
O
SMO
SMO 算法之所以高效, 恰由于在固定其他参数后, 仅优化两个参数的过程 能做到非常高效. 具体来说, 仅考虑
α
i
\alpha_{i}
αi 和
α
j
\alpha_{j}
αj 时, 式(6)中的约束可重写为
α
i
y
i
+
α
j
y
j
=
c
,
α
i
⩾
0
,
α
j
⩾
0
\begin{equation}\tag{10} \alpha_{i} y_{i}+\alpha_{j} y_{j}=c, \quad \alpha_{i} \geqslant 0, \quad \alpha_{j} \geqslant 0\end{equation}
αiyi+αjyj=c,αi⩾0,αj⩾0(10)
其中
c
=
−
∑
k
≠
i
,
j
α
k
y
k
\begin{equation}\tag{11} c=-\sum_{k \neq i, j} \alpha_{k} y_{k}\end{equation}
c=−k=i,j∑αkyk(11)
是使
∑
i
=
1
m
α
i
y
i
=
0
\sum_{i=1}^{m} \alpha_{i} y_{i}=0
∑i=1mαiyi=0 成立的常数. 用
α
i
y
i
+
α
j
y
j
=
c
\begin{equation}\tag{12} \alpha_{i} y_{i}+\alpha_{j} y_{j}=c\end{equation}
αiyi+αjyj=c(12)
消去式(6)中的变量
α
j
\alpha_{j}
αj, 则得到一个关于
α
i
\alpha_{i}
αi 的单变量二次规划问题, 仅有的 约束是
α
i
⩾
0
\alpha_{i} \geqslant 0
αi⩾0. 不难发现, 这样的二次规划问题具有闭式解, 于是不必调用数值 优化算法即可高效地计算出更新后的
α
i
\alpha_{i}
αi 和
α
j
\alpha_{j}
αj.
如何确定偏移项
b
b
b 呢? 注意到对任意支持向量
(
x
s
,
y
s
)
\left(\boldsymbol{x}_{s}, y_{s}\right)
(xs,ys) 都有
y
s
f
(
x
s
)
=
1
y_{s} f\left(\boldsymbol{x}_{s}\right)=1
ysf(xs)=1, 即
y
s
(
∑
i
∈
S
α
i
y
i
x
i
T
x
s
+
b
)
=
1
\begin{equation}\tag{13} y_{s}\left(\sum_{i \in S} \alpha_{i} y_{i} \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}_{s}+b\right)=1\end{equation}
ys(i∈S∑αiyixiTxs+b)=1(13)
其中
S
=
{
i
∣
α
i
>
0
,
i
=
1
,
2
,
…
,
m
}
S=\left\{i \mid \alpha_{i}>0, i=1,2, \ldots, m\right\}
S={i∣αi>0,i=1,2,…,m} 为所有支持向量的下标集. 理论上, 可选取任意支持向量并通过求解式 (13)获得
b
b
b, 但现实任务中常采用一种更鲁棒的做法: 使用所有支持向量求解的平均值
b
=
1
∣
S
∣
∑
s
∈
S
(
y
s
−
∑
i
∈
S
α
i
y
i
x
i
T
x
s
)
\begin{equation}\tag{14} b=\frac{1}{|S|} \sum_{s \in S}\left(y_{s}-\sum_{i \in S} \alpha_{i} y_{i} x_{i}^{\mathrm{T}} x_{s}\right) \end{equation}
b=∣S∣1s∈S∑(ys−i∈S∑αiyixiTxs)(14)
2.3 核函数
核函数
:令
X
\mathcal{X}
X 为输入空间,
κ
(
⋅
,
⋅
)
\kappa(\cdot, \cdot)
κ(⋅,⋅) 是定义在
X
×
X
\mathcal{X} \times \mathcal{X}
X×X 上的对称 函数, 则
κ
\kappa
κ 是核函数当且仅当对于任意数据
D
=
{
x
1
,
x
2
,
…
,
x
m
}
D=\left\{x_{1}, x_{2}, \ldots, x_{m}\right\}
D={x1,x2,…,xm}, “核矩阵” (kernel matrix)
K
\mathbf{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
)
]
.
\mathbf{K}=\left[\begin{array}{ccccc} \kappa\left(\boldsymbol{x}_{1}, \boldsymbol{x}_{1}\right) & \cdots & \kappa\left(\boldsymbol{x}_{1}, \boldsymbol{x}_{j}\right) & \cdots & \kappa\left(\boldsymbol{x}_{1}, \boldsymbol{x}_{m}\right) \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{1}\right) & \cdots & \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right) & \cdots & \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{m}\right) \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ \kappa\left(\boldsymbol{x}_{m}, \boldsymbol{x}_{1}\right) & \cdots & \kappa\left(\boldsymbol{x}_{m}, \boldsymbol{x}_{j}\right) & \cdots & \kappa\left(\boldsymbol{x}_{m}, \boldsymbol{x}_{m}\right) \end{array}\right] .
K=⎣
⎡κ(x1,x1)⋮κ(xi,x1)⋮κ(xm,x1)⋯⋱⋯⋱⋯κ(x1,xj)⋮κ(xi,xj)⋮κ(xm,xj)⋯⋱⋯⋱⋯κ(x1,xm)⋮κ(xi,xm)⋮κ(xm,xm)⎦
⎤.
只要一个对称函数所对应的核矩阵半正定, 它就能作为核函数使用. 事实上, 对于一个半正定核矩阵, 总能找到一个与之对应的映射
ϕ
\phi
ϕ. 换言之, 任何一个核函数都隐式地定义了一个称为 “再生核希尔伯特空间” (Reproducing Kernel Hilbert Space, 简称 RKHS)的特征空间.
我们希望样本在特征空间内线性可分, 因此特征空间的好坏对支持向量机的性能至关重要. 需注意的是, 在不知道特征映射的形式时, 我们并不知道什么样的核函数是合适的, 而核函数也仅是隐式地定义了这个特征空间. 于是, “核函数选择” 成为支持向量机的最大变数. 若核函数选择不合适, 则意味着将样本映射到了一个不合适的特征空间, 很可能导致性能不佳.
常用核函数如下表所示:
名称
表达式
参数
线性核
κ
(
x
i
,
x
j
)
=
x
i
T
x
j
多项式核
κ
(
x
i
,
x
j
)
=
(
x
i
T
x
j
)
d
d
⩾
1
为多项式的次数
高斯核
κ
(
x
i
,
x
j
)
=
exp
(
−
∥
x
i
−
x
j
∥
2
2
σ
2
)
σ
>
0
为高斯核的带宽 (width)
拉普拉斯核
κ
(
x
i
,
x
j
)
=
exp
(
−
∥
x
i
−
x
j
∥
σ
)
σ
>
0
Sigmoid 核
κ
(
x
i
,
x
j
)
=
tanh
(
β
x
i
T
x
j
+
θ
)
tanh
为双曲正切函数,
β
>
0
,
θ
<
0
\begin{aligned} &\begin{array}{lll} \hline \text { 名称 } & \text { 表达式 } & \text { 参数 } \\ \hline \text { 线性核 } & \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}_{j} & \\ \text { 多项式核 } & \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\left(\boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}_{j}\right)^{d} & d \geqslant 1 \text { 为多项式的次数 } \\ \text { 高斯核 } & \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\exp \left(-\frac{\left\|\boldsymbol{x}_{i}-\boldsymbol{x}_{j}\right\|^{2}}{2 \sigma^{2}}\right) & \sigma>0 \text { 为高斯核的带宽 (width) } \\ \text { 拉普拉斯核 } & \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\exp \left(-\frac{\left\|\boldsymbol{x}_{i}-\boldsymbol{x}_{j}\right\|}{\sigma}\right) & \sigma>0 \\ \text { Sigmoid 核 } & \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\tanh \left(\beta \boldsymbol{x}_{i}^{\mathrm{T}} \boldsymbol{x}_{j}+\theta\right) & \tanh \text { 为双曲正切函数, } \beta>0, \theta<0 \\ \hline \end{array} \end{aligned}
名称 线性核 多项式核 高斯核 拉普拉斯核 Sigmoid 核 表达式 κ(xi,xj)=xiTxjκ(xi,xj)=(xiTxj)dκ(xi,xj)=exp(−2σ2∥xi−xj∥2)κ(xi,xj)=exp(−σ∥xi−xj∥)κ(xi,xj)=tanh(βxiTxj+θ) 参数 d⩾1 为多项式的次数 σ>0 为高斯核的带宽 (width) σ>0tanh 为双曲正切函数, β>0,θ<0
此外, 还可通过函数组合得到, 例如:
- 若
κ
1
\kappa_{1}
κ1 和
κ
2
\kappa_{2}
κ2 为核函数, 则对于任意正数
γ
1
、
γ
2
\gamma_{1} 、 \gamma_{2}
γ1、γ2, 其线性组合
γ 1 κ 1 + γ 2 κ 2 \gamma_{1} \kappa_{1}+\gamma_{2} \kappa_{2} γ1κ1+γ2κ2
也是核函数; - 若
κ
1
\kappa_{1}
κ1 和
κ
2
\kappa_{2}
κ2 为核函数, 则核函数的直积
κ 1 ⊗ κ 2 ( x , z ) = κ 1 ( x , z ) κ 2 ( x , z ) \kappa_{1} \otimes \kappa_{2}(\boldsymbol{x}, \boldsymbol{z})=\kappa_{1}(\boldsymbol{x}, \boldsymbol{z}) \kappa_{2}(\boldsymbol{x}, \boldsymbol{z}) κ1⊗κ2(x,z)=κ1(x,z)κ2(x,z)
也是核函数; - 若
κ
1
\kappa_{1}
κ1 为核函数, 则对于任意函数
g
(
x
)
g(\boldsymbol{x})
g(x),
κ ( x , z ) = g ( x ) κ 1 ( x , z ) g ( z ) \kappa(\boldsymbol{x}, \boldsymbol{z})=g(\boldsymbol{x}) \kappa_{1}(\boldsymbol{x}, \boldsymbol{z}) g(\boldsymbol{z}) κ(x,z)=g(x)κ1(x,z)g(z)
也是核函数.
当原始样本空间不存在划分两类样本的超平面,如下图所示:
对这样的问题, 可将样本从原始空间映射到一个更高维的特征空间, 使得样本在这个特征空间内线性可分. 将原始的二维空间映射 到一个合适的三维空间, 就能找到一个合适的划分超平面. 如果原始空间是有限维, 即属性数有限, 那么一定存在一个高维特征空间使样本可分.
令
ϕ
(
x
)
\phi(x)
ϕ(x) 表示将
x
\boldsymbol{x}
x 映射后的特征向量, 于是, 在特征空间中划分超平面所对 应的模型可表示为
f
(
x
)
=
w
T
ϕ
(
x
)
+
b
(15)
\begin{aligned}\tag{15} f(\boldsymbol{x})=\boldsymbol{w}^{\mathrm{T}} \phi(\boldsymbol{x})+b \end{aligned}
f(x)=wTϕ(x)+b(15)
其中
w
\boldsymbol{w}
w 和
b
b
b 是模型参数. 类似式 (15), 有
min
w
,
b
1
2
∥
w
∥
2
s.t.
y
i
(
w
T
ϕ
(
x
i
)
+
b
)
⩾
1
,
i
=
1
,
2
,
…
,
m
(16)
\begin{aligned}\tag{16} &\min _{\boldsymbol{w}, b} \frac{1}{2}\|\boldsymbol{w}\|^{2}\\ &\text{s.t. } y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \phi\left(\boldsymbol{x}_{i}\right)+b\right) \geqslant 1, \quad i=1,2, \ldots, m \end{aligned}
w,bmin21∥w∥2s.t. yi(wTϕ(xi)+b)⩾1,i=1,2,…,m(16).
其对偶问题是
max
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
ϕ
(
x
i
)
T
ϕ
(
x
j
)
(17)
\tag{17}\max _{\alpha} \sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} \phi\left(\boldsymbol{x}_{i}\right)^{\mathrm{T}} \phi\left(\boldsymbol{x}_{j}\right)
αmaxi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjϕ(xi)Tϕ(xj)(17)
s.t.
∑
i
=
1
m
α
i
y
i
=
0
,
α
i
⩾
0
,
i
=
1
,
2
,
…
,
m
.
(18)
\begin{array}{ll}\tag{18} \text {s.t. } & \sum_{i=1}^{m} \alpha_{i} y_{i}=0, &\alpha_{i} \geqslant 0, \quad i=1,2, \ldots, m . \end{array}
s.t. ∑i=1mαiyi=0,αi⩾0,i=1,2,…,m.(18)
求解式 (17) 涉及到计算
ϕ
(
x
i
)
T
ϕ
(
x
j
)
\phi\left(\boldsymbol{x}_{i}\right)^{\mathrm{T}} \phi\left(\boldsymbol{x}_{j}\right)
ϕ(xi)Tϕ(xj), 这是样本
x
i
\boldsymbol{x}_{i}
xi 与
x
j
\boldsymbol{x}_{j}
xj 映射到特征空间 之后的内积. 由于特征空间维数可能很高, 甚至可能是无穷维, 因此直接计算
ϕ
(
x
i
)
T
ϕ
(
x
j
)
\phi\left(\boldsymbol{x}_{i}\right)^{\mathrm{T}} \phi\left(\boldsymbol{x}_{j}\right)
ϕ(xi)Tϕ(xj) 通常是困难的. 为了避开这个障碍, 可以设想这样一个函数:
κ
(
x
i
,
x
j
)
=
⟨
ϕ
(
x
i
)
,
ϕ
(
x
j
)
⟩
=
ϕ
(
x
i
)
T
ϕ
(
x
j
)
(19)
\tag{19}\kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\left\langle\phi\left(\boldsymbol{x}_{i}\right), \phi\left(\boldsymbol{x}_{j}\right)\right\rangle=\phi\left(\boldsymbol{x}_{i}\right)^{\mathrm{T}} \phi\left(\boldsymbol{x}_{j}\right)
κ(xi,xj)=⟨ϕ(xi),ϕ(xj)⟩=ϕ(xi)Tϕ(xj)(19)
即
x
i
\boldsymbol{x}_{i}
xi 与
x
j
\boldsymbol{x}_{j}
xj 在特征空间的内积等于它们在原始样本空间中通过函数
κ
(
⋅
,
⋅
)
\kappa(\cdot, \cdot)
κ(⋅,⋅) 计算 的结果. 有了这样的函数, 我们就不必直接去计算高维甚至无穷维特征空间中 的内积, 于是式 (17) 可重写为
max
α
∑
i
=
1
m
α
i
−
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
κ
(
x
i
,
x
j
)
s.t.
∑
i
=
1
m
α
i
y
i
=
0
,
α
i
⩾
0
,
i
=
1
,
2
,
…
,
m
(20)
\begin{aligned}\tag{20} \max _{\alpha} & \sum_{i=1}^{m} \alpha_{i}-\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} \kappa\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right) \\ \text { s.t. } & \sum_{i=1}^{m} \alpha_{i} y_{i}=0 , \alpha_{i} \geqslant 0, \quad i=1,2, \ldots, m \end{aligned}
αmax s.t. i=1∑mαi−21i=1∑mj=1∑mαiαjyiyjκ(xi,xj)i=1∑mαiyi=0,αi⩾0,i=1,2,…,m(20)
求解后即可得到
f
(
x
)
=
w
T
ϕ
(
x
)
+
b
=
∑
i
=
1
m
α
i
y
i
ϕ
(
x
i
)
T
ϕ
(
x
)
+
b
=
∑
i
=
1
m
α
i
y
i
κ
(
x
,
x
i
)
+
b
.
(21)
\begin{aligned}\tag{21} f(\boldsymbol{x}) &=\boldsymbol{w}^{\mathrm{T}} \phi(\boldsymbol{x})+b \\ &=\sum_{i=1}^{m} \alpha_{i} y_{i} \phi\left(\boldsymbol{x}_{i}\right)^{\mathrm{T}} \phi(\boldsymbol{x})+b \\ &=\sum_{i=1}^{m} \alpha_{i} y_{i} \kappa\left(\boldsymbol{x}, \boldsymbol{x}_{i}\right)+b . \end{aligned}
f(x)=wTϕ(x)+b=i=1∑mαiyiϕ(xi)Tϕ(x)+b=i=1∑mαiyiκ(x,xi)+b.(21)
这里的函数
κ
(
⋅
,
⋅
)
\kappa(\cdot, \cdot)
κ(⋅,⋅) 就是 “核函数” (kernel function). 式(7) 显示出模型最优解可通过训练样本的核函数展开, 这一展式亦称 “支持向量展式”.
由于篇幅限制,后续内容链接: 支持向量机原理(二)