核函数
线性不可分问题怎么解决
对svm 来讲,最好的当然是样本完全线性可分,就算差一点不是完全的我们也希望绝大部分眼本店线性可分。
但是我们可能碰到一种情况,样本点不是线性可分的
这种情况的一种解决办法就是,将二维线性不可分样本,映射到高维空间中,让样本点在高维空间线性可分,比如变成这样:
高维比低维更容易线性可分
什么是非线性SVM
对于有限维度向量空间中线性不可分的样本,我们将其映射到更高维度的向量空间里,再通过间隔最大化的方式,学习得到支持向量机就是非线性SVM
我们将样本映射到的这个逢高维度的新空间叫做特征空间
我们现在用x来表示原来的样本点,用
ϕ
(
x
)
\phi(x)
ϕ(x)表示x映射到特征空间之后的新向量。
那么分隔超平面可以表示为: f ( x ) = w ϕ ( x ) + b f(x)=w \phi(x)+b f(x)=wϕ(x)+b
由于上面的线性SVM的对偶问题,此处非线性SVM的对偶问题就变成了
min
(
1
2
∑
i
=
1
m
∑
j
=
1
m
λ
i
λ
j
y
i
y
j
ϕ
(
x
i
)
⋅
ϕ
(
x
j
)
−
∑
i
=
1
m
λ
i
)
s.t.
∑
i
=
1
m
λ
i
y
i
=
0
0
⩽
λ
i
⩽
C
,
i
=
1
,
2
,
…
,
m
\begin{array}{c} \min \left(\frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \lambda_{i} \lambda_{j} y_{i} y_{j} \phi\left(x_{i}\right) \cdot \phi\left(x_{j}\right)-\sum_{i=1}^{m} \lambda_{i}\right) \\ \text { s.t. } \sum_{i=1}^{m} \lambda_{i} y_{i}=0 \\ 0 \leqslant \lambda_{i} \leqslant C, \quad i=1,2, \ldots, m \end{array}
min(21∑i=1m∑j=1mλiλjyiyjϕ(xi)⋅ϕ(xj)−∑i=1mλi) s.t. ∑i=1mλiyi=00⩽λi⩽C,i=1,2,…,m
可以看到,和线性SVM唯一的不同就是:之前的
x
i
x_i
xi与
x
j
x_j
xj的内积(点乘)变成了
ϕ
(
x
i
)
\phi(x_i)
ϕ(xi)与
ϕ
(
x
j
)
\phi(x_j)
ϕ(xj)的内积
为什么要有核函数
我们可以看到,对于费现象函数来说,和之前不同的主要是
ϕ
(
x
i
)
\phi(x_i)
ϕ(xi)与
ϕ
(
x
j
)
\phi(x_j)
ϕ(xj)的内积。而由于是地位空间映射到高维空间,维度可能会很大,所以如果将全部样本点的点乘全部计算好,这样的计算量太大了
针对这个问题,我们的解决方式是先不算 ,用一个函数先替代,我们用
k
(
x
i
,
x
j
)
=
ϕ
(
x
i
)
∗
ϕ
(
x
j
)
k(x_i,x_j) = \phi(x_i)*\phi(x_j)
k(xi,xj)=ϕ(xi)∗ϕ(xj)
这样子函数
k
(
x
i
,
x
j
)
k(x_i,x_j)
k(xi,xj)称之为核函数。
假设我们现在有一个多项式核函数
k
(
x
,
y
)
=
(
x
∗
y
+
1
)
2
k(x,y) = (x*y+1)^2
k(x,y)=(x∗y+1)2
对于这个核函数,如果带入样本的话,是这样的:
k
(
x
,
y
)
=
(
∑
i
=
1
n
(
x
i
∗
y
i
)
+
1
)
2
k(x,y) = (\sum_{i=1}^n (x_i*y_i)+1)^2
k(x,y)=(i=1∑n(xi∗yi)+1)2
式子展开:
∑
i
=
1
n
(
x
i
2
)
(
y
i
2
)
+
∑
i
=
2
n
∑
j
=
1
i
−
1
(
2
x
i
x
j
)
(
2
y
i
y
j
)
+
∑
i
=
1
n
(
2
x
i
)
(
2
y
i
)
+
1
\sum_{i=1}^{n}\left(x_{i}^{2}\right)\left(y_{i}^{2}\right)+\sum_{i=2}^{n} \sum_{j=1}^{i-1}\left(\sqrt{2} x_{i} x_{j}\right)\left(\sqrt{2} y_{i} y_{j}\right)+\sum_{i=1}^{n}\left(\sqrt{2} x_{i}\right)\left(\sqrt{2} y_{i}\right)+1
i=1∑n(xi2)(yi2)+i=2∑nj=1∑i−1(2xixj)(2yiyj)+i=1∑n(2xi)(2yi)+1
我们需要先把向量映射成:
x
′
=
(
x
n
2
,
…
,
x
1
2
,
2
x
n
x
n
−
1
,
…
,
2
x
n
,
…
2
x
1
,
1
)
x^{\prime}=\left(x_{n}^{2}, \ldots, x_{1}^{2}, \sqrt{2} x_{n} x_{n-1}, \ldots, \sqrt{2} x_{n}, \ldots \sqrt{2} x_{1}, 1\right)
x′=(xn2,…,x12,2xnxn−1,…,2xn,…2x1,1)
然后再进行计算,可见这个映射不管是计算量还是存储量都是巨大的,但是有了核函数,就不需要做这样的映射,直接使用原样本维度的点进行计算即可
有了核函数,如何求解非线性SVM的问题
在有了核函数之后,非线性问题重新转变成了线性问题,和之前求解过程一样,先根据对偶函数求解$\lambda , 然 后 g e n u i n e ,然后genuine ,然后genuine\lambda$求解w,再根据支撑向量求解b即可。
一些常用的核函数
线性核函数
k
(
x
i
,
x
j
)
=
x
i
T
x
j
k(x_i,x_j) = x_i^T x_j
k(xi,xj)=xiTxj
使用时无需指定参数,它直接计算两个输入向量的内积。经过线性核函数转换的样本,特征空间与输入空间重合,相当于并没有将映射到更高维度空间里去
多项式核函数(Polynomial Kernel)
k
(
x
i
,
x
j
)
=
(
γ
x
i
T
x
j
+
r
)
d
,
γ
>
0
,
d
≥
0
k(x_i,x_j) = (\gamma x_i^T x_j + r)^d ,\gamma > 0,d \geq 0
k(xi,xj)=(γxiTxj+r)d,γ>0,d≥0
需要指定三个参数:
γ
,
r
,
d
\gamma,r,d
γ,r,d
这是一个不平稳的核,适用于数据做了归一化的情况
RBF核(Radial Basis Function Kernel)
k
(
x
i
,
x
j
)
=
e
x
p
(
−
γ
∣
∣
x
i
−
x
j
∣
∣
2
)
,
γ
>
0
k(x_i,x_j) = exp(-\gamma||x_i-x_j||^2),\gamma > 0
k(xi,xj)=exp(−γ∣∣xi−xj∣∣2),γ>0
RBF核又叫高斯核(Gaussian Kernel),是一个核函数家族,他会将输入空间的样本以非线性的方式映射到更高维度的空间(特征空间)里去,因此它可以处理类标签和样本属性之间是非线性关系的状况
它有一个参数 γ \gamma γ,这个参数的设置非常关键
如果设置过大,则整个RBF核会向线性核方向退化,向更高维度非线性投影的能力就会减弱;
但是如果设置过小,则会使得样本中噪声过大,从而干扰最终SVM的有效性
不过相对于多项式核的3个参数,RBF核只有一个参数需要调,还是相对简单的
当线性核效果不是很好时,可以用RBF试试,或者很多情况下直接使用RBF