往期回顾:
00——机器学习数学基础以及数值计算数值优化方法
01——机器学习基本概念、统计学基本概念简单介绍
02——逻辑回归/logistic回归、广义线性模型与最大熵模型
有关支持向量机的理解在网上已经有很多了,我在这里写一下我的学习笔记。(主要参考《统计学习方法》以及部分博客)
支持向量机包含线性可分的支持向量机、线性支持向量机、非线性支持向量机,让我们从简单到复杂来学习它。
支持向量机(support vector machines, SVM) 是一种二分类模型。它的基本定义是在特征空间上的间隔最大的线性分类器。借助核技巧,支持向量机成为实质上的非线性分类器。基本的学习策略就是寻找最大化的间隔。
让我们先从线性可分的数据集中获取一些基本概念
如图,这是一个线性可分的二分类(分为{+1, -1}两类)问题,其中有一个超平面分隔了两类。我们可以认为某点距离超平面越远,它为对应的类别的确信度就越高。即:对于给定的超平面 w ⋅ x + b = 0 \boldsymbol{w\cdot x +b=0} w⋅x+b=0;点 x 0 \boldsymbol x_0 x0距离该平面的远近可以相对的使用 ∣ w ⋅ x 0 + b ∣ |\boldsymbol{w\cdot x_0+b}| ∣w⋅x0+b∣来表示。而 w ⋅ x + b \boldsymbol{w\cdot x +b} w⋅x+b的符号与类标记的符号y是否一致就可以表示分类的正确性。因此给出函数间隔(functional margin)的概念:
但是我们不难发现若成比例的增长超平面的参数,超平面不会改变,这对我们要优化参数找到最大间隔造成了不便,因此我们可以对参数进行某些8约束,如规范化,使得 ∥ w ∥ = 1 \|w\|=1 ∥w∥=1(这里视为L2范数)从而使得间隔是确定的。也就是几何间隔(geometric margin):
支持向量机所寻找的就是所有可分割两类的超平面中,几何间隔最大的超平面。
即下面的约束最优化问题: max w , b γ s.t. y i ( w ∥ w ∥ ⋅ x i + b ∥ w ∥ ) ≥ γ , i = 1 , 2 , … , N \begin{aligned} &\max_{w,b} ~~~~~\gamma\\ &~~\text{s.t.}~~~y_i(\dfrac{w}{\|w\|}\cdot x_i +\dfrac{b}{\|w\|})\ge \gamma,~~~i=1,2,\dots,N \end{aligned} w,bmax γ s.t. yi(∥w∥w⋅xi+∥w∥b)≥γ, i=1,2,…,N转换为函数间隔,我们得到 max w , b γ ^ ∥ w ∥ s.t. y i ( w ⋅ x i + b ) ≥ γ ^ , i = 1 , 2 , … , N \begin{aligned} &\max_{w,b} ~~~~~\dfrac{\hat \gamma}{\|w\|}\\ &~~\text{s.t.}~~~y_i(w\cdot x_i +b)\ge \hat \gamma,~~~i=1,2,\dots,N \end{aligned} w,bmax ∥w∥γ^ s.t. yi(w⋅xi+b)≥γ^, i=1,2,…,N
注:凸优化问题是指目标函数和约束函数都是连续可微的凸函数,且等式约束是仿射函数。
求解出优化问题的最优解 w ∗ , b ∗ w^*,b^* w∗,b∗后,我们就可以得到分离超平面,以及决策函数: f ( x ) = sign ( w ∗ ⋅ x + b ∗ ) f(x)=\text{sign} (w^* \cdot x +b^*) f(x)=sign(w∗⋅x+b∗)
这里主要解释证明一下为什么支持向量机有如下定理:
支持向量就是使不等式约束等号成立的点,即: y i ( w ⋅ x i + b ) − 1 = 0 y_i(w\cdot x_i+b)-1=0 yi(w⋅xi+b)−1=0因此对于所有正类和负类,所有都支持向量在超平面 w ⋅ x + b = ± 1 w\cdot x +b=\pm 1 w⋅x+b=±1上。如图所示,
两个超平面之间形成一条长带,分离超平面位于它们中央。长带的宽度,称为间隔。间隔大小为 2 ∥ w ∥ 2\over \|w\| ∥w∥2。同时两个支持向量超平面称为间隔边界。
对于线性不可分的数据集,通常情况下,训练数据中有一些特异点,将这些特异点去除后,剩下大部分的样本点组成的集合是线性可分的。
对于线性可分支持向量机的凸二次规划问题,我们可以构造广义拉格朗日函数:
L = 1 2 ∥ w ∥ 2 − ∑ i = 1 N α i [ y i ( w ⋅ x i + b ) − 1 ] \mathcal{L}={1\over 2}\|w\|^2-\sum_{i=1}^N\alpha_i[y_i(w\cdot x_i+b)-1] L=21∥w∥2−i=1∑Nαi[yi(w⋅xi+b)−1]其中 α = ( α 1 , α 2 , … , α N ) T \alpha=(\alpha_1,\alpha_2,\dots,\alpha_N)^T α=(α1,α2,…,αN)T为拉格朗日乘子向量。
对于原始问题: min w , b max α L ( w , b , α ) \min_{w,b}\max_\alpha \mathcal{L}(\boldsymbol{w,b,\alpha}) minw,bmaxαL(w,b,α),由于这是一个凸二次规划问题,因此我们可以运用拉格朗日的对偶性,求解对偶问题来得到原始问题的最优解: max α min w , b L ( w , b , α ) \max_\alpha\min_{w,b}\mathcal L(\boldsymbol{w,b,\alpha}) αmaxw,bminL(w,b,α)
具体求解过程如下:
L ( w , b , α ) = 1 2 ∑ i = 1 N ∑ j − 1 N α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 N α i y i ( ( ∑ j = 1 N α j y j x j ) ⋅ x i + b ) + ∑ i = 1 N α i = − 1 2 ∑ i = 1 N ∑ j − 1 N α i α j y i y j ( x i ⋅ x j ) + ∑ i = 1 N α i \begin{aligned}\mathcal L(\boldsymbol{w,b,\alpha})&={1\over 2}\sum_{i=1}^N\sum_{j-1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^N\alpha_iy_i\bigg ( \bigg(\sum_{j=1}^N\alpha_jy_jx_j\bigg )\cdot x_i +b\bigg )+\sum^N_{i=1}\alpha_i\\ &=-{1\over 2}\sum_{i=1}^N\sum_{j-1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)+\sum^N_{i=1}\alpha_i\end{aligned} L(w,b,α)=21i=1∑Nj−1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαiyi((j=1∑Nαjyjxj)⋅xi+b)+i=1∑Nαi=−21i=1∑Nj−1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
具体推导见图:
由此我们求出了 min w , b L ( w , b , α ) = − 1 2 ∑ i = 1 N ∑ j − 1 N α i α j y i y j ( x i ⋅ x j ) + ∑ i = 1 N α i \min_{w,b}\mathcal L(\boldsymbol{w,b,\alpha})=-{1\over 2}\sum_{i=1}^N\sum_{j-1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)+\sum^N_{i=1}\alpha_i w,bminL(w,b,α)=−21i=1∑Nj−1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi
以上就是线性可分的支持向量机学习的基本算法。
同之前一样,我们构造广义拉格朗日函数: L ( w , b , ξ , α , μ ) = 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i − ∑ i = 1 N α i ( y i ( w ⋅ x i + b ) − 1 + ξ i ) − ∑ i = 1 N μ i ξ i \mathcal L(\boldsymbol{w,b,\xi,\alpha,\mu} )={1\over 2}\|w\|^2+C\sum^N_{i=1}\xi_i-\sum^N_{i=1}\alpha_i(y_i(w\cdot x_i+b)-1+\xi_i)-\sum^N_{i=1}\mu_i\xi_i L(w,b,ξ,α,μ)=21∥w∥2+Ci=1∑Nξi−i=1∑Nαi(yi(w⋅xi+b)−1+ξi)−i=1∑Nμiξi其中 α i ⩾ 0 , μ i ⩾ 0. \alpha_i\geqslant0,\mu_i\geqslant0. αi⩾0,μi⩾0.
首先,我们求 min w , b , ξ L ( w , b , ξ , α , μ ) \min_{w,b,\xi} \mathcal L(\boldsymbol{w,b,\xi,\alpha,\mu} ) minw,b,ξL(w,b,ξ,α,μ),对 w , b , ξ w,b,\xi w,b,ξ求梯度并令其为零。其中前两个与之前一样。
∇ w L ( w , b , ξ , α , μ ) = w − ∑ i = 1 N α i y i x i = 0 ∇ b L ( w , b , ξ , α , μ ) = − ∑ i = 1 N α i y i = 0 ∇ ξ i L ( w , b , ξ , α , μ ) = C − α i − μ i = 0 \nabla_w\mathcal L(\boldsymbol{w,b,\xi,\alpha,\mu} )=w-\sum_{i=1}^N\alpha_iy_ix_i=0\\ \nabla_b\mathcal L(\boldsymbol{w,b,\xi,\alpha,\mu} )=-\sum_{i=1}^N\alpha_iy_i=0\\ \nabla_{\xi_i}\mathcal L(\boldsymbol{w,b,\xi,\alpha,\mu} )=C-\alpha_i-\mu_i=0 ∇wL(w,b,ξ,α,μ)=w−i=1∑Nαiyixi=0∇bL(w,b,ξ,α,μ)=−i=1∑Nαiyi=0∇ξiL(w,b,ξ,α,μ)=C−αi−μi=0
代入函数中,会发现得到与之前一样的形式:
min w , b , ξ L ( w , b , ξ , α , μ ) = − 1 2 ∑ i = 1 N ∑ j − 1 N α i α j y i y j ( x i ⋅ x j ) + ∑ i = 1 N α i \min_{w,b,\xi}\mathcal L(\boldsymbol{w,b,\xi,\alpha,\mu}) =-{1\over 2}\sum_{i=1}^N\sum_{j-1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)+\sum^N_{i=1}\alpha_i w,b,ξminL(w,b,ξ,α,μ)=−21i=1∑Nj−1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi因此对偶问题为:
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 C − α i − μ i = 0 α i ⩾ 0 μ i ⩾ 0 , i = 1 , 2 , … , N \begin{aligned}\min_\alpha~~&{1\over 2}\sum_{i=1}^N\sum_{j-1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum^N_{i=1}\alpha_i\\ \text{s.t.}~~&\sum_{i=1}^N\alpha_iy_i=0\\ &C-\alpha_i-\mu_i=0\\ &\alpha_i\geqslant0\\ &\mu_i\geqslant0,i=1,2,\dots,N\end{aligned} αmin s.t. 21i=1∑Nj−1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαii=1∑Nαiyi=0C−αi−μi=0αi⩾0μi⩾0,i=1,2,…,N
将约束条件合并,我们可以得到 0 ⩽ α i ⩽ C 0\leqslant \alpha_i\leqslant C 0⩽αi⩽C
对于原始问题和对偶问题等价性的证明,也与之前类似,证明其满足KKT条件即可。
分离超平面: ∑ i = 1 N α i ∗ y i ( x ⋅ x i ) + b ∗ = 0 \sum_{i=1}^N\alpha_i^*y_i(x\cdot x_i)+b^*=0 i=1∑Nαi∗yi(x⋅xi)+b∗=0
在决定分离超平面时,只有支持向量起作用,而其他实例点不起作用。由于支持向量在确定分离超平面中起到决定性作用,所以将这种分类模型成为“支持向量机”。
上面只是介绍了线性支持向量机,对于非线性的分类问题,我们可以使用非线性支持向量机,它使用了核技巧。核技巧适用于很多统计学习问题,是十分重要的方法。
非线性问题是指利用非线性模型才能很好分类的问题,如左图所示,我们无法用直线将正负实例分开,但可以用一条椭圆曲线分开。一般来说,对于给定的数据集,其中,实例 x i ∈ X = R n x_i\in\mathcal X=\R^n xi∈X=Rn,对应的标记有两类 y i ∈ Y = { − 1 , + 1 } , i = 1 , 2 , … , N y_i\in\mathcal Y=\{-1,+1\},i=1,2,\dots,N yi∈Y={−1,+1},i=1,2,…,N。如果能用 R n \R^n Rn中的一个超曲面将正负例正确分开,则称这个问题为非线性可分问题。
但是如果我们将数据集重新映射到一个高维的空间,如右图,我们可以发现有一个超平面将两个类别正确分类。因此我们对于非线性的分类问题,我们往往采用将其重新映射到更高维的空间,以使非线性的问题变换为线性分类问题。然后我们就可以在新空间里用线性分类学习方法从训练数据中学习分类模型。
定义:设 X \mathcal X X是输入空间(欧氏空间 R n \R^n Rn的子集或离散集合),又设 H \mathcal H H为特征空间(希尔伯特空间),如果存在一个从 X \mathcal X X到 H \mathcal H H的映射 ϕ ( x ) : X → H \phi(x):\mathcal{X\rightarrow H} ϕ(x):X→H使得对所有 x , z ∈ X x,z\in\mathcal X x,z∈X,函数 K ( x , z ) K(x,z) K(x,z)满足条件 K ( z , x ) = ϕ ( x ) ⋅ ϕ ( z ) K(z,x)=\phi(x)\cdot \phi(z) K(z,x)=ϕ(x)⋅ϕ(z)则称 K ( x , z ) K(x,z) K(x,z)为核函数, ϕ \phi ϕ为映射函数,式中为两函数的内积。
关于核函数的更通俗的理解,可以看看《关于核函数的一些思考》
之前求解出的对偶问题中,我们发现无论是目标函数还是决策函数都只涉及向量的内积,因此我们考虑可以使用核函数代替,以此来实现非线性支持向量机的学习。
此时对偶问题的目标函数变为 W ( α ) = 1 2 ∑ i = 1 N ∑ j − 1 N α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 N α i W(\alpha)={1\over 2}\sum_{i=1}^N\sum_{j-1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum^N_{i=1}\alpha_i W(α)=21i=1∑Nj−1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαi
同样,分类决策函数变为 f ( x ) = sign ( ∑ i = 1 N s α i ∗ y i K ( x i , x ) + b ∗ ) f(x)=\text{sign}\bigg (\sum_{i=1}^{N_s} \alpha_i^*y_ iK(x_i,x)+b^*\bigg ) f(x)=sign(i=1∑Nsαi∗yiK(xi,x)+b∗)
如果我们已知映射函数 ϕ \phi ϕ那么我们就可以通过 ϕ ( x ) ⋅ ϕ ( z ) \phi(x)\cdot \phi(z) ϕ(x)⋅ϕ(z)直接求得核函数。但实际上我们很难去学习映射函数,那么我们怎样才能不用构造映射函数而直接判断一个给定的函数 K ( x , z ) K(x,z) K(x,z)是否核函数呢?
我们通常所说的核函数就是正定核函数,对于它的进一步理解,建议看一下这篇教程
正定核的充要条件:设 K : X × X → R K:\mathcal{X\times X}\rightarrow \R K:X×X→R是对称函数,则 K ( x , z ) K(x,z) K(x,z)为正定核函数的充要条件是对任意 x i ∈ X , x = 1 , 2 , … , m , K ( x , z ) x_i\in\mathcal X,x=1,2,\dots,m,~~~K(x,z) xi∈X,x=1,2,…,m, K(x,z)对应的Gram矩阵: K = [ K ( x i , x j ) ] m × m K=[K(x_i,x_j)]_{m\times m} K=[K(xi,xj)]m×m是半正定矩阵。
由此我们可以写出正定核的等价定义: 设 X ⊂ R n , K ( x , z ) \mathcal{X}\subset \R^n,K(x,z) X⊂Rn,K(x,z)是定义在 X × X \mathcal{X\times X} X×X上的对称函数,如果对任意 x i ∈ X , i = 1 , 2 , … , m , K ( x , z ) x_i\in \mathcal{X},i=1,2,\dots,m,K(x,z) xi∈X,i=1,2,…,m,K(x,z)对应的Gram矩阵是半正定矩阵,则称 K ( x , z ) K(x,z) K(x,z)是正定核。
这一定义对于构造核函数时很有用。但对于具体函数我们不容易检验它是否为正定核函数。在实际问题中我们往往应用已有的核函数。
另外,由Mercer定理我们可以得到Mercer核,正定核比它更具有一般性。
支持向量机还有一种解释,就是最小化以下目标函数: ∑ i = 1 N [ 1 − y i ( w ⋅ x i + b ) ] + + λ ∥ w ∥ 2 \sum^N_{i=1}[1-y_i(w\cdot x_i+b)]_++\lambda\|w\|^2 i=1∑N[1−yi(w⋅xi+b)]++λ∥w∥2即SVM能够同时实现经验风险和结构风险的最小化,从而达到在统计样本量较少的情况下,能获得良好统计规律的目的。
其中第一项是经验风险,称为合页损失函数(hinge loss)即 [ z ] + { z , z > 0 0 , z ⩽ 0 [z]_+\begin{cases}z,z>0\\0,z\leqslant 0\end{cases} [z]+{z,z>00,z⩽0当样本点被正确分类且函数间隔大于1时,损失是0,否则会产生损失。目标函数第二项时正则化项,也是结构风险。
SMO算法是两变量支持向量机学习的一种快速算法,不断地将原二次规划问题分解为只有两个变量的二次规划子问题,并对子问题进行解析求解,直到所有变量满足KKT条件位置。证明不在这里详述了,但它具体的学习步骤如图:
对于SMO的更深入的理解,请参阅:1、SVM算法实现,2 、SMO优化算法
这里推荐一下July大神的 支持向量机通俗导论(理解SVM的三层境界)说的非常细致且由浅入深。
以上内容如有谬误还请告知。