支持向量机学习之2:核函数

支持向量机系列学习笔记包括以下几篇:
Spark机器学习系列之13: 支持向量机SVM :http://blog.csdn.net/qq_34531825/article/details/52881804
支持向量机学习之2:核函数http://blog.csdn.net/qq_34531825/article/details/52895621
支持向量机学习之3:SVR(回归)http://blog.csdn.net/qq_34531825/article/details/52891780

本文绝大部分内容转载自 http://blog.csdn.net/xiaojiegege123456/article/details/7728198,xiaojiegege123456 CSDN,在我读完参考文献2,3之后,对原文有微细的增改。
SVM最终要转换为对偶问题如下:

maxW(α)=i=1nαi12i,j=1nyiyjαiαj<xi,xj>

s.t.i=1nαiyi=0αi0i=1...n

的求解需要计算<xi,xj>这个内积,而如果输入样本线性不可分的话,我们采取的方法是通过Φ:XF函数映射将输入样本映射到另外一个高维空间并使其线性可分。

以库克定律为例(http://zh.wikipedia.org/zh-cn/%E9%9D%99%E7%94%B5%E5%8A%9B):
一个电量为 q 的点电荷作用于另一个电量为 q 的点电荷,其静电力 F 的大小,可以用方程表达为:

F=keqqr2
其中,r 是两个点电荷之间的距离,ke 是库仑常数。
显然这个定律无法用线性学习器来表达,看到乘积想到ln函数,对原始形式两边取ln,得到:
lnF(q,q,r)=ln(ke)+ln(q)+ln(q)2ln(r)>
,令x2=ln(q)x3=ln(q)x4=ln(r)x1=in(ke)G(x⃗ )=ln(F(q,q,r)),那么就得到一个线性学习器:
G(x⃗ )=x1+x2+x32x4=wTx⃗ ,x⃗ =[x1,x2,x3,x4]T
这个过程可以用下图说明:
这里写图片描述

考虑映射Φ,将一个低维空间的特征如R2空间x1,x2)映射为R3空间x21,2x1x2,x22),这样也许原来不可分的数据在高维度空间就变得可分了。

完成映射之后,原来需要计算<xi,xj>,现在需要计算<Φ(xi),Φ(xj)>:

maxW(α)=i=1nαi12i,j=1nyiyjαiαj<Φ(xi),Φ(xj)>

但是随之而来的问题是,维度增加意味着特征个数增加,SVM中需要增加αi的个数,复杂度提高了,从而导致模型的泛化能力(学习器对训练样本以外数据的适应性)会随着维度的增长而大大降低,这也违反了“奥坎姆的剃刀”(这个原理称为“如无必要,勿增实体”,即“简单有效原理”。)
也许看到这里会觉得从Φ:R2R3有什么呀,不就多一个特征吗?其实上面是最简单的一个特殊例子,一般来说,如果我们把一个维度为d的低维度空间特征映射到高维度空间,假设映射后单项式的次数为p(如三个单项式x21,2x1x2,x22,p2),那么通过可以组合出(d+p1p)个特征,呵呵,现在感觉到害怕了吧?!这个数能达到多少呢?Vapnik等人举了个例子,对于表现较好的OCR识别来说,p=7,d=2828=784,3.71016
因此想要:先找到这种映射,然后将输入空间中的样本映射到新的空间中,最后在新空间中去求内积<Φ(xi),Φ(xj)>是绝对不可行的。
因此我们需要找到某种方法,它不需要显式的将输入空间中的样本映射到新的空间中而能够在输入空间中直接计算出内积<Φ(xi),Φ(xj)>。核函数就这样被研究出来了。再调强以下,它是对输入空间向高维空间的一种隐式映射,它不需要显式的给出那个映射,在输入空间就可以计算<Φ(xi),Φ(xj)>
定义1:核是一个函数K,对于所有的x,xX满足,K<x,x>=<Φ(x),Φ(x)> ,这里的Φ为从X到内积特征空间F的映射。
于是输入空间的标准内积就被推广了。
对于前面提到的:映射Φ,将一个低维空间的特征如R2空间x=x1,x2)映射为R3空间(x21,2x1x2,x22),
可以证明:

<(x21,2x1x2,x22),(x21,2x1x2,x22)>=<x,x>2

所以就找了K(x,x)=<x,x>2,是不是输入空间的标准内积<x,x)形式上的一个自然推广?!
上面是一个特殊的例子,那么一般核函数K(x,y)通过什么样的方法去寻找呢?
假设有输入空间X=x1,x2,....xnK(x,y)为对称函数,那么对于所有样本得到下面矩阵:k=(K(xi,xj))(i,j=0,...n),显然,这个是个对称矩阵,那么对于对称矩阵一定存在一个正交矩阵,使得PTkP=Λ,这里Λ是包含k的特征值λi的对角矩阵,特征值λi对应的特征向量为vt=(vt1,vt2,...vtn)T,其中n为样本数,对输入空间做如下映射ϕ
ϕ:xi|>(λ1v1i,λ2v2i...λnvtn)Rn(i=1,...n)
于是有<ϕ(xi),ϕ(xj)>=t=1nλtvtivtj=(VΛVT)i,j=ki,j=K(xi,xj),(VΛ)Kϕ

例子:

k=400031013
,其特征向量:v1=(1,0,0)Tv2=(0,12,12)Tv3=(0,12,12)TV=(v1,v2,v3)=10001(2)1(2)01(2)1(2)V1kV=Λ=400040002>
ϕ(x1)=(41,40,20)=(2,0,0)T;>
ϕ(x2)=(40,412,2(12))T=(0,2,1);
ϕ(x3)=(40,412,212)T=(0,2,1)
随便选两个做内积,如<ϕ(x2),ϕ(x3)>=00+22+(1)1=1=K(x2,x3)
由此可见:K(x,y)就是对应于特征映射ϕ的核函数,

可以得到下面的结论:
定理1:存在有限输入空间XK(x,y)X上的对称函数,那么K(x,y)是核函数的充要条件是矩阵k=(K(xi,xj))(i,j=0,...n)半正定,此时相当于对输入空间向特征空间进行了隐式的ϕ映射。
对于上面的映射ϕϕi(xj)=λivij
于是ϕ(x)=(ϕ1(x),ϕ2(x),...ϕn(x))

K(x,y)=i=1λiϕi(x)ϕi(y)

定理3:设XRn的一个紧子集(闭合且有界子集),K(x,y)X上的对称函数,如果它在希尔伯特空间上的积分算子Tkf(x)=f(t)dt满足:fL2(X),X×XK(x,y)f(x)f(y)dxdy0

这里L2指的是由满足条件f(x)2dx<的所有函数f(x)组成的空间。

X×XK(x,y)TkϕjL2(x)使||ϕj||L2=1λj0K(x,y)为: K(x,y)=i=1λiϕi(x)ϕi(y)
定义2:设H是希尔伯特函数空间,其元素是某个抽象集合X上的实值或复值函数,如果对于任何yXK(x,y)作为x的函数都是H中的元素,而且对于任何y \in X及f \in H取内积有:f(y)=<f(x),K(x,y)>
则H称为为再生核希尔伯特空间(Reproducing Kernel Hilbert Space,RKHS);称K(x,y)为再生核空间H的再生核(简称RK)。
定理4:对于定义在域XRd上的每一个Mercer核K(x,y),存在一个定义在X上的函数的再生希尔伯特空间RKHS,其中K是再生核。反过来,对于线性有界函数的任意希尔伯特空间,存在再生核这个命题也成立。
当然也可以利用核函数来构造核函数,有时候这种构造会很有效的解决问题:
条件:设K1(x,y)K2(x,y)X×X上的核,XRnf是X上的实值函数,ϕ:X>RmK3(x,y)Rm×Rm上的核,A是一个对称半正定矩阵,则下面的函数都是核:

1K(x,y)=K1(x,y)+K2(x,y);2K(x,y)=αK1(x,y);3K(x,y)=K1(x,y)K2(x,y);4K(x,y)=f(x)f(y);5K(x,y)=K3(ϕ(x),ϕ(y));6K(x,y)=xTAy

核的选择对于支持向量机至关重要,选定核K(x_i,x_j)后,原问题就变成了:
maxi=1nαi12i,j=1nyiyjαiαjK(xi,xj)
s.t.i=1nαiyi=0
αi0i=1...n

这个优化问题有最优解么?记得核要满足Mercer条件,即矩阵k=(K(xi,xj))(i,j=0,...n)在所有训练集上半正定,这说明这个优化是凸优化,于是这个条件保证了最大化间隔优化问题有唯一解,简直是天作之合啊,配合的天衣无缝;最后求的(α)和b,那么从输入空间向特征空间隐式映射后得到的最大间隔超平面也就出来了:f(x)=i=1nαyiK(xi,x)+bγ=1||w||=(isupportvectorαi)1/2
常用核函数总结如下:
线性核函数:K<x,y>=<x,y>d
多项式核函数:K(x,y)=(<x,y>+1)d
高斯核函数:K(x,y)=e||xy||22δ2
Sigmoid核函数:K(x,y)=tanh(ρ<x,y>+c)
下面这个链接收集了若干核函数:
http://www.shamoxia.com/html/y2010/2292.html
关于核方法的理论部分涉及到泛函分析、微积分等等,水比较深,我推荐一本书:《Kernel Methods for Pattern Analysis》(模式分析的核方法),作者是:John Shawe-Taylor和Nello Cristianini 。

主要参考文献
(1)http://blog.csdn.net/xiaojiegege123456/article/details/7728198,xiaojiegege123456 CSDN
(2)支持向量机通俗导论(理解SVM的三层境界) http://blog.csdn.net/v_july_v/article/details/7624837
(3)A Tutorial on Support Vector Regression, Alex J. Smola and Bernhard Scholkopf

©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值