对于非线性分类问题,显然无法用一个线性分离超平面来把不同的类别的数据点分开,那么可以用以下思路解决这个问题:
首先使用一个变换 z=ϕ(x) z = ϕ ( x ) 将非线性特征空间x映射到新的线性特征空间z
在新的z特征空间里使用线性SVM学习分类的方法从训练数据中学习分类模型
基于这个想法,SVM模型可以表示成:
minα 12∑Nj=1αiαjyiyj(ϕ(xi)⋅ϕ(xj))−∑Ni=1αi m i n α 1 2 ∑ j = 1 N α i α j y i y j ( ϕ ( x i ) ⋅ ϕ ( x j ) ) − ∑ i = 1 N α i
s.t. ∑Ni=1αiyi=0 s . t . ∑ i = 1 N α i y i = 0
αi≥0,i=1,2,...,N (1) α i ≥ 0 , i = 1 , 2 , . . . , N ( 1 )
但是,这里有一个问题: ϕ(xi)⋅ϕ(xj) ϕ ( x i ) ⋅ ϕ ( x j ) 计算起来要分两步,先映射x到z空间,然后在z空间(一般是较高维度)作高维度的內积 zi⋅zj z i ⋅ z j 。
为了简化这个运算过程,如果我们找到一个核函数 K(xi,xj) K ( x i , x j ) , 即K是关于x的函数,其运算在低维空间上进行,然后使得 K(xi,xj)=ϕ(xi)⋅ϕ(xj) K ( x i , x j ) = ϕ ( x i ) ⋅ ϕ ( x j ) ,那么只需要计算一个比较好计算的核函数 K(xi,xj) K ( x i , x j ) ,就可以避免先映射,再在高维空间內积的复杂运算。
基于核技巧,非线性SVM模型可以表示成:
minα 12∑Nj=1αiαjyiyjK(xi,xj)−∑Ni=1αi m i n α 1 2 ∑ j = 1 N α i α j y i y j K ( x i , x j ) − ∑ i = 1 N α i
s.t. ∑Ni=1αiyi=0 s . t . ∑ i = 1 N α i y i = 0
αi≥0,i=1,2,...,N (2) α i ≥ 0 , i = 1 , 2 , . . . , N ( 2 )
其中, K(xi,xj) K ( x i , x j ) , 是关于原始低维特征空间 x 的函数,其运算在低维空间上进行。因此,降低了计算的复杂度。
在实际中,对一个非线性可分数据,我们不是先去定义转换函数数 ϕ(x) ϕ ( x ) ,再找出其对应的核函数K,而是直接用一些常用核函数代入上面(2)中的非线性可分支持向量机,然后查看分类效果,再调整核函数的类型,这样就隐式地实现了低维到高维的映射,而不用显式地定义映射函数 ϕ(x) ϕ ( x ) 和特征空间,这种方法叫核技巧。
比如,现在为了解决非线性可分数据问题,现在直接用 K(x,x′)=(xTx′)2 K ( x , x ′ ) = ( x T x ′ ) 2 放进(2),那么就可以解决一些非线性问题了,至于效果怎么样,还需要看实际的数据情况,在做调整。
minα 12∑Nj=1αiαjyiyj(xTx′)2−∑Ni=1αi m i n α 1 2 ∑ j = 1 N α i α j y i y j ( x T x ′ ) 2 − ∑ i = 1 N α i
s.t. ∑Ni=1αiyi=0 s . t . ∑ i = 1 N α i y i = 0
αi≥0,i=1,2,...,N (3) α i ≥ 0 , i = 1 , 2 , . . . , N ( 3 )
而且需要理解的是:
- K(x,x′)=(xTx′)2 K ( x , x ′ ) = ( x T x ′ ) 2 背后的映射 ϕ(x) ϕ ( x ) 不是唯一的。 ϕ(x) ϕ ( x ) 可以是不同维数的映射方式,而即使是同一维度的映射, ϕ(x) ϕ ( x ) 的具体形式也可以不同。
(统计学习P117例7.3)
上面提到,在实际应用中,我们直接将使用某种核函数直接带入到非线性可分支持向量(2)式中去,用来解决非线性分类问题。但是,并不是任何一种关于x的函数都可以成为核函数,只有满足以下条件时才能充当核函数:
我们把上面两个条件称Mercer条件。
例题 判断 (−1+xTx′) ( − 1 + x T x ′ ) 是不是核函数?
可以假设x为一维数据,两个样本 x1=1 x 1 = 1 及 x2=−1 x 2 = − 1 ,则可以得到Gram矩阵为:
[−1+1⋅1−1+1⋅−1 −1+1⋅−1−1+(−1⋅−1)]=[0−2−20] [ − 1 + 1 ⋅ 1 − 1 + 1 ⋅ − 1 − 1 + 1 ⋅ − 1 − 1 + ( − 1 ⋅ − 1 ) ] = [ 0 − 2 − 2 0 ]
则 xTGx=[x1x2] x T G x = [ x 1 x 2 ]
[0−2 −20] [ 0 − 2 − 2 0 ]
[x1 x2]=−2x2−2x1 [ x 1 x 2 ] = − 2 x 2 − 2 x 1
并不能得到总是大于等于0,因此不是半正定,不能作为核函数。
K(x,x′)=(a+r xTx′)2 a≥0,r>0 K ( x , x ′ ) = ( a + r x T x ′ ) 2 a ≥ 0 , r > 0
其对应的映射函数可以是:
ϕ(x)=(a,a⋅r−−−√x1,...,a⋅r−−−√xd,rx21,...,rx2d) ϕ ( x ) = ( a , a ⋅ r x 1 , . . . , a ⋅ r x d , r x 1 2 , . . . , r x d 2 )
形式:
K(x,x′)=exp(−r ||x−x′||2) K ( x , x ′ ) = e x p ( − r | | x − x ′ | | 2 )
特点:
可以做无限多维的映射,其保护是large margin,只有一个参数r,当r很大时,很容易就过拟合。
更多查阅:几种核函数的对比