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