引言
核心思想:
支持向量机的核心思想很简单:在众多可行的分类的超平面中,选择一个超平面,使得两类样本到该超平面的间隔最大。
为什么叫支持向量机?
当我们求解完支持向量机之后,可以发现最大间隔超平面完全由部分训练数据
x
i
x_i
xi决定,这部分数据的名字叫支持向量,因此这种分类方法被称为支持向量机。
方法
简单推导
支持向量机的推导过程总体来说较为简单:
给定包含 n n n个点的训练集 ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) (x_1, y_1), (x_2, y_2), ..., (x_n, y_n) (x1,y1),(x2,y2),...,(xn,yn), 其中 y i ∈ { − 1 , 1 } y_i \in \{-1, 1\} yi∈{−1,1}。
对于线性SVM来说,其超平面可以表示为:
w T x + b = 0 w^{T}x + b = 0 wTx+b=0
任意一点 x i x_i xi到这个超平面的距离为:
d = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ d = \frac{|w^{T}x+b|}{||w||} d=∣∣w∣∣∣wTx+b∣
我们希望这个距离越大越好,即:
d = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ ≥ m , i ∈ { 1 , 2 , . . . , n } d = \frac{|w^{T}x+b|}{||w||} \ge m \text{, } i \in \{1, 2, ..., n\} d=∣∣w∣∣∣wTx+b∣≥m, i∈{1,2,...,n}
也就是说,我们找到一组向量 w w w,使得 m m m最大。
把上式分子的绝对值去掉,有:
d = y ( w T x + b ) ∣ ∣ w ∣ ∣ ≥ m , i ∈ { 1 , 2 , . . . , n } d = \frac{y(w^{T}x+b)}{||w||} \ge m \text{, } i \in \{1, 2, ..., n\} d=∣∣w∣∣y(wTx+b)≥m, i∈{1,2,...,n}
因为当 w T x i + b < − 1 w^{T}x_{i}+b < -1 wTxi+b<−1时,有 y i = − 1 y_{i} = -1 yi=−1
当 w T x i + b > 1 w^{T}x_{i}+b > 1 wTxi+b>1时,有 y i = 1 y_{i} = 1 yi=1
我们令 ∣ ∣ w ∣ ∣ d = 1 ||w||d = 1 ∣∣w∣∣d=1, 因为这不会改变超平面的性质。因此有:
max 1 ∣ ∣ w ∣ ∣ \max \frac{1}{||w||} max∣∣w∣∣1
为了方便计算,我们将上述最大化问题转为最小化问题,有:
min 1 2 ∣ ∣ w ∣ ∣ 2 \min \frac{1}{2}||w||^2 min21∣∣w∣∣2
除了上述目标函数,还需要如下约束条件:
w T x i + b < − 1 w^{T}x_{i}+b < -1 wTxi+b<−1, y i = − 1 y_{i} = -1 yi=−1
w T x i + b > 1 w^{T}x_{i}+b > 1 wTxi+b>1, y i = 1 y_{i} = 1 yi=1
把这两个式子合并,有: y i ( w T x i + b ) ≥ 1 \quad y_{i}\left(w^{T} x_{i}+b\right) \geq 1 yi(wTxi+b)≥1
因此,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}\left(w^{T} x_{i}+b\right) \geq 1
min21∥w∥2 s.t. yi(wTxi+b)≥1
可以看到,两条虚线上对应的向量叫做支持向量,且这两条向量完全由支持向量决定。
硬间隔 (Hard Margin)
在上述推导中, y i ( w T x i + b ) ≥ 1 \quad y_{i}\left(w^{T} x_{i}+b\right) \geq 1 yi(wTxi+b)≥1的条件保证了所有训练数据都处于边缘之外,因此被称为硬间隔。
硬间隔的目标函数如下:
min 1 2 ∥ w ∥ 2 s.t. y i ( w T x i + b ) ≥ 1 \begin{aligned} &\min \frac{1}{2}\|w\|^{2} \\ \text{ s.t. } & y_{i}\left(w^{T} x_{i}+b\right) \geq 1 \end{aligned} s.t. min21∥w∥2yi(wTxi+b)≥1
对于一个新数据,可以使用如下判别方法: x → s g n ( w T x + b ) x \to sgn(w^{T}x+b) x→sgn(wTx+b)。其中, s g n sgn sgn为符号函数。
软间隔
实际应用中,上述硬间隔往往很难满足条件,因此这里引入一个松弛变量 ξ ≥ 0 \xi \ge 0 ξ≥0,且 y i ( w T x i + b ) ⩾ 1 − ξ i y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right) \geqslant 1-\xi_{i} yi(wTxi+b)⩾1−ξi (也就是说,允许一些样本在间隔之内,不必所有样本必须在间隔之外。)
根据上述松弛条件,软间隔的目标函数如下:
min w , b , ξ i 1 2 ∥ w ∥ 2 + C ∑ i = 1 n ξ i s.t. y i ( w T x i + b ) ⩾ 1 − ξ i ξ i ⩾ 0 , i = 1 , 2 , . . . . , n \begin{aligned} & \min _{\boldsymbol{w}, b, \xi_{i}} \frac{1}{2}\|\boldsymbol{w}\|^{2}+C \sum_{i=1}^{n} \xi_{i} \\ \text { s.t. } & y_{i}\left(\boldsymbol{w}^{\mathrm{T}} \boldsymbol{x}_{i}+b\right) \geqslant 1-\xi_{i} \\ & \xi_{i} \geqslant 0, i=1,2, . . . ., \boldsymbol{n} \end{aligned} s.t. w,b,ξimin21∥w∥2+Ci=1∑nξiyi(wTxi+b)⩾1−ξiξi⩾0,i=1,2,....,n
直观理解软间隔和硬间隔的差异:
核函数
这里不对SVM的求解过程进行详细介绍,我们试图对核函数的核心思想和求解过程进行直观理解.
如下图,kernel trick主要解决的是将线性不可分的问题映射到更高的维度,使其变成一个线性可分的问题。使用公式表达,即利用 ϕ ( x ) \phi (x) ϕ(x)对 x x x进行升维操作。
那么如何获取 ϕ ( x ) \phi(x) ϕ(x)这个函数呢? 我们先不求 ϕ ( x ) \phi(x) ϕ(x)本身,先看看将 x x x升维之后求解 w w w的过程发生了哪些变化:
升维之后,SVM的超平面方程如下:
w T ϕ ( x ) + b = 0 w^{T}\phi(x) + b = 0 wTϕ(x)+b=0
要得到 w w w和 b b b,需要优化如下目标函数(具体推导过程参考 [2], 这里不作为重点):
min λ [ 1 2 ∑ i = 1 n ∑ j = 1 n λ i λ j y i y j ( ϕ ( x i ) ⋅ ϕ ( x j ) ) − ∑ j = 1 n λ i ] s.t. ∑ i = 1 n λ i y i = 0 , λ i ≥ 0 , C − λ i − μ i = 0 \begin{aligned} &\min _{\lambda}\left[\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} \lambda_{i} \lambda_{j} y_{i} y_{j}\left(\phi\left(x_{i}\right) \cdot \phi\left(x_{j}\right)\right)-\sum_{j=1}^{n} \lambda_{i}\right] \\ \text { s.t. } &\sum_{i=1}^{n} \lambda_{i} y_{i}=0, \quad \lambda_{i} \geq 0, \quad C-\lambda_{i}-\mu_{i}=0 \end{aligned} s.t. λmin[21i=1∑nj=1∑nλiλjyiyj(ϕ(xi)⋅ϕ(xj))−j=1∑nλi]i=1∑nλiyi=0,λi≥0,C−λi−μi=0
和原始SVM求解的差别在于,这里把原始SVM目标函数中的 ( x i ⋅ x j ) (x_i \cdot x_j) (xi⋅xj)替换成了 ( ϕ ( x i ) ⋅ ϕ ( x j ) ) \left( \phi(x_i) \cdot \phi(x_j)\right) (ϕ(xi)⋅ϕ(xj)),其他地方不变。
然而,问题在于 ϕ ( x i ) \phi(x_i) ϕ(xi)和 ϕ ( x j ) \phi(x_j) ϕ(xj)的内积若直接求解不太好计算,所以这里提出了一种核技巧(kernel trick),目的是将映射之后的内积 ( ϕ ( x i ) ⋅ ϕ ( x j ) ) \left( \phi(x_i) \cdot \phi(x_j)\right) (ϕ(xi)⋅ϕ(xj))转化为原始空间中的某种计算 κ ( x i , x j ) \kappa(x_i, x_j) κ(xi,xj)。这样,我们就可以极大的简化运算,同时我们还不用显式地求解 ϕ ( x ) \phi(x) ϕ(x)是多少了。
常见的核函数 κ ( x i , x j ) \kappa(x_i, x_j) κ(xi,xj)
-
线性核函数
k ( x i , x j ) = x i T x j k\left(x_{i}, x_{j}\right)=x_{i}^{T} x_{j} k(xi,xj)=xiTxj -
多项式核函数
k ( x i , x j ) = ( x i T x j ) d k\left(x_{i}, x_{j}\right)=\left(x_{i}^{T} x_{j}\right)^{d} k(xi,xj)=(xiTxj)d -
高斯核函数
k ( x i , x j ) = exp ( − ∥ x i − x j ∥ 2 δ 2 ) k\left(x_{i}, x_{j}\right)=\exp \left(-\frac{\left\|x_{i}-x_{j}\right\|}{2 \delta^{2}}\right) k(xi,xj)=exp(−2δ2∥xi−xj∥)
常用工具
Libsvm
SVM经典工具
LIBSVM – A Library for Support Vector Machines
sklearn svm
小结
SVM的作为一种经典且性能良好的分类和(或)回归模型,其内容远不止上述这些。
但是掌握了这些基本概念之后相信再根据实际应用去学习其他方面的内容也不是太难。
这里我们没有介绍SVM的详细求解过程,更多的是对SVM的核心概念和思想进行学习。
这样,对于现有的svm工具包,我们就可以根据其原理和手中数据的特点确定调节超参数的方向。
参考文献
[1] https://en.wikipedia.org/wiki/Support-vector_machine
[3] R. O. Duda, P. E. Hart, and D. G. Stork, Pattern Classification. John Wiley & Sons, 2012.