机器学习Machine Learning & Data Analysis

SVM由浅入深的尝试(五)核函数的理解

2018-07-02  本文已影响7人  在做算法的巨巨

对于线性分类问题,线性分类向量机是一种非常有效的方法。但是,当分类变得不线性,线性分类向量机就会失效,我们就需要新的方法去解决,那就是非线性向量机,而在非线性向量机中,一种非常重要的方法就必须要知道,那就是核函数。

核函数运用广泛,不仅应用于支持向量机,而且在很多统计学问题上都扮演重要作用。

对于我本人来说,因为之前也涉猎过核函数,因此,在理解上可能相对快一点。
网上有很多对核函数的介绍,知乎上的介绍我印象很深,有兴趣的可以搜一下。
核函数的入门理解还是要从,将二维非线性问题转化为三维线性问题。


示例1.png

原本线性不可分的问题瞬间变成了线性分割面可以分类的问题。很神奇!
具体实现的手段就是增加维度。

举个简单例子

示例2.png

上图中,我们发现x1,x2是非线性分类,于是我们通过变化,z=phi(x),我们发现,z1,z2是线性分类问题。

![](http://latex.codecogs.com/svg.latex?w^T*z+b=0)
![](http://latex.codecogs.com/svg.latex?z=\phi(x))
定义1.png

其实白话理解就是,假设存在映射函数phi(x),对初始空间所有的x,z,存在

![](http://latex.codecogs.com/svg.latex?K(x,z)=\phi(x)\cdot\,\phi(z))
示例2.png

从上例可以看出,核函数一定,映射函数是不唯一的,而且当维度是无线大的时候,我们几乎无法求得映射函数,那么核函数的作用就在于此,核函数避免了映射函数的求解,叫做核技巧。

核函数是半正定矩阵。

1. 多项式核函数
![](http://latex.codecogs.com/svg.latex?K(x,z)=(x\cdot\,z+1)^p)

分类决策函数为

![](http://latex.codecogs.com/svg.latex?f(x)=sign(\sum_{i=1}^N\alpha_iy_i(x_i\cdot\,x+1)^p+b)
2. 高斯核函数
![](http://latex.codecogs.com/svg.latex?K(x,z)=exp(-\frac{||x-z||^2}{2\sigma^2}))

分类决策函数为:

![](http://latex.codecogs.com/svg.latex?f(x)=sign(\sum_{i=1}^N\alpha_iy_iexp(-\frac{||x-z||^2}{2\sigma^2})+b))
3. 字符串核函数

...太复杂,没看懂,有时间再看。

4. 线性核

我们的线性问题也可以用线性核来解决。
Linear kernel

![](http://latex.codecogs.com/svg.latex?K(xi,xj)=xi\cdot\,xj)

因此,我们得到的对偶问题就可以切换,

![](http://latex.codecogs.com/svg.latex?\min_{w,b}\iota=-\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot\,x_j)+\sum_{i-1}^N\alpha_i)

切换为

![](http://latex.codecogs.com/svg.latex?\min_{w,b}\iota=-\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_jK(x_i,x_j)+\sum_{i-1}^N\alpha_i)

注:书中的SMO算法也是用线性核的凸二次规划对偶方程求解。

截至到此,SVM算法就算告一段落,关于SMO算法,接下来还需要手动撸代码,需要更深的理解,最近两周的努力没有白费,让我对支持向量机有了全新的认识,希望未来能有机会实践于具体项目。

上一篇 下一篇

猜你喜欢

热点阅读