引
今天我们讲解一下SVM的核函数,那么什么是核函数呢?我也不知道啊,但是我们可以从普通的回归任务出发。假设我们有这样一个式子:
\begin{equation}
\begin{split}
h_\theta (x_1, x_2) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x{_1^2} + \theta_4 x_2^2
\end{split}
\end{equation}
我们令 \( x_3 = x_1^2 \), \(x_4 = x_2^2\),那么上面的式子变成了:
\begin{equation}
\begin{split}
h_\theta (x_1, x_2) = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \theta_3 x_3 + \theta_4 x_4
\end{split}
\end{equation}
从上面可以看出,原来的2元n次多项式回归变成了4元1次多项式回归,通过这个改进,我们是不是把上述的非线性回归重新变回了线性回归,即把特征从2维空间映射到了4维空间。这就给了我们启发,如果想把非线性特征转变为线性特征,只要把数据特征映射到高维特征空间上去。
在SVM中,我们也可以利用这样的思想。对于SVM不可分的低维数据,只要将其映射到高维,就可以利用前两节讲解的线性SVM的方法进行求解。
核函数
上面我们讲解了回归中将非线性映射到线性的思想,那么在SVM中,我们该如何运用这种思想呢?
在SVM中,我们引入了一种叫做核函数的东西。回顾上一小节我们的目标函数:
\begin{equation}
max \ \sum_{i=1}^{m}\alpha_i - \frac{1}{2} \sum \sum \alpha_i \alpha_j y_i y_j x_i^T x_j
\end{equation}
\begin{equation}
\begin{split}
s.t. &\sum_{i=1}^m \alpha_i y_i = 0 \\
&\alpha_i \geq 0 , \ i = 1,2,…,m
\end{split}
\end{equation}
注意到上式低维特征是以\(x_i^T x_j\)
内积的形式出现,如果我们定义一个从低维映射到高维的函数 \( \phi\),将所有的特征映射到更高的维度,让数据变得线性可分,那么我们就可以用前两节所说的方法进行函数目标的优化。那么,现在我们的函数变为:
\begin{equation}
max \ \sum_{i=1}^{m}\alpha_i - \frac{1}{2} \sum \sum \alpha_i \alpha_j y_i y_j \phi (x_i^T) \phi (x_j)
\end{equation}
\begin{equation}
\begin{split}
s.t. &\sum_{i=1}^m \alpha_i y_i = 0 \\
&\alpha_i \geq 0 , \ i = 1,2,…,m
\end{split}
\end{equation}
这样看来我们完美的解决了线性不可分的问题,但是事实真的是这样的吗?一个2维特征的数据我们可以映射到4维来进行特征的内积。如果我们有3维特征的数据,我们可以映射到16维。那么1000维的特征,10000维的特征呢,这样做是不是造成了
维度的爆炸增长。这时候,
核函数就被提出了。
假设\(\phi\)是从低维的输入空间\(\chi \)到高维的
再生希尔伯特空间\(\mathcal{H}\)的映射。那么如果存在函数 \(k(x_i,x_j)\),对于任意的\(x_i, x_j \in \chi\),都有:
\begin{equation}
k(x_i,x_j) = \phi(x_i).\phi(x_j)
\end{equation}
我们称\(k(x,z)\)为核函数。核函数的价值在于虽然是将特征从低维到高维的转换,但它是在低维上进行计算,而将实际的分类效果表现在高维上,这样避免了在高维上的直接计算,降低了计算复杂度。
那么什么样的函数可以作为核函数呢?周志华的西瓜书上给出了详细的定义。总的来说,核函数是一个
半正定核函数。一个函数想要成为半正定核函数,那么必须满足,它所对应的
Gram核矩阵是半正定的。也就是说,对于任意的\(x_i \in \chi , i=1,2,3...m\),\(k(x_i,x_j)\)对应的核矩阵\(K = \bigg[ K(x_i, x_j )\bigg]\)是半正定矩阵。那么什么是半正定矩阵呢?设\(A\)为实对称矩阵,对任意的非零向量 \(x\),有\(x^TAx \geq 0\),那么我们称\(A\)是
半正定矩阵。
通过前面的讨论我们可以知道,我们希望样本在特征空间内线性可分,因此特征空间的好坏对支持向量机的性能至关重要,但是我们并不知道特征空间的形式时,我们并不知道什么样的核函数适合的,而核函数隐式地定义了这个特征空间。还好大佬们帮我们找到了一些核函数,常用的核函数也仅仅是以下几个。
线性核函数(Linear Kernel)
\begin{equation}
k(x_i,x_j) = x_i^T x_j
\end{equation}
也就是说,线性可分SVM可以和线性不可分SVM可以归为一类,只是核函数不同而已。
多项式核函数(Polynomial Kernel)是线性不可分SVM常用核函数之一
\begin{equation}
k(x_i,x_j) = (x_i^T x_j)^d
\end{equation}
\(d=1\)时,多项式核退化为线性核。
高斯核函数(Gaussian Kernel),有时候也称为径向基函数(Radial Basis Function)即RBF核,它是非线性SVM最常使用的核函数。
\begin{equation}
k(x_i,x_j) = exp(- \frac{||x_i^T x_j||}{2\sigma^2}), \ \sigma > 0 是高斯核的带宽
\end{equation}
当然核函数不止上面的,还有
拉普拉斯核,Sigmoid核,此外还可以通过和
函数组合如线性组合,直积得到不同的核函数。
总结
核函数解决了SVM的线性不可分的情况,并且将线性SVM和非线性SVM进行了统一,降低了高维空间计算的复杂度,因此核函数是非常重要的一个概念,在其他的地方也有着重要的应用,如核PCA降维,核聚类,核感知机等。特征空间上去。