对于非线性分类,SVM一般有两种选择:
1. 容忍错误分类,即引入soft margin
2. 利用kernel trick,对input space做feature expansion,形成feature space,即把数据映射到高维中去。
这里谈谈kernel。
核技巧(kernel trick):
学习是隐式地在特征空间下进行的,不需要显式地定义特征空间(feature space)和映射函数( ϕ ),这样的技巧称为核技巧。
在线性可分支持向量机的对偶问题中,无论是目标函数还是决策函数都只涉及输入样本与样本之间的内积,从头到尾都是在做内积运算。如果为了让数据线性可分,将数据映射到高维的特征空间,在特征空间计算内积就很麻烦了,而且也没有必要。
minα(12∑i=1m∑j=1mαiαjyiyjϕ(xi)ϕ(xj)−∑i=1mαi)
这个时候有个定理出现了,叫Mercer Theorem。
这个定理说明:那些原始维度的内积转换到高维空间的内积就等于把数据带入核函数的结果。即
K(xi,xj)=ϕ(xi)ϕ(xj)
将内积用核函数代替。
对偶问题的目标函数转化成:
minα(12∑i=1m∑j=1mαiαjyiyjK(xi,xj)−∑i=1mαi)
s.t.∑i=1mαiyi=0
αi≥0,i=1,2,...,m
如果我已知了一个核函数 K(x,z) ,我就不需要构造映射函数 ϕ(x) .
小结:经过映射函数 ϕ 将原来的input space变换到一个新的feature space,将输入空间的内积变换为特征空间中的内积 ϕ(xi)⋅ϕ(xj) ,在新的feature space中学习线性SVM。当映射函数 ϕ 是非线性函数时,学习到的还有核函数的SVM是非线性的分类模型。而在具体计算 ϕ(xi)ϕ(xj) 的时候以核函数的计算结果 K(xi,xj) 取而代之。不需要在高维空间进行计算,也不需要知道映射函数具体是什么。
函数 K(x,z) 满足什么条件才能成为核函数?
通常所说的核函数就是正定核函数,正定核函数的充要条件是
K(x,z)
对应的Gram矩阵
K=[K(xi,xj)]m×m
是半正定矩阵。
任何一个核函数都定义了一个再生核希尔伯特空间(Reproducing Kernel Hilbert Space, RKHS)。
常用核函数:
1. 线性核:主要用于线性可分的情况,参数少,速度快。
2. 多项式核
3. 高斯核函数(RBF):主要用于线性不可分的情况,参数多,分类结果非常依赖参数。
4. Sigmoid核函数