想写一下我本身对于核函数的理解,虽然并不知道核函数的发明过程,但我想以本身的理解,来重现这个过程。算法
核函数的应用很广,在SVM上的应用只是冰山一角。即使如此,我仍是假设发明人是在解决SVM问题的过程了发明的核函数。函数
对于一个二分类问题,有一个理想的数据集,假设它是线性可分的,这时直接应用SVM算法便可进行分类。优化
假设如今的数据集不是线性可分的,如图1所示:spa
该数据集在二维空间中,每一个数据点均可用一个二维向量(x1,x2)'''来表示(3个单引号'''表示转置)。咱们能够用一个椭圆形状的超平面在该2维空间中对数据集进行分类,咱们写出椭圆的通常方程:rem
若是咱们令:it
其中:class
你会发现,2维向量x被映射成另外一个5维向量z后,分类超平面是一个线性超平面,数据点变得线性可分!也便是下面的变换:技巧
也就是说,数据集在二维空间中线性不可分,若想实现线性可分,须把该数据集映射到一个5维空间中!考虑SVM的的原始优化问题:im
(式中的点号表明内积运算)式(5)中的xi对应数据集中的样本点,如今在二维空间中。咱们要实现该数据集线性可分,须要把每一个点都映射到5维空间中去。也就变成了下式:总结
根据式(6)能够推知,对于一个线性不可分的数据集,咱们只要把xi替换成相应的映射后的点就能够了。因此,原来二维空间中的分类决策函数:
也就变成了5维空间中的分类决策函数:
好了,由于x的映射函数已知,因此咱们就能轻松根据上式获得决策超平面了。
看似问题到这里就结束了,可是,考虑到本例中只是实现二维空间中数据的线性可分,就把数据映射到了5维空间。想像若是数据自己的维度就很高,那映射后的空间维度会更高,甚至是无限维!咱们该怎么求这个映射函数呢?即使知道了这个映射函数,也无法算啊,由于它是无限维的。因此,咱们应该找一个合适的二元函数,它的输入是原空间的两个向量,它的输出是映射到高维空间的两个向量的内积!给这个合适的二元函数起个霸气的名字,就叫作核函数。
为何这样定义?对照(8)式中的两个映射函数的内积来思考一下:咱们要求出(8)式两个映射函数的内积,因此要构造一个二元函数,它的输入就是原二维空间中的x和xi两个向量,它的输出就是映射到5维空间的两个向量的内积。
这样,咱们就避免了求映射函数,只经过一个核函数就能够在低维空间完成高维空间中才能完成的事!
(至此,有些童鞋会想,既然映射后的向量的内积很差求,你咋知道你构造的核函数的值就是映射后的向量的内积?!一下子会说这个问题。)
先考虑一个简单的例子:
如今有两个二维空间中的数据点x=(x1,x2)'''和y=(y1,y2)''',考虑下面这个二元函数:
把x,y表明(9)式,解之得:
你会发现,最后的函数值居然等于两个向量p和q的内积,并且两个向量分别是二维空间数据点x和y在三维空间中的映射!想到刚才定义的核函数,咱们很容易想到,f(x,y)就是一个核函数。它给出了一个二维的表达式,使得x,y代入便可求值,而再也不须要先把x,y映射成3维空间中的向量p,q,再求内积。
这也正是咱们定义核函数的目的,即虽然没有显式地给出原空间中向量的映射函数,但却达到了能够在原空间中计算映射后的向量内积的目的!
回到咱们刚才讨论的问题,对于(8)式,假设我不知道这个5维的映射是啥,但我要求映射后向量的内积,因此我要构造一个核函数K(x,xi)来代替映射后向量的内积,便可获得下面的决策分类面:
那么问题来了:
有几个经典的核函数可供选用,如:多项式核函数,高斯核函数等。固然你也能够本身构造核函数,但也不是任意一个函数就能够当作核函数的,须要知足Mercer条件(有兴趣的童鞋能够本身研究一下)。
我没专门研究过,我也不知道本身构造的核函数必定能把数据点在高维空间中线性地分开。可是你能够选择上面提到的经常使用的核函数,选择合适的参数,就能使得原空间中的数据点在高维空间中变得线性可分。至于为何,我是这样理解的:
经常使用的核函数把原空间的数据映射到了高维空间中,使得数据变得“更容易”线性可分,考虑下图所示的例子:
二维空间中的点只能用非线性的超平面才能分开,但把数据映射到高维空间中,就能够用一个线性的平面给分开了。虽然更高维的画面没法脑补,可是能够参考咱们在文章开始举的椭圆方程的例子。即空间的维度越高,数据越容易线性可分。
总结一下:
在SVM的应用中,若是数据点在原空间中不是线性可分的,理想的作法是找到一个映射函数把数据映射到高维空间中,而后再进行分类。可是,映射后的目标空间每每是很高维甚至是无限维的,咱们须要找到一个函数来代替求高维空间中向量内积的运算,咱们命名它为核函数。通常的作法都是选择经常使用的核函数来使用,固然,你也能够本身构造核函数,前提是要知足Mercer条件。核函数不仅应用在SVM中,只要有相似需求的地方均可以考虑使用核技巧。