认识
虽然自己理解了支持向量机的原理和应用,但是写博客去让每一位读者都清楚真的很难,这里强烈推荐两个参考资源,大家可以去看一下,并动手推一下公式(至少从我第一次接触SVM到回到实验室将支持向量机应用在肌电识别上至少推导SVM有3次了,屡试不爽)。
- 统计学习方法,密码:4t66
- 支持向量机通俗导论(理解SVM的三重境界),密码:dx9j
附上大佬的博客链接:支持向量机通俗导论(理解SVM的三层境界)
什么是支持向量机
支持向量机(support vector machines,SVM)是一种二类分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划(convex quadratic programming)的问题,也等价于正则化的合页损失函数的最小化问题。支持向量机的学习算法是求解凸二次规划的最优化算法[1]。
支持向量机学习方法包含构建由简至繁的模型:线性可分支持向量机(linear support vector machine in linearly separable case)、线性支持向量机(linear support vector machine)及非线性支持向量机(non-linear support vector machine)。简单模型是复杂模型的基础,也是复杂模型的特殊情况。当训练数据线性可分时,通过硬间隔最大化(hard margin maximization),学习一个线性的分类器,即线性可分支持向量机,又称为硬间隔支持向量机;当训练数据近似线性可分时,通过软间隔最大化(soft margin maximization),也学习一个线性的分类器,即线性支持向量机,又称为软间隔支持向量
机;当训练数据线性不可分时,通过使用核技巧(kernel trick)及软间隔最大化,学习非线性支持向量机。
当输入空间为欧氏空间或离散集合、特征空间为希尔伯特空间时,核函数(kernel function)表示将输入从输入空间映射到特征空间得到的特征向量之间的内积。通过使用核函数可以学习非线性支持向量机,等价于隐式地在高维的特征空间中学习线性支持向量机。这样的方法称为核技巧。核方法(kernel method)是比支持向量机更为一般的机器学习方法。
原始最优化问题
支持向量机最简单的情况是线性可分支持向量机,或硬间隔支持向量机。构建它的条件是训练数据线性可分。其学习策略是最大间隔法。可以表示为凸二次规划问题,其原始最优化问题为:
(1)
min
w
,
b
1
2
∥
w
∥
2
s.t.
y
i
(
w
⋅
x
i
+
b
)
−
1
⩾
0
,
i
=
1
,
2
,
⋯
 
,
N
\begin{aligned} \begin{array}{ll}{\min _{w, b}} & {\frac{1}{2}\|w\|^{2}} \\ {\text { s.t. }} & {y_{i}\left(w \cdot x_{i}+b\right)-1 \geqslant 0, \quad i=1,2, \cdots, N}\end{array}\tag{1} \end{aligned}
minw,b s.t. 21∥w∥2yi(w⋅xi+b)−1⩾0,i=1,2,⋯,N(1)
求得最优化问题的解为
w
∗
,
b
∗
w^*,b^*
w∗,b∗ ,得到线性可分支持向量机,分离超平面是:
(2)
w
∗
⋅
x
+
b
∗
=
0
\begin{aligned} w^{*} \cdot x+b^{*}=0\tag{2} \end{aligned}
w∗⋅x+b∗=0(2)
分类决策函数是:
(3)
f
(
x
)
=
sign
(
w
∗
⋅
x
+
b
∗
)
\begin{aligned} f(x)=\operatorname{sign}\left(w^{*} \cdot x+b^{*}\right)\tag{3} \end{aligned}
f(x)=sign(w∗⋅x+b∗)(3)
最大间隔法中,函数间隔与几何间隔是重要的概念。
线性可分支持向量机的最优解存在且唯一。位于间隔边界上的实例点为支持向量。最优分离超平面由支持向量完全决定。
二次规划问题的对偶问题是:
(4)
min
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
s.t.
∑
i
=
1
N
α
i
y
i
=
0
α
i
⩾
0
,
i
=
1
,
2
,
⋯
 
,
N
\begin{aligned} \begin{array}{l}{\min \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)-\sum_{i=1}^{N} \alpha_{i}} \\ {\text { s.t. } \quad \sum_{i=1}^{N} \alpha_{i} y_{i}=0} \\ {\alpha_{i} \geqslant 0, \quad i=1,2, \cdots, N}\end{array}\tag{4} \end{aligned}
min21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi s.t. ∑i=1Nαiyi=0αi⩾0,i=1,2,⋯,N(4)
通常,通过求解对偶问题学习线性可分支持向量机,即首先求解对偶问题的最优值
a
∗
a^*
a∗,然后求最优值
w
∗
w^*
w∗和
b
∗
b^*
b∗,得出分离超平面和分类决策函数。
软间隔支持向量机
现实中训练数据是线性可分的情形较少,训练数据往往是近似线性可分的,这时使用线性支持向量机,或软间隔支持向量机。线性支持向量机是最基本的支持向量机。
对于噪声或例外,通过引入松弛变量
ξ
i
\xi_{i}
ξi ,使其“可分”,得到线性支持向量机学习的凸二次规划问题,其原始最优化问题是:
(5)
min
w
,
b
,
ξ
1
2
∥
w
∥
2
+
C
∑
i
=
1
N
ξ
i
s.t.
y
i
(
w
⋅
x
i
+
b
)
⩾
1
−
ξ
i
,
i
=
1
,
2
,
⋯
 
,
N
ξ
i
⩾
0
,
i
=
1
,
2
,
⋯
 
,
N
\begin{aligned} \begin{array}{ll}{\min _{w, b, \xi}} & {\frac{1}{2}\|w\|^{2}+C \sum_{i=1}^{N} \xi_{i}} \\ {\text { s.t. }} & {y_{i}\left(w \cdot x_{i}+b\right) \geqslant 1-\xi_{i}, \quad i=1,2, \cdots, N} \\ {} & {\xi_{i} \geqslant 0, \quad i=1,2, \cdots, N}\end{array}\tag{5} \end{aligned}
minw,b,ξ s.t. 21∥w∥2+C∑i=1Nξiyi(w⋅xi+b)⩾1−ξi,i=1,2,⋯,Nξi⩾0,i=1,2,⋯,N(5)
求得最优化问题的解为
w
∗
,
b
∗
w^*,b^*
w∗,b∗ ,得到线性可分支持向量机,分离超平面是:
(6)
w
∗
⋅
x
+
b
∗
=
0
\begin{aligned} w^{*} \cdot x+b^{*}=0\tag{6} \end{aligned}
w∗⋅x+b∗=0(6)
分类决策函数是:
(7)
f
(
x
)
=
sign
(
w
∗
⋅
x
+
b
∗
)
\begin{aligned} f(x)=\operatorname{sign}\left(w^{*} \cdot x+b^{*}\right)\tag{7} \end{aligned}
f(x)=sign(w∗⋅x+b∗)(7)
线性可分支持向量机的解
w
∗
w^*
w∗唯一,但
b
∗
b^*
b∗不唯一。
对偶问题是:
(8)
min
α
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
s.t.
∑
i
=
1
N
α
i
y
i
=
0
0
⩽
α
i
⩽
C
,
i
=
1
,
2
,
⋯
 
,
N
\begin{aligned} \begin{array}{ll}{\min _{\alpha}} & {\frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_{i} \alpha_{j} y_{i} y_{j}\left(x_{i} \cdot x_{j}\right)-\sum_{i=1}^{N} \alpha_{i}} \\ {\text { s.t. }} & {\sum_{i=1}^{N} \alpha_{i} y_{i}=0} \\ {} & {0 \leqslant \alpha_{i} \leqslant C, \quad i=1,2, \cdots, N}\end{array}\tag{8} \end{aligned}
minα s.t. 21∑i=1N∑j=1Nαiαjyiyj(xi⋅xj)−∑i=1Nαi∑i=1Nαiyi=00⩽αi⩽C,i=1,2,⋯,N(8)
线性支持向量机的对偶学习算法,首先求解对偶问题得到最优解
a
∗
a^*
a∗,然后求原始问题最优解
w
∗
w^*
w∗ 和
b
∗
b^*
b∗,得出分离超平面和分类决策函数。
对偶问题的解
a
∗
a^*
a∗ 中满足
a
i
∗
>
0
a^*_i>0
ai∗>0的实例点
x
i
x_i
xi 称为支持向量。支持向量可在间隔边界上,也可在间隔边界与分离超平面之间,或者在分离超平面误分一侧。最优分离超平面由支持向量完全决定。
线性支持向量机学习等价于最小化二阶范数正则化的合页函数:
(9)
∑
i
=
1
N
[
1
−
y
i
(
w
⋅
x
i
+
b
)
]
+
+
λ
∥
w
∥
2
\begin{aligned} \sum_{i=1}^{N}\left[1-y_{i}\left(w \cdot x_{i}+b\right)\right]_{+}+\lambda\|w\|^{2}\tag{9} \end{aligned}
i=1∑N[1−yi(w⋅xi+b)]++λ∥w∥2(9)
非线性支持向量机
对于输入空间中的非线性分类问题,可以通过非线性变换将它转化为某个高维特征空间中的线性分类问题,在高维特征空间中学习线性支持向量机。由于在线性支持向量机学习的对偶问题里,目标函数和分类决策函数都只涉及实例与实例之间的内积,所以不需要显式地指定非线性变换,而是用核函数来替换当中的内积。核函数表示,通过一个非线性转换后的两个实例间的内积。具体地,
K
(
x
,
z
)
K(x,z)
K(x,z)是一个核函数,或正定核,意味着存在一个从输入空间x到特征空间
X
\mathcal{X}
X的映射
∅
(
x
)
:
X
→
H
\emptyset(\mathrm{x}) : \mathcal{X} \rightarrow \mathcal{H}
∅(x):X→H,对任意x,z
∈
X
\in \mathcal{X}
∈X,有
(10)
K
(
x
,
z
)
=
ϕ
(
x
)
⋅
ϕ
(
z
)
\begin{aligned} K(x, z)=\phi(x) \cdot \phi(z)\tag{10} \end{aligned}
K(x,z)=ϕ(x)⋅ϕ(z)(10)
对称函数K(x,z)为正定核的充要条件如下:对任意
x
i
∈
X
,
i
=
1
,
2
,
…
,
m
\mathrm{x}_{\mathrm{i}} \in \mathcal{X}, \quad \mathrm{i}=1,2, \ldots, \mathrm{m}
xi∈X,i=1,2,…,m,任意正整数m,对称函数K(x,z)对应的Gram矩阵是半正定的。
所以,在线性支持向量机学习的对偶问题中,用核函数K(x,z)替代内积,求解得到的
就是非线性支持向量机
(11)
f
(
x
)
=
sign
(
∑
i
=
1
N
α
i
∗
y
i
K
(
x
,
x
i
)
+
b
∗
)
\begin{aligned} f(x)=\operatorname{sign}\left(\sum_{i=1}^{N} \alpha_{i}^{*} y_{i} K\left(x, x_{i}\right)+b^{*}\right)\tag{11} \end{aligned}
f(x)=sign(i=1∑Nαi∗yiK(x,xi)+b∗)(11)
SMO算法
SMO算法是支持向量机学习的一种快速算法,其特点是不断地将原二次规划问题分解为只有两个变量的二次规划子问题,并对子问题进行解析求解,直到所有变量满足KKT条件为止。这样通过启发式的方法得到原二次规划问题的最优解。因为子问题有解析解,所以每次计算子问题都很快,虽然计算子问题次数很多,但在总体上还是高效的。
输入:训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
,
(
x
N
,
y
N
)
}
\mathrm{T}=\left\{\left(\mathrm{x}_{1}, \mathrm{y}_{1}\right),\left(\mathrm{x}_{2}, \mathrm{y}_{2}\right), \ldots,\left(\mathrm{x}_{\mathrm{N}}, \mathrm{y}_{\mathrm{N}}\right)\right\}
T={(x1,y1),(x2,y2),…,(xN,yN)},其中
x
i
∈
x
=
R
n
,
y
i
∈
Y
=
{
−
1
,
+
1
}
\mathrm{x}_{\mathrm{i}} \in \mathrm{x}=\mathrm{R}^{\mathrm{n}}, \quad \mathrm{y}_{\mathrm{i}} \in \mathcal{Y}=\{-1,+1\}
xi∈x=Rn,yi∈Y={−1,+1},i=1,2,…,N,精度为
E
\mathcal{E}
E;
emsp; 输出,近似
α
^
\hat{\alpha}
α^
- 取初始值 a ( 0 ) = 0 \mathrm{a}^{(0)}=0 a(0)=0,令k=0
- 选取优化变量
a
1
(
k
)
,
a
2
(
k
)
\mathrm{a}^{(k)}_1,\mathrm{a}^{(k)}_2
a1(k),a2(k)根据公式(12,13)解析求解两个变量的最优化问题
(12) min a 1 , a 2 W ( α 1 , α 2 ) = 1 2 K 11 α 1 2 + 1 2 K 22 α 2 2 + y 1 y 2 K 12 α 1 α 2 − ( α 1 + α 2 ) + y 1 α 1 ∑ i = 3 N y i α i K n + y 2 α 2 ∑ i = 3 N y i α i K i 2 \begin{aligned} \begin{array}{rl}{\min _{a_{1}, a_{2}}} & {W\left(\alpha_{1}, \alpha_{2}\right)=\frac{1}{2} K_{11} \alpha_{1}^{2}+\frac{1}{2} K_{22} \alpha_{2}^{2}+y_{1} y_{2} K_{12} \alpha_{1} \alpha_{2}} \\ {} & {-\left(\alpha_{1}+\alpha_{2}\right)+y_{1} \alpha_{1} \sum_{i=3}^{N} y_{i} \alpha_{i} K_{n}+y_{2} \alpha_{2} \sum_{i=3}^{N} y_{i} \alpha_{i} K_{i 2}}\end{array}\tag{12} \end{aligned} mina1,a2W(α1,α2)=21K11α12+21K22α22+y1y2K12α1α2−(α1+α2)+y1α1∑i=3NyiαiKn+y2α2∑i=3NyiαiKi2(12)
(13) α 1 y 1 + α 2 y 2 = − ∑ i = 3 N y i α i = ζ \begin{aligned} \quad \alpha_{1} y_{1}+\alpha_{2} y_{2}=-\sum_{i=3}^{N} y_{i} \alpha_{i}=\zeta\tag{13} \end{aligned} α1y1+α2y2=−i=3∑Nyiαi=ζ(13)
(14) 0 ⩽ α i ⩽ C , i = 1 , 2 \begin{aligned} 0 \leqslant \alpha_{i} \leqslant C, \quad i=1,2\tag{14} \end{aligned} 0⩽αi⩽C,i=1,2(14) - 若在精度
E
\mathcal{E}
E范围内满足停机条件则转到步骤4;否则令k=k+1,转到步骤2
(15) ∑ i = 1 N α i y i = 0 0 ⩽ α i ⩽ C , i = 1 , 2 , ⋯   , N ⩾ 1 , { x i ∣ α i = 0 } = 1 , { x i ∣ 0 < α i < C } ⩽ 1 , { x i ∣ α i = C } \begin{aligned} \begin{array}{c}{\sum_{i=1}^{N} \alpha_{i} y_{i}=0} \\ {0 \leqslant \alpha_{i} \leqslant C, \quad i=1,2, \cdots, N} \\ {\geqslant 1, \quad\left\{x_{i} | \alpha_{i}=0\right\}} \\ {=1, \quad\left\{x_{i} | 0<\alpha_{i}<C\right\}} \\ { \leqslant 1, \quad\left\{x_{i} | \alpha_{i}=C\right\}}\end{array}\tag{15} \end{aligned} ∑i=1Nαiyi=00⩽αi⩽C,i=1,2,⋯,N⩾1,{xi∣αi=0}=1,{xi∣0<αi<C}⩽1,{xi∣αi=C}(15)
其中, g ( x i ) = ∑ j = 1 N α j y j K ( x j , x i ) + b g\left(x_{i}\right)=\sum_{j=1}^{N} \alpha_{j} y_{j} K\left(x_{j}, x_{i}\right)+b g(xi)=∑j=1NαjyjK(xj,xi)+b - 取 α ^ = α ( k + 1 ) \hat{\alpha}=\alpha^{(k+1)} α^=α(k+1)
参考
[1]. 李航. 统计学习方法[M]. 2012.
[2]. 支持向量机通俗导论(理解SVM的三重境界)
[3]. 贪心科技-机器学习特训营课程