核函数(Kernels

定义 1.1 (核或正定核) 设高斯核函数中python_核函数高斯核函数中python_映射函数_02中的一个子集,称定义在

高斯核函数中python_拟合_03

上的函数

高斯核函数中python_拟合_04

是核函数,如果存在一个从高斯核函数中python_核函数_05到Hilbert空间高斯核函数中python_映射函数_06的映射高斯核函数中python_核函数_07

高斯核函数中python_高斯核函数中python_08

使得对任意的

高斯核函数中python_拟合_09


高斯核函数中python_映射函数_10

都成立。其中高斯核函数中python_拟合_11表示Hilbert空间高斯核函数中python_核函数_12中的内积。

在低纬度空间里不可分的问题,我们可以通过将其向高纬度空间转化,使其线性可分。而转换的关键是找到低维空间向高纬的映射方法。

考虑我们最初在“线性回归”中提出的问题,特征是房子的面积x,这里的x是实数,结果y是房子的价格。假设我们从样本点的分布中看到x和y符合3次曲线,那么我们希望使用x的三次多项式来逼近这些样本点。那么首先需要将特征x扩展到三维

高斯核函数中python_高斯核函数中python_13

,然后寻找特征和结果之间的模型。我们将这种特征变换称作特征映射(feature mapping)。映射函数称作高斯核函数中python_数据结构与算法_14,在这个例子中

高斯核函数中python_拟合_15

我们希望将得到的特征映射后的特征应用于SVM分类,而不是最初的特征。这样,我们需要将前面

高斯核函数中python_高斯核函数中python_16

公式中的内积从

高斯核函数中python_拟合_17

,映射到

高斯核函数中python_映射函数_18


至于为什么需要映射后的特征而不是最初的特征来参与计算,上面提到样例可能存在线性不可分的情况,而将特征映射到高维空间后,往往就可分了,同时也为达到更好地拟合效果。

根据核函数的定义,如果原始特征内积是

高斯核函数中python_高斯核函数中python_19

,映射后为

高斯核函数中python_数据结构与算法_20

,那么定义核函数(Kernel)为

高斯核函数中python_高斯核函数中python_21

可见,核函数接受低维空间的输入值,却能算出高维空间的内积值。如果按照传统方法,需先计算

高斯核函数中python_映射函数_22

,然后计算

高斯核函数中python_核函数_23

,然而这种计算方式是非常低效的。比如最初的特征是n维的,我们将其映射到高斯核函数中python_高斯核函数中python_24维,然后再计算,这样需要

高斯核函数中python_拟合_25

的时间。通过核函数极大地减少了计算时间。

先看一个例子,假设x和z都是n维的,

高斯核函数中python_拟合_26

展开后,得

高斯核函数中python_数据结构与算法_27

这个时候发现我们可以只计算原始特征x和z内积的平方,就等价与计算映射后特征的内积。

现在看一下映射函数(n=2时),根据上面的公式,得到

高斯核函数中python_核函数_28

也就是说核函数

高斯核函数中python_拟合_29

只能在选择这样的高斯核函数中python_数据结构与算法_30作为映射函数时才能够等价于映射后特征的内积。

再看一个核函数

高斯核函数中python_映射函数_31

对应的映射函数(n=2时)

高斯核函数中python_拟合_32

高斯核函数中python_高斯核函数中python_33

由于计算的是内积,我们可以想到IR中的余弦相似度,如果x和z向量夹角越小,那么核函数值越大,反之,越小。因此,核函数值是高斯核函数中python_核函数_34高斯核函数中python_高斯核函数中python_35的相似度。

再看另外一个核函数

高斯核函数中python_核函数_36

这时,如果高斯核函数中python_拟合_37高斯核函数中python_核函数_38很相近(

高斯核函数中python_核函数_39

),那么核函数值为1,如果x和z相差很大(

高斯核函数中python_映射函数_40

),那么核函数值约等于0。由于这个函数类似于高斯分布,因此称为高斯核函数,也叫做径向基函数(Radial Basis Function 简称RBF)。它能够把原始特征映射到无穷维。使用核函数后,怎么分类新来的样本呢?线性的时候我们使用SVM学习出w和b,新来样本x的话,我们使用

高斯核函数中python_数据结构与算法_41

来判断,如果值大于等于1,那么是正类,小于等于是负类。在两者之间,认为无法确定。如果使用了核函数后,

高斯核函数中python_高斯核函数中python_42

就变成了

高斯核函数中python_高斯核函数中python_43

,是否先要找到

高斯核函数中python_拟合_44

,然后再预测?答案肯定不是了,找

高斯核函数中python_高斯核函数中python_45

很麻烦,回想我们之前说过的

高斯核函数中python_数据结构与算法_46

只需将

高斯核函数中python_拟合_47

替换成

高斯核函数中python_高斯核函数中python_48

,然后值的判断同上。核函数不仅仅用在SVM上,但凡在一个模型后算法中出现了

高斯核函数中python_数据结构与算法_49

,我们都可以常使用

高斯核函数中python_映射函数_50

去替换,这可能能够很好地改善我们的算法。