24

详解SVM模型——核函数是怎么回事

 3 years ago
source link: http://www.cnblogs.com/techflow/p/13760317.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

大家好,欢迎大家阅读周二机器学习专题,今天的这篇文章依然会讲SVM模型。

也许大家可能已经看腻了SVM模型了,觉得我是不是写不出新花样来,翻来覆去地炒冷饭。实际上也的确没什么新花样了,不出意外的话这是 本专题最后一篇文章 了。下周我们就要开始深度学习之旅了,我相信很多同学期待这一天已经很久了,实际上我也一样,因为这个专题里讲的大部分内容已经只在面试环节会用到,而我已经很久没有面试了。所以让我们收拾一下激动的心情,来把SVM最后剩下的一点内容讲完。

虽然只剩下最后一点内容了,但是今天的内容非常重要,可以说是SVM模型面试的核心终点。说到SVM可能对偶问题、拉格朗日面试官不一定会问你,可能他自己也不一定会,但是今天要讲的 核函数是一定会问的 。因为它表面上看起来是SVM最重要的内容,实际上我当时在刚转行准备面试的时候,SVM模型相关的内容一概不知,就知道核函数,所以我想大家应该能够体会到这里面的深意。

核函数究竟是什么

首先我们来介绍一下核函数的概念,可能大家会很好奇,明明我们已经把SVM模型的原理完整推导完了,怎么又冒出来一个核函数。实际上核函数非常精彩,它对于SVM也非常重要,因为它奠定了SVM的“江湖地位”,也可以说是SVM模型最大的特性。

在介绍核函数之前,我们先来看一个问题,这个问题在机器学习的历史上非常有名,叫做 亦或问题 。我们都知道,在二进制当中有一个操作叫做亦或操作。亦或操作其实很简单,就是如果两个数相同返回的结果就是0,否则就返回1。如果我们的数据是类似亦或组成的,就会是这样一个形状:

Y7ZRFnr.jpg!mobile

我们观察一下上面这个图,会发现一个问题,就是我们 无论如何也不可能找到一条线把上面这个分类完成 。因为一条线只能分出两个区域,但是上面这个图明显有四个区域。

那如果我们把上面的数据映射到更高的维度当中,上图是二维的图像,我们把它映射到三维当中,就可以使用一个平面将样本区分开了。也就是说 通过一个映射函数,将样本从n维映射到n+1或者更高的维度 ,使得原本线性不可分的数据变成线性可分,这样我们就解决了一些原本不能解决的问题。

ieEFfyz.jpg!mobile

所以核函数是什么?是一系列函数的统称,这些函数的输入是样本x,输出是一个映射到更高维度的样本 。大部分能实现这一点的函数都可以认为是核函数(不完全准确,只是为了理解方便),当然一些稀奇古怪的函数虽然是核函数,但是对我们的价值可能并不大,所以我们也很少用,常用的核函数还是只有少数几种。

使用方法

现在我们已经知道核函数是什么了,那么它又该如何使用呢?

这个问题也不难,数学上比较困难的是表示问题,一个问题被描述以及表示清楚可能是最难的,当表示出来了之后把它解出来可能就要简单很多了。所以我们先来表示问题,用一个字母 equation?tex=%5CPhi 来表示核函数。前面已经说过了,核函数的输入是样本x,所以映射之后的样本就是 equation?tex=%5CPhi(x)

还记得我们上次推导到最后的公式吗?我们把它写出来,大家回顾一下。

equation?tex=%5Cbegin%7Balign*%7D&%5Cmin_%7B%5Calpha%7D%5Cfrac%7B1%7D%7B2%7D

我们要做的就是把核函数代入进去,仅此而已,代入进去之后,就会得到:

equation?tex=%5Cbegin%7Balign*%7D&%5Cmin_%7B%5Calpha%7D%5Cfrac%7B1%7D%7B2%7D

这里有一个小问题,我们前面说了函数 equation?tex=%5CPhi(x) 会把x映射到更高的维度。比如x本身是10维的,我们用了函数之后给映射到1000维了,当然它的线性不可分的问题可能解决了,但是这会带来另外一个问题,就是 计算的复杂度增加了 。因为原本 本来只需要10次计算,但现在映射了之后,需要1000次计算才可以得到结果。这不符合我们想要白嫖不想花钱的心理,所以我们对核函数做了一些限制, 只有可以白嫖的映射函数才被称为核函数

我们把需要满足的条件写出来,其实很简单。我们把满足条件的核函数称为K,那么K应该满足:

也就是说K对 的结果进行计算等价于映射之后的结果再进行点乘操作,这样就可以在计算复杂度不变的情况下完成映射。其实对于核函数是有数学上的定义的,这里我没放出来,一个是觉得表示太复杂用不到,另外一个是在面试的时候其实也不会问到这么细,我们只需要知道它的性质就可以了。因为常见使用的核函数来来回回基本上也就那么几种,我们记住它们就OK了。

下面我们就来看一下常见的核函数,大概有这么四种:

  1. 线性核函数,其实就是没有核函数。我们表示出来就是

  2. 多项式核函数,它等价于一个多项式变换: ,这里的 equation?tex=%5Cgamma ,b和d都是我们设置的参数

  3. 高斯核,这种核函数使用频率很高,

  4. sigmoid核,它的公式是:

我们使用核函数的方法很简单,就是用K这个函数计算 的值来代替原本 的结果, 对于SVM模型的推演并不产生影响 。这也是为什么我们在上一篇文章当中用SMO算法来推导 equation?tex=%5Calpha 优化方法时候,要令 的原因,其实就是在为后面讲解核函数做铺垫。

我个人觉得和前面硬间隔软间隔以及对偶问题和SMO算法的推导比起来,核函数的原理应该算是其中最简单的。即使你完全不理解SVM模型的原理,也可以搞得懂核函数。所以大家看这篇文章应该是没有太大压力的。

文章到这里就结束了,如果喜欢的话,希望可以来一波 三连 支持,再次感谢大家的阅读( 关注、转发、点赞 )。

原文链接,求个关注

本文使用 mdnice 排版

- END -


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK