SVM算法相关推导[三]——核函数

由前文

https://blog.csdn.net/xingzhe2001/article/details/82916907

https://blog.csdn.net/xingzhe2001/article/details/82927277

核函数的作用

我们知道,SVM算法主要关心的是

\left \langle x_i,x_j \right \rangle

有的时候我们会将特征x扩展到非线性,比如加入特征 x^2, x^n等等,我们记这种扩展为

x\overset{\phi}{\rightarrow}\phi(x)

这样可以更好地匹配数据。

我们只需要回到原问题,把

\left \langle x_i,x_j \right \rangle

替换为

\left \langle \phi(x_i),\phi(x_j) \right \rangle

即可得到新的优化目标和预测函数。

有时候phi()函数会变得很高维,就需要核函数

K(x^{(i)},x^{(j)})=\left \langle \phi(x^{(i)}), \phi(x^{(j)}) \right \rangle

来计算。K可以做得很快,比如从O(n^2)降到O(n)

核函数的基本要求

因为内积表示两个向量的接近程度,内积越大则两个向量方向越接近,所以K函数也要满足这样的性质,

两个向量越接近,K的值越大。

而且可以看出核函数是对称的,因为内积是对称的

如何找到合法的核函数

有个定理说如果核函数K对应的核矩阵是半正定的,而且k是对称的,那么k就是合法的核函数。

什么是核矩阵?

将核函数k对每对数据集的操作列出来,就是核矩阵

K=\begin{bmatrix} k(x_1,x_1) &\cdots & k(x_1,x_j)& \cdots &k(x_1,x_m) \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ k(x_i,x_1) &\cdots & k(x_i, x_j) &\cdots &k(x_i,x_m) \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ k(x_m,x_1) &\cdots & k(x_m,x_j) &\cdots & k(x_m,x_m) \end{bmatrix} =\left [ k(x_i,x_j) \right ]

什么是半正定

对于矩阵K如果

x^TKx \geq 0

则称K为半正定,如果是>0则称为正定

什么是再生核希尔伯特空间

希尔伯特空间是泛函里面的概念,定义了一个完毕内积空间。

再生核希尔伯特空间在统计学习里得到了应用。参考

知乎的Cplusplus的文章https://zhuanlan.zhihu.com/p/29527729和

他引用的文章http://songcy.net/posts/story-of-basis-and-kernel-part-2/

讲的很好。

这里的证明主要是Schölkopf 和smola在2002左右的论文

A Generalized Representer Theorem 

西瓜书说每个核函数都隐式地定义了一个 再生核希尔伯特空间(RKHS Reproducing Kernal Hilbert Space)的特征空间。

泛函分析说希尔伯特空间定义了完备的内积空间。在这个空间里可以做内积操作。而且空间里的向量(函数)可以定义为其他基向量(函数)的线性组合。

吴恩达给出的证明

k_{ij}=\phi(x^{(i)})^T\phi(x^{(j)})

对于任意m维向量Z

\begin{align*} Z^TKZ &=\sum_i\sum_j z_ik_{ij}z_j\\ &= \sum_i \sum_j z_i \phi(x^{(i)})^T\phi(x^{(j)})z_j \end{align*}

将内积按元素展开

\begin{align*} Z^TKZ &=\sum_i\sum_j z_i \sum_k(\phi(x^{(i)}))_k (\phi(x^{(j)}))_k z_j\\ &=\sum_k\sum_i\sum_j z_i (\phi(x^{(i)}))_k (\phi(x^{(j)}))_k z_j\\ &=\sum_k(\sum_jz_i \phi(x^{(i)})_k)^2 \geq 0 \end{align*}

所以K是半正定的

常用的核函数

最常用的是线性核和高斯核,其他常用的还有多项式核,拉普拉斯核,Sigmoid核

核函数的组合仍然是核函数

核函数的线性组合仍然是核函数

k=\gamma_1k_1+\gamma_2k_2

核函数的直积仍然是核函数

k=k_1 \otimes k_2(x,z)=k_1(x,z)k_2(x,z)

核函数的函数变换仍然是核函数。

k(x,z)=g(x)x_1(x,z)g(z)

将函数视作向量,上面这些性质就都好理解了。

你可能感兴趣的:(SVM算法相关推导[三]——核函数)