支持向量机SVM——核函数
接前面所讲博客,我们知道了当数据理想线性可分的话我们可以用硬间隔的方式解决,即使出现了噪声,软间隔依旧能够处理,但是这些的前提都是数据是线性可分的,但是在现实任务中,原始样本空间可能并不是线性可分的。
对于这类非线性分类问题的一种解决方法是:首先使用一个变换将原始空间中的数据映射到新空间;然后在新空间里用线性分类学习方法学习分类模型。这也是核函数的做法。
首先回顾一下我们的优化问题:
{
m
a
x
λ
(
−
1
2
∑
i
=
1
N
∑
j
=
1
N
λ
i
λ
j
y
i
y
j
x
i
T
x
j
+
∑
i
=
1
N
λ
i
)
s
.
t
.
0
≤
λ
i
≤
C
∑
i
=
1
N
λ
i
y
i
=
0
\begin{cases}max_{\lambda}\;(-\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\lambda_i\lambda_jy_iy_jx^T_ix_j+\sum_{i=1}^N\lambda_i)\\ s.t. \quad 0\leq\lambda_i\leq C\\\qquad\sum_{i=1}^N\lambda_iy_i=0\end{cases}
⎩⎪⎨⎪⎧maxλ(−21∑i=1N∑j=1NλiλjyiyjxiTxj+∑i=1Nλi)s.t.0≤λi≤C∑i=1Nλiyi=0
令
ϕ
(
x
)
\phi(x)
ϕ(x)表示找到的一种变换(映射),于是我们的问题可以写成:
m
a
x
λ
(
−
1
2
∑
i
=
1
N
∑
j
=
1
N
λ
i
λ
j
y
i
y
j
ϕ
(
x
i
)
T
ϕ
(
x
j
)
+
∑
i
=
1
N
λ
i
)
max_{\lambda}\;(-\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\lambda_i\lambda_jy_iy_j\phi(x_i)^T\phi(x_j)+\sum_{i=1}^N\lambda_i)
maxλ(−21i=1∑Nj=1∑Nλiλjyiyjϕ(xi)Tϕ(xj)+i=1∑Nλi)
因为
x
i
,
x
j
x_i,x_j
xi,xj映射后的样本空间维数可能很高,甚至可能是无穷维,因此直接计算
ϕ
(
x
i
)
T
ϕ
(
x
j
)
\phi(x_i)^T\phi(x_j)
ϕ(xi)Tϕ(xj)通常是困难的。为了解决这个问题,我们可以先设:
k
(
x
i
,
x
j
)
=
ϕ
(
x
i
)
T
ϕ
(
x
j
)
k(x_i,x_j)=\phi(x_i)^T\phi(x_j)
k(xi,xj)=ϕ(xi)Tϕ(xj)
即我们希望把映射后的特征空间的内积
ϕ
(
x
i
)
T
ϕ
(
x
j
)
\phi(x_i)^T\phi(x_j)
ϕ(xi)Tϕ(xj)转换为在原始样本空间中通过函数
k
(
x
i
,
x
j
)
k(x_i,x_j)
k(xi,xj)来计算,相当于达到了降维计算的目的。并且
k
(
x
i
,
x
j
)
k(x_i,x_j)
k(xi,xj)也称为核函数(kernel function)。
常见的核函数如下: