“支持向量机系列”的番外篇二: Kernel II
来源:互联网 发布:网络歌曲主的爱 编辑:程序博客网 时间:2024/06/04 19:56
原文地址http://blog.pluskid.org/?p=723
http://cos.name/2014/05/svm-series-add-2-kernel-ii/
原文链接请点击这里
在之前我们介绍了如何用 Kernel 方法来将线性 SVM 进行推广以使其能够处理非线性的情况,那里用到的方法就是通过一个非线性映射 ϕ(⋅)将原始数据进行映射,使得原来的非线性问题在映射之后的空间中变成线性的问题。然后我们利用核函数来简化计算,使得这样的方法在实际中变得可行。不过,从线性到非线性的推广我们并没有把 SVM 的式子从头推导一遍,而只是直接把最终得到的分类函数
f(x)=n∑i=1αiyi⟨xi,x⟩+b
中的内积换成了映射后的空间中的内积,并进一步带入了核函数进行计算。如果映射过后的空间是有限维的,那么这样的做法是可行的,因为之前的推导过程会一模一样,只是特征空间的维度变化了而已,相当于做了一些预处理。但是如果映射后的空间是无限维的,还能不能这么做呢?答案当然是能,因为我们已经在这么做了嘛!但是理由却并不是理所当然的,从有限到无限的推广许多地方都可以“直观地”类比,但是这样的直观性仍然需要严格的数学背景来支持,否则就会在一些微妙的地方出现一些奇怪的“悖论”(例如比较经典的芝诺的那些悖论)。当然这是一个很大的坑,没法填,所以这次我们只是来浮光掠影地看一看核方法背后的故事。
回忆一下原来我们做的非线性映射
从而成为一个赋范向量空间。范数可以用于定义一个度量
从而成为一个度量空间。如果这样的空间在这个度量下是完备的,那么这个空间叫做 Hilbert Space 。简单地来说,Hilbert Space 就是完备的内积空间。最简单的例子就是欧氏空间
我们这里的 RKHS 就是一个函数空间。实际上,在这里我们有一个很有用的性质,就是维度相同的 Hilbert Space 是互相同构的——也就是说空间的各种结构(包括内积、范数、度量和向量运算等)都可以在不同的空间之间转换的时候得到保持。有了这样的性质,就可以让我们不用去关心 RKHS 中的点到底是什么.
将映射记为
其中第二条性质就叫做 reproducing property ,也是“再生核”名字的来源。至于字面上为什么这么叫,我也不清楚。也许是说元素
由核的再生性质,我们之前的用于计算
再生核有很多很好的性质,比如正定性(在线性代数里这样的性质通常称为“半正定”),也就是说对任意x1,…,xn∈X和ξ1,…,ξn∈R都有
这是很好证明的,按照核函数的再生性质写成刚才的内积形式,然后把系数拿到内积里面去,上面那个式子就等于
∥∑ni=1ξiK(⋅,xi)∥2,根据范数的性质,也就非负了。
到这里,铺垫已经够多了,于是让我们回到 SVM ,这次我们不是直接偷工减料在最终得到的分类函数上做手脚,而是回到线性 SVM 的最初推导。
当然,第一步我们要用刚才定义的映射 ϕϕ 将数据从原始空间 XX 映射到 RKHS HH 中,简单起见,我们用 fi(⋅)fi(⋅)来表示 K(⋅,xi)K(⋅,xi)。
在这里,由于我们讨论的空间
换句话说,线性函数可以由向量内积表示,这和我们熟知的有限维欧氏空间中是一样的。只是要表示超平面还得再加上一个截距
这个样子的函数(泛函)严格来说称作仿射函数(泛函)。同我们在第一篇中类似,我们可以定义 margin ,得到 geometrical margin 为
类似于原来的推导,我们最终会得到一个如下的目标函数
形式上和以前一样,只是把 xi 换成了 fi ,w 换成了 g ,但是现在我们要求的参数 g是在 Hilbert Space 中,特别当 H 是无穷维的时候,是没有办法直接使用数值方法来求解的。即使可以转到 dual 优化推导,但是里面涉及到对无穷维向量的求导之类的问题,我还不知道是不是能直接推广。不过幸运的是,我们在这里可以再把问题转化到有限维空间中。
这需要借助一个叫做 Representer Theorem 的定理,该定理说明,上面这个目标函数(还包括很大一类其他的目标函数)的最优解 g∗ 可以写成如下的形式:
g∗=n∑i=1aifi
换句话说,可以由这 n 个训练数据(有限集)张成。定理的证明是很简单的,记 H0为 {f1,…,fn}张成的子空间,其正交补记为 H⊥0 ,则任意的 f∈H都可以唯一地表示成 f=f0+f⊥0 ,其中 f0∈H0、f⊥0∈H⊥0 ,因此
g∗=g∗0+g∗⊥0
由于 g∗⊥0 垂直于 f1,…,fn,因此
⟨fi,g∗⟩=⟨fi,g∗0+g∗⊥0⟩=⟨fi,g∗0⟩+0
因此,g∗⊥0 部分的取值对于目标函数中的约束条件并不产生影响,可以任意定。另一方面,考虑目标函数本身,我们有
∥g∗∥2=∥g∗0+g∗⊥0∥2=∥g∗0∥2+∥g∗⊥0∥2
最后一个等式是由于两者相互垂直而得到的(也就是勾股定理的推广啦),得到这个形式之后,再注意到我们是希望最小化 ∥g∗∥2 ,其中 g∗⊥0是可以任意取值的,而范数∥g∗⊥0∥2 又是非负的,所以在最小值的时候我们必定有 ∥g∗⊥0∥2=0,从而 g∗⊥0=0,也就证明了 g∗∈H0 。
这样一来,问题就从在一个无穷维的 Hilbert Space 中找一个最优的 g∗ 转化为了在一个 n 维的欧氏空间中找一个最优的系数 a∗ ,又回到了我们熟悉的问题,目标函数也变成了下面的样子:
12∥g∥2=12∥∥∥n∑i=1aifi∥∥∥2=12n∑i,j=1aiajK(xi,xj)=12aTKa
这里矩阵 (K)ij=K(xi,xj) 就是 Kernel Gram Matrix 。而约束条件也可以相应地写成
1≤yi(⟨fi,g⟩+b)=yi(⟨fi,n∑j=1ajfj⟩+b)=yi(aTKi+b)
这里 i=1,…,n ,而 Ki表示矩阵 K 的第 i列。所以回到了最初的线性 SVM 的 Quadratic Programming 问题。当然,形式上有一些差别,另外,原来的线性 SVM 的问题的维度是原始数据空间 X 的维度,而这里的问题维度是等于数据点的个数 n ,这是 RKHS H 的一个子空间 H0 。此外,原来的线性 SVM 不能处理 X 中的非线性问题,但是现在经过非线性映射之后,(理想情况下)数据应该变得线性可分了。当然,即使不能完全线性可分,我们也可以使用之前说过的 slack variable 的方法来放松约束。而问题的数值求解,也和以前类似,一方面可以直接使用二次优化的包求解,另一方面则可以通过 dual 优化的方式来完成——得到的结果应该跟我们之前偷懒直接在最终结果上把内积进行替换所得的结果是一样的。
最后稍微补充一下:在刚才的介绍中我们看起来好像是先确定了 RKHS 之后再找出对应的再生核的,但是在实际中,通常是先设计出一个核函数(或者说通常都是直接使用几个常见的核函数),然后对应的 RKHS 就自然地确定下来了。关于 RKHS 还有许多的内容,但是没有办法全部讲了。在传统的 Kernel 方法应用中,通常只要注意到是否可以全部表示为内积运算就可以尝试使用 kernel 方法了,许多常见的算法(例如 Least-Square Regression 、PCA 等)都是可以用核方法来扩展的,在这里 Representer Theorem 将会是重要的一环。
除此之外,进来还有不少在 RKHS 里衡量统计独立性的工作,又不是只是像传统的 kernel trick 那么简单了,说明 RKHS 还是包含了不少有趣的话题的。
- “支持向量机系列”的番外篇二: Kernel II
- 支持向量机:Kernel II
- 支持向量机:Kernel II
- [Free MInd]支持向量机:Kernel II
- 支持向量机_7:Kernel II
- 支持向量机系列三:Kernel
- 支持向量机: Kernel
- 支持向量机: Kernel
- 支持向量机: Kernel
- 支持向量机:Kernel
- 支持向量机: Kernel
- 【理论】支持向量机7:Kernel II —— 核方法的一些理论补充
- 转:支持向量机: Kernel
- 支持向量机_3: Kernel
- 支持向量机系列
- 支持向量机系列
- “支持向量机系列”的番外篇一: Duality
- [Free Mind]支持向量机: Kernel
- 结构体内存对齐的补充说明与总结
- HDU 5795 A Simple Nim SG函数打表找规律
- 支持向量机系列五:Numerical Optimization
- MongoDB增加用户认证: 增加用户、删除用户、修改用户密码、读写权限、只读权限
- 纪念帖
- “支持向量机系列”的番外篇二: Kernel II
- Axis2介绍和例子 -- 完整版
- GDT,LDT,GDTR,LDTR 详解
- 用回调函数实现冒泡排序
- php--多维数组排序函数array_multisort
- mongoDB数据库设置用户名及密码-windows
- C++ string的一个误用
- 使用Python实现Hadoop MapReduce程序
- 数据结构实验之查找二:平衡二叉树