SVM 核函数相关知识

前面的文章讲述的都是将SVM用于线性可分或者近似线性可分的情况,对于非线性可分的情况,正是本文要讨论的内容。

核技巧

线性不可分问题是指不能用一个超平面将数据划分成两个部分,如下图所示:

SVM 核函数相关知识

但是如果我们对原始数据进行非线性变换,则有可能将原始数据映射到能够线性可分的空间中:

SVM 核函数相关知识

对于上面这样的数据,如何实现这样的变换?

设原始特征空间为:XR2x=(x(1),x(2))TX\mathcal X \subset R^2,x = (x^{(1)}, x^{(2)})^T \in \mathcal X,新的特征空间为:ZR2z=(z(1),z(2))TZ\mathcal Z \subset R^2,z = (z^{(1)}, z^{(2)})^T \in\mathcal Z

定义原空间到新空间的映射为:
z=ϕ(x)=((x(1))2,(x(2))2)T z = \phi(x) = ((x^{(1)})^2, (x^{(2)})^2)^T
则原空间的椭圆:
w1(x(1))2+w2(x(2))2+b=0 w_1(x^{(1)})^2 + w_2(x^{(2)})^2 + b = 0
变为了新空间的直线:
w1z(1)+w2z(2)+b=0 w_1 z^{(1)} + w_2 z^{(2)} + b = 0
于是,只要把所有的样本都映射到新的空间中,就可以用线性可分SVM完成分类了。我们称这样的变换思想为核技巧。

核技巧的基本想法是:通过一个非线性变换将输入空间对应于一个特征空间,使得输入空间RnR^n中的超曲面对应于特征空间H\mathcal{H}的超平面。这样,分类问题的学习任务通过在特征空间中求解线性SVM就可以完成。

核函数

假设映射ϕ(x):XH\phi(x): \mathcal{X} \to \mathcal{H}是一个从低维的输入空间χ\chi(欧式空间的子集或者离散集合)到高维的希尔伯特空间的H\mathcal{H}映射。那么如果存在函数K(x,z)K(x,z),对于任意x,zχx, z \in \chi,都有:
K(x,z)=ϕ(x)ϕ(z) K(x, z) = \phi(x) \cdot \phi(z)
则称K(x,z)K(x, z)为核函数。其中ϕ(x)ϕ(z)\phi(x) \cdot \phi(z)表示x与z的内积,结果是一个常数。

为什么要引入核函数呢?

通常映射ϕ\phi需要将低维的输入空间映射到更高维度的空间才可以线性可分(例如对异或进行分类),那么分别计算ϕ(x)ϕ(z)\phi(x),\phi(z)的话,运算量比较大。如果存在K(x, z)可以等效的计算ϕ(x)ϕ(z)\phi(x) \cdot \phi(z),则可以极大的减少运算量。

举个例子:

假设输入空间是R2\R^2,有x=(x(1),x(2))z=(z(1),z(2))K(x,z)=(xz)2x = (x^{(1)}, x^{(2)}),z = (z^{(1)}, z^{(2)}),K(x,z)=(x\cdot z)^2,可以取:
H=R4,ϕ(x)=((x(1))2,x(1)x(2),x(1)x(2),(x(2))2)T \mathcal{H}=\R^4, \phi(x)=((x^{(1)})^2, x^{(1)}x^{(2)}, x^{(1)}x^{(2)}, (x^{(2)})^2)^T
可以得到:
ϕ(x)ϕ(z)=K(x,z)=(xz)2 \phi(x) \cdot \phi(z) =K(x, z) = (x\cdot z)^2
也就是说二者结果相同,但是可以明显发现ϕ(x)ϕ(z)\phi(x) \cdot \phi(z)的计算复杂度要高得多。不过映射函数不唯一,下面的映射也能达到相同的效果:
H=R3,ϕ(x)=((x(1))2,2x(1)x(2),(x(2))2)T \mathcal{H}=\R^3, \phi(x)=((x^{(1)})^2, \sqrt2x^{(1)}x^{(2)}, (x^{(2)})^2)^T
核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数好在它在低维上进行计算,而将实质上的分类效果表现在了高维上,这样避免了直接在高维空间中的复杂计算。

正定核

已知映射函数ϕ\phi,可以通过ϕ(x)\phi(x)ϕ(z)\phi(z)的内积求得核函数K(x,z)K(x,z)。不构造ϕ\phi能否直接判断某个函数K(x,z)K(x,z)是核函数?

一般核函数指的是正定核函数,充要条件是:假设K(x,z)K(x,z)是对称函数,对于任意的$x_i \in \chi , i=1,2,3…m $, K(xi,xj)K(x_i,x_j)对应的Gram矩阵K=[K(xi,xj)]m×mK = \bigg[ K(x_i, x_j )\bigg]_{m\times m} 是半正定矩阵,则K(x,z)K(x,z)是正定核函数,此时K(x,z)K(x,z)是核函数。 也就是说,一个函数要想成为正定核函数,必须满足任何点的集合形成的Gram矩阵是半正定的。

基于上面的充要条件,可以检验是否是核函数,但是实际计算过程并不容易。一般我们都直接用现成的已经证明好的核函数。

常用核函数

1,线性核函数(Linear Kernel)

就是最普通的线性可分SVM,表达式为:
K(x,z)=xz K(x, z) = x \cdot z

2,多项式核函数(Polynomial Kernel)

是线性不可分常用的核函数之一,表达式为:
K(x,z)=(xz+1)p K(x,z)=(x\cdot z + 1)^p
对应的支持向量机是一个p次多项式分类器。

3,高斯核函数(Gaussian Kernel)

在SVM中也称为径向基核函数(Radial Basis Function,RBF),是非线性SVM最主流的核函数,libsvm默认的核函数就是它。表达式为:
K(x,z)=exp(γxz2) K(x,z) = exp(-\gamma||x-z||^2)
其中γ>0\gamma \gt 0是需要指定的超参数。

4,Sigmoid核函数(Sigmoid Kernel)

也是线性不可分SVM常用的核函数之一,表达式为:
K(x,z)=tanhγxz+r) K(x, z) = tanh(\gamma x \bullet z + r)
其中γ,r\gamma , r是需要指定的超参数。

这么多核函数,各自都有什么特点,面对实际问题要如何选择,效果如何,这里先挖个坑,等到将sklearn的SVM调参时一起说。

核函数在SVM中的应用

回顾之前文章学习的SVM对偶问题:
minα 12i=1mj=1mαiαjyiyj(xixj)i=1mαis.t.   i=1mαiyi=00αiC,i=1,2,,m \begin{aligned} \min_\alpha\ &\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^m\alpha_i\\ s.t.\ \ \ &\sum_{i=1}^m\alpha_iy_i=0\\ &0\leqslant \alpha_i \leqslant C,i=1,2,\dots,m \end{aligned}
将要优化的函数中的内积xixjx_i \cdot x_j用核函数K(xi,xj)=ϕ(xi)ϕ(xj)K(x_i,x_j)=\phi(x_i) \cdot \phi(x_j)来代替。此时对偶问题的目标问题以及分类决策函数变为:
minα12i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαif(x)=sign(i=1Nsαiyiϕ(xi)ϕ(x)+b)=sign(i=1NsαiyiK(xi,x)+b) \min_\alpha \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_jK(x_i,x_j)-\sum_{i=1}^N\alpha_i\\ f(x)=sign\left(\sum_{i=1}^{N_s}\alpha_i^*y_i\phi(x_i)\cdot \phi(x)+b^*\right)=sign\left(\sum_{i=1}^{N_s}\alpha_i^*y_iK(x_i,x)+b^*\right)
这意味着我们甚至不需要指定映射函数ϕ\phi,就可以隐式的借助核函数等价的将输入空间映射到高维空间,进而在更高维的空间中找到划分超平面。在实际应用中,需要结合领域知识来选择合适的核函数。

非线性SVM算法流程

输入:训练集T=(x1,y1),(x2,y2),...,(xm,ym)T={(x_1,y_1), (x_2,y_2), ..., (x_m,y_m)},其中x为n维特征向量,y{1,1}y \in \{-1, 1\}

输出:分离超平面的参数w,bw^*, b^*以及分类决策函数。

算法流程:

(1) 选择适当的核函数K(x,z)K(x,z)和一个惩罚系数C>0C\gt0, 构造约束优化问题
minα    12i=1,j=1mαiαjyiyjK(xi,xj)i=1mαi \min\limits_{\alpha} \;\; \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jK(x_i,x_j) - \sum\limits_{i=1}^{m}\alpha_i

s.t.  i=1mαiyi=00αiC s.t. \; \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \\ 0 \leq \alpha_i \leq C

(2) 利用SMO算法求出最优解 α=(α1,α2,...,αm)T\alpha^* = (\alpha^*_1, \alpha^*_2, ...,\alpha^*_m)^T

(3) 找出所有满足0<αs<C0 < \alpha_s < C对应的的S个支持向量,对支持向量集合中的每个样本(xs,ys)(x_s,y_s),通过:
ys(i=1mαiyiK(xi,xs)+b)=1 y_s(\sum\limits_{i=1}^{m}\alpha_iy_iK(x_i,x_s)+b) = 1
计算出每个支持向量(xs,ys)(x_s, y_s)对应的bsb_s^{*},即:
bs=ysi=1mαiyiK(xi,xs) b_s^{*} = y_s - \sum\limits_{i=1}^{m}\alpha_iy_iK(x_i,x_s)
所有的bsb_s^{*}对应的平均值即为最终的bb^*
b=1Si=1Sbs b^{*} = \frac{1}{S}\sum\limits_{i=1}^{S}b_s^{*}
(4) 构造决策函数:
f(x)=sign(i=1mαiyiK(x,xi)+b) f(x) = sign(\sum\limits_{i=1}^{m}\alpha_i^{*}y_iK(x, x_i)+ b^{*})

参考链接:

《统计学习方法 第二版》

支持向量机原理(三)线性不可分支持向量机与核函数

李航-统计学习方法-笔记-7:支持向量机- PilgrimHui - 博客园