核函数

异或问题不是线性可分的,对这样的问题,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。如果原始空间是有限维,即属性数有限,那么一定存在一个高维特征空间使样本可分。
令 ϕ(x) 表示将 x 映射后的特征向量,于是,在特征空间中划分超平面所对应的模型可表示为
f(x)=wTϕ(x)+b
类似上篇博客提到的对偶问题,映射后的公式如下:
maxαi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjϕ(xi)Tϕ(xj) 公式(1)
s.t.i=1∑mαiyi=0,αi≥0
求解公式(1)涉及到 ϕ(xi)Tϕ(xj) 的内积运算,这是样本在映射到特征空间之后的内积。如果维数很大,计算是很困难的。可以设想这样一个函数(称为核技巧):
κ(xi,xj)=ϕ(xi)Tϕ(xj)
即 xi 和 xj 在特征空间的内积等于它们在原始样本空间中通过函数 κ(.,.) 计算的结果。有这样的函数,上式可重写为:
maxαi=1∑mαi−21i=1∑mj=1∑mαiαjyiyjκ(xi,xj) 公式(2)
s.t.i=1∑mαiyi=0,αi≥0
求解后可得到:
f(x)=wT+b=i=1∑mαiyiϕ(xi)Tϕ(xj)+b=i=1∑mαiyiκ(xi,xj)+b 公式(3)
这里的函数 κ(.,.) 就是核函数,公式(3)表示模型最优解可通过训练样本的核函数展开,这一展式也称支持向量展式。
如果知道 ϕ(.) 的具体形式,则可以写出核函数 κ(.,.) ,但现实任务中通常不知道 ϕ 是什么形式,那么合适的核函数是否一定存在?什么样的函数适合做核函数?
定理:核函数
令 χ 为输入空间,κ(.,.) 是定义在 χ×χ 上的对称函数,则 κ 是核函数当且仅当对于任意数据 D=x1,x2,...,xm ,核矩阵 K 总是半正定的:

上述定理表明,只要一个对称函数所对应的核矩阵半正定,就能作为核函数。任何一个核函数都隐式地定义了一个称为“再生核希尔伯特空间(RKHS)”的特征空间。
自己去找一个核函数还是很难的,怎么办呢?还好牛人们已经帮我们找到了很多的核函数,而常用的核函数也仅仅只有那么几个。下面我们来看看常见的核函数, 选择这几个核函数介绍是因为scikit-learn中默认可选的就是下面几个核函数。
名称 |
表达式 |
参数 |
线性核 |
κ(xi,xj)=xiTxj |
|
多项式核 |
κ(xi,xj)=(xiTxj)d |
d≥1是多项式的次数 |
高斯核 |
$\kappa(x_i,x_j)=exp(-\frac{ |
|
Sigmoid核 |
κ(xi,xj)=tanh(βxiTxj+θ) |
tanh为双曲正切函数(β>0,θ<0) |
线性可分SVM我们可以和线性不可分SVM归为一类,区别仅仅在于线性可分SVM用的是线性核函数。
高斯核函数(Gaussian Kernel),在SVM中也称为径向基核函数(Radial Basis Function,RBF),它是非线性分类SVM最主流的核函数。libsvm默认的核函数就是它。
对文本分类通常采用线性核,情况不明时,可以尝试高斯核。
此外,核函数还可以通过组合得到,如κ1 和 κ2 是核函数,那么下面的组合也是核函数
γ1κ1+γ2κ2
κ1⨂κ2(x,z)=κ1(x,z)κ2(x,z)
κ(x,z)=g(x)κ1(x,z)g(z)
参考
周志华《机器学习》
https://www.cnblogs.com/pinard/p/6103615.html
李航《统计学习方法》