《百面机器学习》第三章是经典算法,第一个经典算法就是SVM。但是书中对SVM的讲解比较简略,而李航老师的《统计学习方法》拿出非常大的篇幅对SVM进行详细讲解,所以本篇先参考《统计学习方法》复习下SVM相关知识点,再看下《百面》中涉及SVM的面试题。
SVM
(此部分主要参考李航老师的《统计学习方法》)
支持向量机(support vector machines,SVM)是一种二类分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划(convex quadratic programming)的问题,也等价于正则化的合页损失函数的最小化问题。
支持向量机按模型复杂程度可以分为线性可分支持向量机(linear support vector machine in linearly separable case)、线性支持向量机(linear support vector machine)、非线性支持向量机(non-linear support vector machine)。
当训练数据线性可分时,通过硬间隔最大化学习一个线性的分类器;当训练数据近似线性可分时,通过软间隔最大化学习一个线性分类器;当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。
1. 线性可分支持向量机
定义
给定线性可分训练数据集,通过间隔最大化或等价地求解相应的凸二次规划问题学习得到的分离超平面为w ∗ ⋅ x + b ∗ = 0
w^*\cdot x + b^* = 0
w ∗ ⋅ x + b ∗ = 0
以及相应的分类决策函数f ( x ) = s i g n ( w ∗ ⋅ x + b ∗ )
f(x)=sign(w^*\cdot x + b^*)
f ( x ) = s i g n ( w ∗ ⋅ x + b ∗ )
称为线性可分支持向量机。
几何间隔和函数间隔
几何间隔的定义
几何间隔一般是实例点到超平面的带符号的距离,当样本点被超平面正确分类时就是实例点到超平面的距离。
对于给定的训练数据集T T T 和超平面(w , b w,b w , b ),定义超平面(w , b w,b w , b )关于样本点(x i , y i x_i,y_i x i , y i )的几何间隔为γ i = y i ( w ∥ w ∥ ⋅ x + b ∥ w ∥ )
\gamma_i = y_i(\frac w {\lVert w \rVert} \cdot x + \frac b {\lVert w \rVert})
γ i = y i ( ∥ w ∥ w ⋅ x + ∥ w ∥ b )
定义超平面(w , b w,b w , b )关于训练数据集T T T 的几何间隔为超平面(w , b w,b w , b )关于T T T 中所有样本点(x i , y i x_i, y_i x i , y i )的几何间隔的最小值,即γ = min i = 1 , . . . , N γ i
\gamma = \min_{i=1,...,N} \gamma_i
γ = i = 1 , . . . , N min γ i
几何间隔的推导过程
函数间隔的定义
对于给定的训练数据集T T T 和超平面(w , b w,b w , b ),定义超平面(w , b w,b w , b )关于样本点(x i , y i x_i,y_i x i , y i )的函数间隔为γ ^ i = y i ( w ⋅ x i + b )
\hat \gamma_i = y_i(w\cdot x_i + b)
γ ^ i = y i ( w ⋅ x i + b )
定义超平面(w , b w,b w , b )关于训练数据集T T T 的函数间隔为超平面(w , b w,b w , b )关于T T T 中所有样本点(x i , y i x_i, y_i x i , y i )的函数间隔的最小值,即γ ^ = min i = 1 , . . . , N γ ^ i
\hat \gamma = \min_{i=1,...,N} \hat \gamma_i
γ ^ = i = 1 , . . . , N min γ ^ i
函数间隔与几何间隔有以下关系:γ i = γ ^ i ∥ w ∥
\gamma_i = \frac{\hat \gamma_i}{\lVert w \rVert}
γ i = ∥ w ∥ γ ^ i γ = γ ^ ∥ w ∥
\gamma=\frac{\hat \gamma}{\lVert w \rVert}
γ = ∥ w ∥ γ ^
间隔最大化
支持向量机学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面,对线性可分的训练数据集而言,线性可分分离超平面有无穷多个,但是几何间隔最大的分离超平面是唯一的。
间隔最大化的直观解释是:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类。
最大间隔分离超平面
考虑如何求得一个几何间隔最大的分离超平面,即最大间隔分离超平面,具体的,这个问题可以表示为下面的约束最优化问题:max w , b γ
\max_{w,b} \quad \gamma
w , b max γ s . t . y i ( w ∥ w ∥ ⋅ x i + b ∥ w ∥ ) ⩾ γ , i = 1 , 2 , . . . , N
s.t. \quad y_i(\frac w {\lVert w \rVert} \cdot x_i+\frac b {\lVert w \rVert}) \geqslant \gamma, \quad i=1,2,...,N
s . t . y i ( ∥ w ∥ w ⋅ x i + ∥ w ∥ b ) ⩾ γ , i = 1 , 2 , . . . , N
即我们希望最大化超平面( w , b ) (w,b) ( w , b ) 关于训练数据集的几何间隔γ \gamma γ ,约束条件表示的是超平面(w , b w,b w , b )关于每个训练样本点的几何间隔至少是γ \gamma γ 。
上述条件式左右同乘∥ w ∥ \lVert w \rVert ∥ w ∥ ,max w , b γ ^ ∥ w ∥
\max_{w,b} \frac{\hat\gamma}{\lVert w \rVert}
w , b max ∥ w ∥ γ ^ s . t . y i ( w ⋅ x i + b ) ⩾ γ ^ , i = 1 , 2 , . . . , N
s.t. \quad y_i(w \cdot x_i + b) \geqslant \hat \gamma,\quad i=1,2,...,N
s . t . y i ( w ⋅ x i + b ) ⩾ γ ^ , i = 1 , 2 , . . . , N
可以看出函数间隔γ ^ \hat \gamma γ ^ 并不影响最优化问题的解,而且,最大化1 ∥ w ∥ \frac 1 {\lVert w \rVert} ∥ w ∥ 1 和最小化1 2 ∥ w ∥ 2 \frac 1 2 \lVert w \rVert^2 2 1 ∥ w ∥ 2 是等价的,所以最优化问题变为:min w , b 1 2 ∥ w ∥ 2
\min_{w,b} \frac 1 2 \lVert w \rVert^2
w , b min 2 1 ∥ w ∥ 2 s . t . y i ( w ⋅ x i + b ) − 1 ⩾ 0 , i = 1 , 2 , . . . , N
s.t. \quad y_i(w\cdot x_i + b)-1\geqslant 0,\quad i=1,2,...,N
s . t . y i ( w ⋅ x i + b ) − 1 ⩾ 0 , i = 1 , 2 , . . . , N
这样做的意义是把之前的优化问题转化为凸优化问题进行求解。
所谓凸优化问题,是指约束最优化问题min w f ( w )
\min_w \quad f(w)
w min f ( w ) s . t . g i ( w ) ⩽ 0 , i = 1 , 2 , . . . , k
s.t. \quad g_i(w) \leqslant 0, \quad i=1,2,...,k
s . t . g i ( w ) ⩽ 0 , i = 1 , 2 , . . . , k h i ( w ) = 0 , i = 1 , 2 , . . , l
\qquad h_i(w)=0,\quad i=1,2,..,l
h i ( w ) = 0 , i = 1 , 2 , . . , l
其中,目标函数f ( w ) f(w) f ( w ) 和约束函数g i ( w ) g_i(w) g i ( w ) 都是R n R^n R n 上的连续可微的凸函数,约束函数h i ( w ) h_i(w) h i ( w ) 是R n R^n R n 上的仿射函数。
当目标函数f ( w ) f(w) f ( w ) 是二次函数且约束函数g i ( w ) g_i(w) g i ( w ) 是仿射函数时,凸最优化问题成为凸二次规划问题。
综上,就有下面的线性可分支持向量机的学习算法——最大间隔法 (maximum margin method)。
输入:线性可分训练数据集T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2, y_2),...,(x_N,y_N)\} T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ,其中,x i ∈ X = R n , y i ∈ Y = { − 1 , + 1 } , i = 1 , 2 , . . . , N ; x_i\in X=\R^n,y_i\in Y=\{-1,+1\},i=1,2,...,N; x i ∈ X = R n , y i ∈ Y = { − 1 , + 1 } , i = 1 , 2 , . . . , N ;
输出:最大间隔分离超平面和分类决策函数。
(1)构造并求解约束最优化问题:min w , b 1 2 ∥ w ∥ 2
\min_{w,b} \frac 1 2 \lVert w \rVert^2
w , b min 2 1 ∥ w ∥ 2 s . t . y i ( w ⋅ x i + b ) − 1 ⩾ 0 , i = 1 , 2 , . . . , N
s.t. \quad y_i(w\cdot x_i + b)-1 \geqslant 0, \quad i=1,2,...,N
s . t . y i ( w ⋅ x i + b ) − 1 ⩾ 0 , i = 1 , 2 , . . . , N
求得最优解w ∗ , b ∗ w^*, b^* w ∗ , b ∗ .
(2)由此得到分离超平面:w ∗ ⋅ x + b ∗ = 0
w^* \cdot x + b^* = 0
w ∗ ⋅ x + b ∗ = 0
分离决策函数f ( x ) = s i g n ( w ∗ ⋅ x + b ∗ )
f(x) = sign(w^*\cdot x+b^*)
f ( x ) = s i g n ( w ∗ ⋅ x + b ∗ )
支持向量和间隔边界
在线性可分情况下, 训练数据集的样本点中与分列超平面距离最近的样本点的实例成为支持向量(support vector),支持向量是使约束条件式等号成立的点,即y i ( w ⋅ x i + b ) − 1 = 0
y_i(w\cdot x_i+b)-1=0
y i ( w ⋅ x i + b ) − 1 = 0
对y i = + 1 y_i=+1 y i = + 1 的正例点,支持向量在超平面H 1 : ( w ⋅ x i + b ) = 1
H_1:(w \cdot x_i +b )=1
H 1 : ( w ⋅ x i + b ) = 1 上,对y i = − 1 y_i=-1 y i = − 1 的负例点,支持向量在超平面H 2 : w ⋅ x + b = − 1
H_2:w\cdot x +b=-1
H 2 : w ⋅ x + b = − 1 上。H 1 与 H 2 H_1与H_2 H 1 与 H 2 之间形成一条长带,分离超平面与它们平行且位于它们中央。H 1 与 H 2 H_1与H_2 H 1 与 H 2 之间的距离称为间隔(margin)。间隔依赖于分离超平面的法向量w w w ,等于2 ∥ w ∥ \frac 2 {\lVert w \rVert} ∥ w ∥ 2 。H 1 和 H 2 H_1和H_2 H 1 和 H 2 称为间隔边界。
在决定分离超平面时只有支持向量起作用,而其他实例点并不起作用。
学习的对偶算法
应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解,这样做的优点,一是对偶问题往往更容易求解;二是自然引入核函数,进而推广到非线性分类问题。
首先,构建拉格朗日函数:L ( w , b , α ) = 1 2 ∥ w ∥ 2 − ∑ i = 1 N α i y i ( w ⋅ x i + b ) + ∑ i = 1 N α i
L(w,b,\alpha)=\frac 1 2 {\lVert w \rVert}^2 - \sum^N_{i=1}\alpha_i y_i(w\cdot x_i+b)+\sum_{i=1}^N \alpha_i
L ( w , b , α ) = 2 1 ∥ w ∥ 2 − i = 1 ∑ N α i y i ( w ⋅ x i + b ) + i = 1 ∑ N α i
其中,α = ( α 1 , α 2 , . . . , α N ) T \alpha=(\alpha_1, \alpha_2,...,\alpha_N)^T α = ( α 1 , α 2 , . . . , α N ) T 为拉格朗日乘子向量。
根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题:max α min w , b L ( w , b , α )
\max_\alpha \min_{w,b}L(w,b,\alpha)
α max w , b min L ( w , b , α )
先求极小将求得的w , b w,b w , b 带入式子,得到等价的对偶最优化问题:min α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 N α i
\min_\alpha \quad\frac 1 2 \sum_{i=1}^N \sum_{j=1}^N \alpha_i \alpha_j y_i y_j (x_i \cdot x_j)-\sum_{i=1}^N \alpha_i
α min 2 1 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
\kern-8ems.t. \quad \sum_{i=1}^N \alpha_iy_i=0
s . t . i = 1 ∑ N α i y i = 0 α i ⩾ 0 , i = 1 , 2 , . . . , N
\kern-1em \alpha_i \geqslant 0, i=1,2,...,N
α i ⩾ 0 , i = 1 , 2 , . . . , N
利用KKT条件便可求出原始最优化问题的解w ∗ , b ∗ w^*,b^* w ∗ , b ∗ ,推导过程不展开写了。
线性可分支持向量机学习算法
输入:线性可分训练集T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1, y_1),(x_2,y_2),...,(x_N,y_N)\} T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ,其中x i ∈ X = R n , y i ∈ Y = { − 1 , 1 } x_i \in X=\R^n,y_i \in Y=\{-1,1\} x i ∈ X = R n , y i ∈ Y = { − 1 , 1 } ;
输出:分离超平面和分类决策函数。
(1)构造并求解约束最优化问题min α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 N α i
\min_\alpha \quad \frac12\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^N\alpha_i
α min 2 1 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
\kern-8ems.t. \quad \sum_{i=1}^N \alpha_iy_i=0
s . t . i = 1 ∑ N α i y i = 0 α i ⩾ 0 , i = 1 , 2 , . . . , N
\kern-1em \alpha_i \geqslant 0, i=1,2,...,N
α i ⩾ 0 , i = 1 , 2 , . . . , N
求得最优解α ∗ = ( α 1 ∗ , α 2 ∗ , . . . , α N ∗ ) T \alpha^*=(\alpha_1^*,\alpha_2^*,...,\alpha_N^*)^T α ∗ = ( α 1 ∗ , α 2 ∗ , . . . , α N ∗ ) T 。
(2)计算w ∗ = ∑ i = 1 N α i y i x i
w^*=\sum_{i=1}^N\alpha_iy_ix_i
w ∗ = i = 1 ∑ N α i y i x i
并选择α ∗ \alpha^* α ∗ 的一个正分量α j ∗ > 0 \alpha_j^*>0 α j ∗ > 0 ,计算b ∗ = y i − ∑ i = 1 N α i ∗ y i ( x i ⋅ x j )
b^* = y_i-\sum_{i=1}^N\alpha_i^*y_i(x_i\cdot x_j)
b ∗ = y i − i = 1 ∑ N α i ∗ y i ( x i ⋅ x j )
(3)求得分离超平面w ∗ ⋅ x + b ∗ = 0
w^*\cdot x+b^*=0 w ∗ ⋅ x + b ∗ = 0
分离决策函数:f ( x ) = s i g n ( w ∗ ⋅ x + b ∗ )
f(x)=sign(w^*\cdot x+b^*) f ( x ) = s i g n ( w ∗ ⋅ x + b ∗ )
将训练集中对应于α j ∗ > 0 \alpha_j^*>0 α j ∗ > 0 的样本点( x i , y i ) (x_i,y_i) ( x i , y i ) 的实例称为支持向量。
以上就是硬间隔最大化算法。但是现实问题中,训练数据往往线性不可分,即在样本中出现噪声或特异点,需要更一般的学习算法。
2. 线性支持向量机与软间隔最大化
线性可分问题的支持向量机学习方法,对线性不可分训练数据是不适用的,此时就需要修改硬间隔最大化,使其成为软间隔最大化。
线性支持向量机
现实问题中训练数据集往往存在特异点,如果将这些特异点除去后,剩下大部分的样本点组成的集合是线性可分的,我们就可以用以下方法解决问题。
我们对每个样本点( x i , y i ) (x_i,y_i) ( x i , y i ) 引进一个松弛变量ξ i ⩾ 0 \xi_i\geqslant0 ξ i ⩾ 0 ,使函数间隔加上松弛变量大于等于1。约束条件变为y i ( w ⋅ x i + b ) ⩾ 1 − ξ i
y_i(w\cdot x_i +b)\geqslant1-\xi_i y i ( w ⋅ x i + b ) ⩾ 1 − ξ i 目标函数变为1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i
\frac12\lVert w \rVert^2+C\sum_{i=1}^N\xi_i
2 1 ∥ w ∥ 2 + C i = 1 ∑ N ξ i C>0称为惩罚参数,C值大对误分类的惩罚增大,C值小对误分类的惩罚减小。该目标函数的解释为使1 2 ∥ w ∥ 2 \frac12 \lVert w \rVert^2 2 1 ∥ w ∥ 2 尽量小即距离尽量大,同时使误分类点的个数尽量小。(C大更易过拟合 )
线性不可分的线性支持向量机的学习问题变成如下的凸二次规划问题(原始问题):min 1 2 ∥ w ∥ 2 + C ∑ i = 1 N ξ i
\min \quad \frac12 \lVert w \rVert^2+C\sum_{i=1}^N\xi_i
min 2 1 ∥ w ∥ 2 + C i = 1 ∑ N ξ i s . t . y i ( w ⋅ x i + b ) ⩾ 1 − ξ i , i = 1 , 2 , . . . , N
\kern2ems.t. \quad y_i(w\cdot x_i+b)\geqslant1-\xi_i,\quad i=1,2,...,N
s . t . y i ( w ⋅ x i + b ) ⩾ 1 − ξ i , i = 1 , 2 , . . . , N ξ i ⩾ 0 , i = 1 , 2 , . . . , N
\kern-2em\xi_i \geqslant0, \quad i=1,2,...,N
ξ i ⩾ 0 , i = 1 , 2 , . . . , N
学习的对偶算法
原始问题的对偶问题是min 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 N α i
\kern 2em\min \quad \frac12\sum_{i=1}^N\sum_{j=1}^N\alpha_i \alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^N\alpha_i
min 2 1 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
\kern -8ems.t. \quad \sum_{i=1}^N\alpha_i y_i = 0
s . t . i = 1 ∑ N α i y i = 0 0 ⩽ α i ⩽ C , i = 1 , 2 , . . . , N
\kern1em0\leqslant\alpha_i \leqslant C, \quad i=1,2,...,N
0 ⩽ α i ⩽ C , i = 1 , 2 , . . . , N 线性支持向量机学习算法
输入:训练数据集T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ,其中,x i ∈ X = R n , y i ∈ Y = { − 1 , 1 } , i = 1 , 2 , . . . , N x_i\in X=\R_n,y_i \in Y=\{-1,1\}, i=1,2,...,N x i ∈ X = R n , y i ∈ Y = { − 1 , 1 } , i = 1 , 2 , . . . , N
输出:分离超平面和分类决策函数
(1)选择惩罚参数C > 0 C>0 C > 0 ,构造并求解凸二次规划问题min 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 N α i
\kern 2em\min \quad \frac12\sum_{i=1}^N\sum_{j=1}^N\alpha_i \alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^N\alpha_i
min 2 1 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
\kern -8ems.t. \quad \sum_{i=1}^N\alpha_i y_i = 0
s . t . i = 1 ∑ N α i y i = 0 0 ⩽ α i ⩽ C , i = 1 , 2 , . . . , N
\kern1em0\leqslant\alpha_i \leqslant C, \quad i=1,2,...,N
0 ⩽ α i ⩽ C , i = 1 , 2 , . . . , N 求得最优解α ∗ = ( α 1 ∗ , α 2 ∗ , . . . , α N ∗ ) T \alpha^*=(\alpha^*_1,\alpha^*_2,...,\alpha^*_N)^T α ∗ = ( α 1 ∗ , α 2 ∗ , . . . , α N ∗ ) T 。
(2)计算w ∗ = ∑ i = 1 N α i ∗ y i x i w^*=\sum_{i=1}^N\alpha_i^*y_ix_i w ∗ = ∑ i = 1 N α i ∗ y i x i
选择α ∗ \alpha^* α ∗ 的一个分量α j ∗ \alpha^*_j α j ∗ 适合条件0 < α j ∗ < C 0<\alpha^*_j<C 0 < α j ∗ < C ,计算b j ∗ = y j − ∑ i = 1 N y i α j ∗ ( x i ⋅ x j )
b^*_j = y_j-\sum_{i=1}^Ny_i\alpha^*_j(x_i\cdot x_j)
b j ∗ = y j − i = 1 ∑ N y i α j ∗ ( x i ⋅ x j )
(3)求得分离超平面w ∗ ⋅ x + b = 0
w^*\cdot x+b=0
w ∗ ⋅ x + b = 0
分类决策函数f ( x ) = s i g n ( w ∗ ⋅ x + b )
f(x) = sign(w^*\cdot x +b)
f ( x ) = s i g n ( w ∗ ⋅ x + b )
支持向量
在线性不可分的情况下,将对偶问题的解α ∗ \alpha^* α ∗ 中对应于α j ∗ > 0 \alpha^*_j>0 α j ∗ > 0 的样本点( x j , y j ) (x_j,y_j) ( x j , y j ) 的实例x i x_i x i 称为支持向量(软间隔的支持向量)。支持向量到间隔边界的距离ξ i ∥ w ∥ \frac {\xi_i} {\lVert w \rVert} ∥ w ∥ ξ i
软间隔的支持向量x i x_i x i 或者在间隔边界上,或者在间隔边界与分离超平面之间,或者在分离超平面误分一侧。若α i < C \alpha_i<C α i < C ,则ξ i = 0 \xi_i=0 ξ i = 0 ,支持向量x i x_i x i 恰好落在间隔边界上;若α ∗ = C , 0 < ξ i < 1 \alpha^*=C,0<\xi_i<1 α ∗ = C , 0 < ξ i < 1 ,则分类正确,x i x_i x i 在间隔边界与分离超平面之间;若α ∗ = C , ξ i = 1 \alpha^*=C,\xi_i=1 α ∗ = C , ξ i = 1 ,则分类正确,x i x_i x i 在分离超平面上;若α ∗ = C , ξ i > 1 \alpha^*=C,\xi_i>1 α ∗ = C , ξ i > 1 ,则分类错误,x i x_i x i 在分离超平面误分一侧。
3. 非线性支持向量机与核函数
有时分类问题是非线性的,这时就要使用非线性支持向量机,其主要特点是利用核技巧(kernel trick)。
用线性方法求解非线性分类问题分为两步:
使用一个变换将原空间的数据映射到新空间
在新空间用线性分类学习方法从训练数据中学习分类模型。
核技巧
核函数的定义
设X X X 是输入空间(欧氏空间R n \R^n R n 的子集或离散集合),又设H \Eta H 为特征空间(希尔伯特空间),如果存在一个从X X X 到H \Eta H 的映射ϕ ( x ) : X → H
\phi(x):X \rightarrow \Eta
ϕ ( x ) : X → H 使得对所有x , z ∈ X x,z\in X x , z ∈ X ,函数K ( x , z ) K(x,z) K ( x , z ) 满足条件K ( x , z ) = ϕ ( x ) ⋅ ϕ ( z )
K(x,z)=\phi(x)\cdot \phi(z)
K ( x , z ) = ϕ ( x ) ⋅ ϕ ( z ) 则称K ( x , z ) K(x,z) K ( x , z ) 为核函数,ϕ ( x ) \phi(x) ϕ ( x ) 为映射函数,ϕ ( x ) ⋅ ϕ ( z ) \phi(x)\cdot \phi(z) ϕ ( x ) ⋅ ϕ ( z ) 为内积运算。
核技巧在支持向量机中的应用
我们注意到在线性支持向量机的对偶问题中,无论是目标函数还是决策函数(分离超平面)都只涉及输入实例与实例之间的内积。对偶问题的目标函数中的内积x i ⋅ x j x_i\cdot x_j x i ⋅ x j 可以用K ( x i , y i ) = ϕ ( x i ) ⋅ ϕ ( x j ) K(x_i,y_i)=\phi(x_i)\cdot \phi(x_j) K ( x i , y i ) = ϕ ( x i ) ⋅ ϕ ( x j ) 来代替。
当映射函数是非线性函数时,学习到的含有核函数的支持向量机就是非线性分类模型。在实际应用中,往往依赖领域知识直接选择核函数,核函数选择的有效性需要通过实验验证。
常用核函数
线性核K ( x , z ) = x ⋅ z K(x,z)=x\cdot z K ( x , z ) = x ⋅ z
多项式核函数K ( x , z ) = ( x ⋅ z + 1 ) p K(x,z)=(x\cdot z+1)^p K ( x , z ) = ( x ⋅ z + 1 ) p
对应的支持向量机是一个p次多项式分类器。分类决策函数成为f ( x ) = s i g n ( ∑ i = 1 N s α i ∗ y i ( x i ⋅ x + 1 ) p + b ∗ ) f(x)=sign(\sum_{i=1}^{N_s} \alpha^*_iy_i(x_i\cdot x+1)^p+b^*) f ( x ) = s i g n ( i = 1 ∑ N s α i ∗ y i ( x i ⋅ x + 1 ) p + b ∗ )
高斯核函数K ( x , z ) = e x p ( − ∥ x − z ∥ 2 2 σ 2 ) K(x,z)=exp(-\frac{\lVert x-z \rVert^2}{2\sigma^2}) K ( x , z ) = e x p ( − 2 σ 2 ∥ x − z ∥ 2 )
对应的支持向量机是高斯径向基函数(RBF)分类器,分类决策函数成为f ( x ) = s i g n ( ∑ i = 1 N s α i ∗ y i e x p ( − ∥ x − x i ∥ 2 2 σ 2 ) + b ∗ ) f(x)=sign(\sum_{i=1}^{N_s}\alpha^*_iy_iexp(-\frac{\lVert x-x_i \rVert^2}{2\sigma^2})+b^*) f ( x ) = s i g n ( i = 1 ∑ N s α i ∗ y i e x p ( − 2 σ 2 ∥ x − x i ∥ 2 ) + b ∗ )
指数核K ( x , z ) = e x p ( − ∥ x − z ∥ 2 σ 2 ) K(x,z)=exp(-\frac{\lVert x-z \rVert}{2\sigma^2}) K ( x , z ) = e x p ( − 2 σ 2 ∥ x − z ∥ )
sigmoid核K ( x , z ) = t a n h ( α x ⋅ z + c ) K(x,z)=tanh(\alpha x\cdot z+c) K ( x , z ) = t a n h ( α x ⋅ z + c )
当样本的特征很多时,特征的维数很高,这是往往样本线性可分,可考虑用线性核函数的SVM或LR(如果不考虑核函数,LR和SVM都是线性分类算法,也就是说他们的分类决策面都是线性的)。
当样本的数量很多,但特征较少时,可以手动添加一些特征,使样本线性可分,再考虑用线性核函数的SVM或LR。
当样特征维度不高时,样本数量也不多时,考虑用高斯核函数(RBF核函数的一种,指数核函数和拉普拉斯核函数也属于RBF核函数)。
非线性支持向量分类机
输入:训练数据集T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ,其中,x i ∈ X = R n , y i ∈ Y = { − 1 , 1 } , i = 1 , 2 , . . . , N x_i\in X=\R_n,y_i \in Y=\{-1,1\}, i=1,2,...,N x i ∈ X = R n , y i ∈ Y = { − 1 , 1 } , i = 1 , 2 , . . . , N
输出:分离超平面和分类决策函数
(1)选择适当的核函数K ( x , z ) K(x,z) K ( x , z ) 和适当的参数C C C ,构造并求解最优化问题min 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i , x j ) − ∑ i = 1 N α i
\kern 2em\min \quad \frac12\sum_{i=1}^N\sum_{j=1}^N\alpha_i \alpha_jy_iy_jK(x_i,x_j)-\sum_{i=1}^N\alpha_i
min 2 1 i = 1 ∑ N j = 1 ∑ N α i α j y i y j K ( x i , x j ) − i = 1 ∑ N α i s . t . ∑ i = 1 N α i y i = 0
\kern -8ems.t. \quad \sum_{i=1}^N\alpha_i y_i = 0
s . t . i = 1 ∑ N α i y i = 0 0 ⩽ α i ⩽ C , i = 1 , 2 , . . . , N
\kern1em0\leqslant\alpha_i \leqslant C, \quad i=1,2,...,N
0 ⩽ α i ⩽ C , i = 1 , 2 , . . . , N 求得最优解α ∗ = ( α 1 ∗ , α 2 ∗ , . . . , α N ∗ ) T \alpha^*=(\alpha^*_1,\alpha^*_2,...,\alpha^*_N)^T α ∗ = ( α 1 ∗ , α 2 ∗ , . . . , α N ∗ ) T 。
(2)计算w ∗ = ∑ i = 1 N α i ∗ y i x i w^*=\sum_{i=1}^N\alpha_i^*y_ix_i w ∗ = ∑ i = 1 N α i ∗ y i x i
选择α ∗ \alpha^* α ∗ 的一个分量α j ∗ \alpha^*_j α j ∗ 适合条件0 < α j ∗ < C 0<\alpha^*_j<C 0 < α j ∗ < C ,计算b j ∗ = y j − ∑ i = 1 N α j ∗ y i K ( x i , x j )
b^*_j = y_j-\sum_{i=1}^N\alpha^*_jy_iK(x_i,x_j)
b j ∗ = y j − i = 1 ∑ N α j ∗ y i K ( x i , x j )
(3)构造决策函数:f ( x ) = s i g n ( ∑ i = 1 N α i ∗ y i K ( x ⋅ x i ) + b ∗ )
f(x)=sign(\sum_{i=1}^N\alpha^*_iy_iK(x\cdot x_i)+b^*)
f ( x ) = s i g n ( i = 1 ∑ N α i ∗ y i K ( x ⋅ x i ) + b ∗ )
4. 序列最小化算法
待补充。。。
5. 百面机器学习中的问题
问题1 在空间上线性可分的两类点,分别向SVM分类的超平面上做投影,这些点在超平面上的投影仍然是线性可分的吗?
问题2 是否存在一组参数使SVM训练误差为0?
仅考虑不带松弛变量的情况
SVM的预测公式f ( x ) = s i g n ( ∑ i = 1 N α i ∗ y i K ( x ⋅ x i ) + b ∗ ) f(x)=sign(\sum_{i=1}^N\alpha^*_iy_iK(x\cdot x_i)+b^*) f ( x ) = s i g n ( i = 1 ∑ N α i ∗ y i K ( x ⋅ x i ) + b ∗ ) 假设给定训练集中不存在两个点在同一位置,核函数采用高斯核。
对于任意的i,固定α i = 1 \alpha_i=1 α i = 1 以及b = 0 b=0 b = 0 ,则有f ( x j ) = ∑ i = 1 N y i e x p ( − ∥ x j − x i ∥ 2 2 σ 2 ) f(x_j)=\sum_{i=1}^Ny_iexp(-\frac{\lVert x_j-x_i \rVert^2}{2\sigma^2}) f ( x j ) = i = 1 ∑ N y i e x p ( − 2 σ 2 ∥ x j − x i ∥ 2 ) f ( x j ) − y j = ∑ i = 1 , i ̸ = j N y i e x p ( − ∥ x j − x i ∥ 2 2 σ 2 )
f(x_j)-y_j=\sum_{i=1,i\not=j}^Ny_iexp(-\frac{\lVert x_j-x_i \rVert^2}{2\sigma^2})
f ( x j ) − y j = i = 1 , i ̸ = j ∑ N y i e x p ( − 2 σ 2 ∥ x j − x i ∥ 2 ) ∥ f ( x j ) − y j ∥ ⩽ ∑ i = 1 , i ̸ = j N e x p ( − ∥ x j − x i ∥ 2 2 σ 2 ) \lVert f(x_j)-y_j \rVert\leqslant \sum_{i=1,i\not=j}^Nexp(-\frac{\lVert x_j-x_i \rVert^2}{2\sigma^2}) ∥ f ( x j ) − y j ∥ ⩽ i = 1 , i ̸ = j ∑ N e x p ( − 2 σ 2 ∥ x j − x i ∥ 2 )
由题意知∥ x j − x i ∥ ⩾ ϵ \lVert x_j - x_i \rVert \geqslant\epsilon ∥ x j − x i ∥ ⩾ ϵ ,取σ = ϵ l o g m \sigma=\frac{\epsilon}{\sqrt{logm}} σ = l o g m ϵ ,可将式重写为∥ f ( x j ) − y j ∥ ⩽ ∑ i = 1 , i ̸ = j N e x p ( − ∥ x j − x i ∥ 2 2 σ 2 ) ⩽ ∑ i = 1. i ̸ = j m e − l o g m = m − 1 m < 1
\lVert f(x_j)-y_j \rVert\leqslant \sum_{i=1,i\not=j}^Nexp(-\frac{\lVert x_j-x_i \rVert^2}{2\sigma^2})\leqslant\sum_{i=1.i\not=j}^me^{-logm}=\frac {m-1}m<1
∥ f ( x j ) − y j ∥ ⩽ i = 1 , i ̸ = j ∑ N e x p ( − 2 σ 2 ∥ x j − x i ∥ 2 ) ⩽ i = 1 . i ̸ = j ∑ m e − l o g m = m m − 1 < 1 所以,对于任意x j x_j x j ,预测结果f ( x j ) f(x_j) f ( x j ) 与样本真实标签y j y_j y j 的距离小于1。因此所有样本的类别都被正确预测,训练误差为0。
问题3 训练误差为0的SVM分类器一定存在吗?
问题2找到了一组参数使得SVM分类器的训练误差为0。本问旨在找到一组参数满足训练误差为0,且是SVM模型的一个解。
我们已经得到了一组参数使得当y j = 1 y_j=1 y j = 1 时,f ( x j ) > 0 f(x_j)>0 f ( x j ) > 0 时,而当y j = − 1 时 y_j=-1时 y j = − 1 时 ,f ( x ) < 0 f(x)<0 f ( x ) < 0 。现在需要找到一组参数满足更强的条件,即y j f ( x j ) ⩾ 1 y_jf(x_j)\geqslant1 y j f ( x j ) ⩾ 1 。
仍固定b=0,将y i f ( x i ) y_if(x_i) y i f ( x i ) 展开,有y j f ( x j ) = y j ∑ i = 1 m α i y i K ( x i , x j ) = α j y j y j K ( x j , x j ) + ∑ i = 1 , i ̸ = j m α i y i y j K ( x i , x j ) y_jf(x_j)=y_j\sum_{i=1}^m\alpha_iy_iK(x_i,x_j)=\alpha_jy_jy_jK(x_j,x_j)+\sum_{i=1,i\not=j}^m\alpha_iy_iy_jK(x_i,x_j) y j f ( x j ) = y j i = 1 ∑ m α i y i K ( x i , x j ) = α j y j y j K ( x j , x j ) + i = 1 , i ̸ = j ∑ m α i y i y j K ( x i , x j ) = α j + ∑ i = 1 , i ̸ = j m α i y i y j K ( x i , x j ) \kern8em=\alpha_j+\sum_{i=1,i\not=j}^m\alpha_iy_iy_jK(x_i,x_j) = α j + i = 1 , i ̸ = j ∑ m α i y i y j K ( x i , x j )
可以每个α \alpha α 取很大的值,同时σ \sigma σ 取很小的值,使得核映射项非常小,于是α j \alpha_j α j 在上式占主导地位,这样y j f ( x j ) > 1 y_jf(x_j)>1 y j f ( x j ) > 1 ,满足SVM的解条件。
问题4 加入松弛变量的SVM的训练误差可以为0吗?
使用SMO算法训练的线性分类器并不一定能得到训练误差为0的模型。这是由于我们的优化目标改变了,并不再是使训练误差最小。考虑带松弛变量的SVM模型优化的目标函数所包含的两项:C ∑ i = 1 m ξ i C\sum_{i=1}^m\xi_i C ∑ i = 1 m ξ i 和1 2 ∥ w ∥ 2 \frac12\lVert w\rVert^2 2 1 ∥ w ∥ 2 ,当我们的参数C选取较小的值时,后一项(正则项)将占据优化的较大比重。这样,一个带有训练误差,但是参数较小的点将成为更优的结果。一个简单的特例是,当C取0时,w也取0即可达到优化目标,但是显然此时我们的训练误差不一定能达到0。
参考链接
支持向量机原理篇 常用核函数 机器学习实战 机器学习问题与解答系列