两遍读懂支持向量机 SVM (Kernel SVM)

1. Kernel SVM

SVM 算法中 软间隔 SVM 和硬间隔 SVM 是用来求解线性可分 (或勉强线性可分) 的分类问题的,而 Kernel SVM 则是用来求解线性不可分的分类问题的。顾名思义,Kernel SVM 利用 核函数 (Kernel function) 将样本从低维空间 (输入空间) 映射到高维空间 (特征空间) 来进行线性划分。

考虑如下图 (a) 中的例子,假设样本 x x 是 1 维特征向量 ( x R x\in R x ( i ) x^{(i)} 表示第 i i 个样本),即可看做是 x x 轴上的实数。现在需要将其进行分类。很显然,在一维空间内无法用一条直线将他们区分开,因此这是一个典型的线性不可分问题。于是乎,我们需要再增加一维特征,如 x 2 x^2 轴,这样一来,我们可以非常轻松的在二维空间上线性分割。这个就是 Kernel SVM 思想的简单体现,即:既然低维空间无法线性分割,那我们就将样本转换到高维空间进行线性分割吧。

在这里插入图片描述

此时,摆在我们面前的有两道难题:(1) 如何进行映射?(2) 如何求解高维 w , b w^*,b^* 参数? 对于第一个问题,当然是利用核函数进行维度的转变 (如 x ϕ ( x ) x \rightarrow \phi(x) )。对于第二个问题,我们将原先求解软硬间隔 SVM 的优化目标中的 x x 替换为 ϕ ( x ) \phi(x) ,并结合核技巧来求解最终的超平面 w ϕ ( x ) + b = 0 w^*\phi(x)+b^*=0

2. 利用 Kernel 函数进行维度转变

假定映射函数为 ϕ ( x ) \phi(x) ,即 ϕ : x ϕ ( x ) \phi:x \rightarrow \phi(x) 。其中, x x 表示输入空间样本,为 p p 维向量,将其表示为 x = ( x 1 , x 2 , . . . , x p ) T x=(x_1,x_2,...,x_p)^T ϕ ( x ) \phi(x) 为其映射的高维空间的样本,为 k k 维向量,记为 ϕ ( x ) = ( x 1 , x 2 , . . . , x k ) T \phi(x)=(x_1,x_2,...,x_k)^T 。如下图所示,这里的 ϕ \phi 函数将 p p 维向量转换为高维的向量。

在这里插入图片描述

我们“惊喜的”发现,在输入空间的点 x x 与高维特征空间的点 ϕ ( x ) \phi(x) 存在这么一个等式,即,

ϕ ( x ( i ) ) ϕ ( x ( j ) ) = ( x ( i ) x ( j ) + 1 ) 2 \phi(x^{(i)})·\phi(x^{(j)})=(x^{(i)}·x^{(j)}+1)^2

于是乎,高维向量 ( ϕ ( x ) \phi(x) ) 的计算可以用 ( x x ) 来表示。可以想象成将会极大的节省计算量。在SVM 中,我们定义一些数学公式为 核函数 (Kernel fucntion),它们能将输入空间的样本转化为高维空间的形式,同时将高维向量的操作转化为低维向量的操作,从而节省巨大的计算量 (也称为 核技巧 (Kernel trick))。我们将核函数定义为 κ ( x ( i ) , x ( j ) ) \kappa(x^{(i)},x^{(j)}) ,其输入是两个向量 x ( i ) , x ( j ) x^{(i)},x^{(j)} ,输出是 x ( i ) x^{(i)} x ( j ) x^{(j)} 的内积,即,

κ ( x ( i ) , x ( j ) ) = ϕ ( x ( i ) ) ϕ ( x ( j ) ) \kappa(x^{(i)},x^{(j)})=\phi(x^{(i)})·\phi(x^{(j)})

常见的核函数包括多项式核函数 (Polynomial Kernel),高斯核函数 (Gaussion Kernel) 等,这些函数都有上述性质。全部核函数请参照博客 Kernel Functions1

扫描二维码关注公众号,回复: 11065754 查看本文章
  • Polynomial Kernel κ ( x i , x j ) = ( x i x j + 1 ) d \kappa(x_i,x_j)=(x_i·x_j+1)^d ,其中 d 0 d\geq0
  • Gaussion Kernel κ ( x i , x j ) = exp ( x i x j 2 2 σ 2 ) \kappa(x_i,x_j)=\exp(-\frac{||x_i-x_j||^2}{2\sigma^2}) ,其中 σ > 0 \sigma>0
  • Gaussion Radial Basis Kernel κ ( x i , x j ) = exp ( γ x i x j 2 ) \kappa(x_i,x_j)=\exp(-\gamma||x_i-x_j||^2) ,其中 γ > 0 \gamma>0
  • Hyperbolic tangent kernel κ ( x i , x j ) = tanh ( k x i x j + c ) \kappa(x_i,x_j)=\tanh(kx_i·x_j+c) ,其中 k > 0 , c < 0 k>0,c<0

注意,每一种核函数对应着一种映射方式 ϕ \phi 。比如 Polynomial Kernel 中,输入样本 x x 可以转换为,

ϕ ( x ) = ( ξ , 2 γ ξ ( x 1 ) , 2 γ ξ ( x 2 ) , . . . , 2 γ ξ ( x p ) , γ ( x 1 ) 2 , γ ( x 2 ) 2 , . . . , γ ( x p ) 2 ) T \phi(x)=(\xi,\sqrt{2\gamma\xi}(x_1),\sqrt{2\gamma\xi}(x_2),...,\sqrt{2\gamma\xi}(x_p),\gamma (x_1)^2,\gamma (x_2)^2,...,\gamma (x_p)^2)^T

在一些教材中,人们提出了一种叫 线性核函数 (Linear Kernel)2 的概念,即 κ ( x ( i ) , x ( j ) ) = x ( i ) x ( j ) \kappa(x^{(i)},x^{(j)})=x^{(i)}·x^{(j)} 。事实上,当 Kernel SVM 使用这个核函数时,并没有进行维度的变化。换句话说,如果 Kernel SVM 使用 Linear Kernel,其效果等价于之前的 硬间隔 SVM

3. 求解高维空间中的线性参数 w , b w^*,b^*

原先在原空间上,我们推导的 SVM 最优化问题的表达形式为,

L ( w , b , λ ) = 1 2 w 2 + i m λ i [ 1 y ( i ) ( w T x ( i ) + b ) ] s . t .   λ i 0 L(w,b,\lambda) = \frac{1}{2}||w||^2 + \sum_{i}^{m}\lambda_i[1-y^{(i)}(w^Tx^{(i)}+b)] \\ s.t. \ \lambda_i \geq 0

现在通过映射函数 ϕ \phi x x 映射到 ϕ ( x ) \phi(x) 之后,优化问题变成,

L ( w , b , λ ) = 1 2 w 2 + i m λ i [ 1 y ( i ) ( w T ϕ ( x ( i ) ) + b ) ] s . t .   λ i 0 L(w,b,\lambda) = \frac{1}{2}||w||^2 + \sum_{i}^{m}\lambda_i[1-y^{(i)}(w^T\phi(x^{(i)})+b)] \\ s.t. \ \lambda_i \geq 0

我们将其转换为对偶问题,求 w , b w,b 的偏导,得到

L w = w i = 1 m λ i y ( i ) ϕ ( x ( i ) ) ,    L b = i = 1 m λ i y ( i ) \frac{\partial L}{\partial w} = w-\sum_{i=1}^{m}\lambda_iy^{(i)}\phi(x^{(i)}), \ \ \frac{\partial L}{\partial b} = -\sum_{i=1}^{m}\lambda_iy^{(i)}

w , b w,b 的偏导数为 0,我们得到 w = i = 1 m λ i y ( i ) ϕ ( x ( i ) ) w^*=\sum_{i=1}^m\lambda_iy^{(i)}\phi(x^{(i)}) 以及 i = 1 m λ i y ( i ) = 0 \sum_{i=1}^m\lambda_iy^{(i)}=0 。我们将它们带入到 L L 中可得到其最小值 θ ( λ ) = L m i n ( w , b , λ ) \theta(\lambda)=L_{min}(w,b,\lambda) ,最优化问题转变为求解 θ ( λ ) \theta(\lambda) 的最大值问题,即

θ ( λ ) = 1 2 i = 1 m j = 1 m λ i λ j y ( i ) y ( j ) [ ϕ ( x i ) ] T ϕ ( x j ) + i = 1 m λ i s . t . i = 1 m λ i y ( i ) = 0 ,    λ i 0 , i = 1... m . \theta(\lambda) = -\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^m \lambda_i\lambda_jy^{(i)}y^{(j)}[\phi(x_i)]^T\phi(x_j) + \sum_{i=1}^m\lambda_i \\ s.t. \sum_{i=1}^m\lambda_iy^{(i)}=0, \ \ \lambda_i \geq 0, i=1...m.

由于 ϕ ( x i ) , ϕ ( x j ) \phi(x_i), \phi(x_j) 都是 (nx1) 维向量,因此上式中的 [ ϕ ( x i ) ] T ϕ ( x j ) [\phi(x_i)]^T\phi(x_j) 也可以写为内积的形式 ϕ ( x i ) ϕ ( x j ) \phi(x_i)·\phi(x_j) ,故 θ ( λ ) \theta(\lambda) 也可以写成 θ ( λ ) = 1 2 i = 1 m j = 1 m λ i λ j y ( i ) y ( j ) ϕ ( x i ) ϕ ( x j ) + i = 1 m λ i \theta(\lambda)= -\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^m \lambda_i\lambda_jy^{(i)}y^{(j)}\phi(x_i)\phi(x_j) + \sum_{i=1}^m\lambda_i

此时利用我们的核技巧 κ ( x i , x j ) = ϕ ( x i ) ϕ ( x j ) \kappa(x_i,x_j)=\phi(x_i)·\phi(x_j) ,将 θ ( λ ) \theta(\lambda) 写作,

θ ( λ ) = 1 2 i = 1 m j = 1 m λ i λ j y ( i ) y ( j ) κ ( x i , x j ) + i = 1 m λ i \theta(\lambda) = -\frac{1}{2}\sum_{i=1}^{m}\sum_{j=1}^m \lambda_i\lambda_jy^{(i)}y^{(j)}\kappa(x_i,x_j) + \sum_{i=1}^m\lambda_i

此时带入任一合理的核函数 κ ( x i , x j ) \kappa(x_i,x_j) 即可算出 θ ( λ ) \theta(\lambda) ,与之前类似的,利用 SMO 算法,我们可以解出使得 θ ( λ ) \theta(\lambda) 最大的 λ \lambda^* 的值。

接着,我们找到位于决策平面上的点 ϕ ( x ( s ) ) \phi(x^{(s)}) ,并将其带入方程 y ( s ) ( ( w ) T ϕ ( x s ) + b ) = 1 y^{(s)}((w^*)^T\phi(x^{s})+b)=1 ,我们可以计算出 b b^* 的值,

b = y ( s ) i = 1 m λ i y ( i ) ϕ ( x ( i ) ) ϕ ( x ( i ) ) = y ( s ) i = 1 m λ i y ( i ) κ ( x ( i ) , x ( s ) ) b^*=y^{(s)}-\sum_{i=1}^{m}\lambda_iy^{(i)}\phi(x^{(i)})\phi(x^{(i)})=y^{(s)}-\sum_{i=1}^{m}\lambda_iy^{(i)}\kappa(x^{(i)},x^{(s)})

于是乎,超平面 ( w ) T ϕ ( x ) + b = 0 (w^*)^T\phi(x)+b=0 ,可以写为,

i = 1 m λ i y ( i ) ϕ ( x ( i ) ) ϕ ( x ) + b = 0 \sum_{i=1}^m\lambda_iy^{(i)}\phi(x^{(i)})\phi(x)+b^*=0

w , b w^*,b^* 全部带入上式,最终超平面可以写为,

i = 1 m λ i y ( i ) κ ( x ( i ) , x ) + y ( s ) i = 1 m λ i y ( i ) κ ( x ( i ) , x ( s ) ) = 0 \sum_{i=1}^m\lambda_iy^{(i)}\kappa(x^{(i)},x)+y^{(s)}-\sum_{i=1}^{m}\lambda_iy^{(i)}\kappa(x^{(i)},x^{(s)})=0

通过上述可以知道,通过核技巧,我们甚至不用知道映射的具体细节 ϕ ( x ) \phi(x) ,而直接计算出了高维空间中的线性 w , b w^*,b^* ,这些都是核函数的功劳。在应用中,我们倾向于将核函数看做一个黑盒子而不去理解其内部原理,但一定要理解 kernel SVM 的思想,即将输入空间转换为高维空间来进行线性划分。


  1. DataFlair team. Kernel Functions-Introduction to SVM Kernel and Examples. Link ↩︎

  2. Sonack. 机器学习技法–Kernel SVM. Link ↩︎

发布了17 篇原创文章 · 获赞 33 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/chikily_yongfeng/article/details/105645955
svm