svm入门之七为何需要核函数

出处:http://www.matlabsky.com/thread-10317-1-1.html


生存?还是毁灭?—— 哈姆雷特


  可分?还是不可分?—— 支持向量机


  之前一直在讨论的线性分类器, 器如其名(汗,这是什么说法啊),只能对线性可分的样本做处理。如果提供的样本线性不可分,结果很简单,线性分类器的求解程序会无限循环,永远也解不出来。这必然使得它的适用范围大大缩小,而它的很多优点我们实在不原意放弃,怎么办呢?是否有某种方法,让线性不可分的数据变得线性可分呢?

  有!其思想说来也简单,来用一个二维平面中的分类问题作例子,你一看就会明白。事先声明,下面这个例子是网络早就有的,我一时找不到原作者的正确信息,在此借用,并加进了我自己的解说而已。

  例子是下面这张图:

svm入门之七为何需要核函数_第1张图片 

svm入门之七为何需要核函数_第2张图片 

svm入门之七为何需要核函数_第3张图片 

这样g(x) 就可以转化为f(y)=<a,y> ,你可以把y a 分别回带一下,看看等不等于原来的g(x) 。用内积的形式写你可能看不太清楚,实际上f(y) 的形式就是:


g(x)=f(y)=ay

  在任意维度的空间中,这种形式的函数都是一个线性函数(只不过其中的a y 都是**向量罢了),因为自变量y 的次数不大于1

  看出妙在哪了么?原来在二维空间中一个线性不可分的问题,映射到四维空间后,变成了线性可分的!因此这也形成了我们最初想解决线性不可分问题的基本思路—— 向高维空间转化,使其变得线性可分。

  而转化最关键的部分就在于找到x y 的映射方法。遗憾的是,如何找到这个映射,没有系统性的方法(也就是说,纯靠猜和凑)。具体到我们的文本分类问题,文本被表示为上千维的向量,即使维数已经如此之高,也常常是线性不可分的,还要向更高的空间转化。其中的难度可想而知。

  用一个具体文本分类的例子来看看这种向高维空间映射从而分类的方法如何运作,想象一下,我们文本分类问题的原始空间是1000 维的(即每个要被分类的文档被表示为一个1000 维的向量),在这个维度上问题是线性不可分的。现在我们有一个2000 维空间里的线性函数


f(x’)=<w’,x’>+b

  注意向量的右上角有个 ’ 哦。它能够将原问题变得可分。式中的 w’ x’ 都是2000 维的向量,只不过w’ 是定值,而x’ 是变量(好吧, 严格说来这个函数是2001 维的, 哈哈),现在我们的输入呢,是一个1000 维的向量x ,分类的过程是先把x 变换为2000 维的向量x’ ,然后求这个变换后的向量x’ 与向量w’ 的内积,再把这个内积的值和b 相加,就得到了结果,看结果大于阈值还是小于阈值就得到了分类结果。

你发现了什么?我们其实只关心那个高维空间里内积的值,那个值算出来了,分类结果就算出来了。而从理论上说, x’ 是经由x 变换来的,因此广义上可以把它叫做x 的函数(有一个x ,就确定了一个x’ ,对吧,确定不出第二个),而w’ 是常量,它是一个低维空间里的常量w 经过x x’ 之间相同的变换得到的,所以给了一个x 的值,就有一个确定的f(x’) 值与其对应。这让我们幻想,是否能有这样一种函数K(w,x), 他接受低维空间的输入值,却能算出高维空间的内积值<w’,x’>

  如果有这样的函数,那么当给了一个低维空间的输入x 以后,


g(x)=K(w,x)+b


f(x’)=<w’,x’>+b

  这两个函数的计算结果就完全一样,我们也就用不着费力找那个映射关系,直接拿低维的输入往g(x) 里面代就可以了(再次提醒,这回的g(x) 就不是线性函数啦,因为你不能保证K(w,x) 这个表达式里的x 次数不高于1 哦)。

  万幸的是,这样的K(w,x) 确实存在(发现凡是我们人类能解决的问题,大都是巧得不能再巧,特殊得不能再特殊的问题,总是恰好有些能投机取巧的地方才能解决,由此感到人类的渺小),它被称作核函数(核,kernel ),而且还不止一个,事实上,只要是满足了Mercer 条件的函数,都可以作为核函数。核函数的基本作用就是接受两个低维空间里的向量,能够计算出经过某个变换后在高维空间里的向量内积值。几个比较常用的核函数,俄,教课书里都列过,我就不敲了(懒!)。

回想我们上节说的求一个线性分类器,它的形式应该是:

svm入门之七为何需要核函数_第4张图片 
积的时候就用你选定的核函数来算。这样求出来的α 再和你选定的核函数一组合,就得到分类器啦!

  明白了以上这些,会自然的问接下来两个问题:


1
既然有很多的核函数,针对具体问题该怎么选择?


2
如果使用核函数向高维空间映射后,问题仍然是线性不可分的,那怎么办?

  第一个问题现在就可以回答你:对核函数的选择,现在还缺乏指导原则!各种实验的观察结果(不光是文本分类)的确表明,某些问题用某些核函数效果很好,用另一些就很差,但是一般来讲,径向基核函数是不会出太大偏差的一种,首选。(我做文本分类系统的时候,使用径向基核函数,没有参数调优的情况下,绝大部分类别的准确和召回都在85% 以上,可见。虽然libSVM 的作者林智仁认为文本分类用线性核函数效果更佳,待考证)

  对第二个问题的解决则引出了我们下一节的主题:松弛变量。

你可能感兴趣的:(机器学习,SVM)