从 SVM 到多核学习 MKL
SVM是机器学习里面最强大最好用的工具之一,它试图在特征空间里寻找一个超平面,以最小的错分率把正负样本分开。它的强大之处还在于,当样本在原特征空间中线性不可分,即找不到一个足够好的超平面时,可以利用核(kernel)函数,将特征映射到希尔伯特(Hilbert)空间。后者一般维度更高,通过这样的映射之后,样本在新的特征空间中便是线性可分的了。
记得刚刚学习SVM的时候,对“核”这个词很恐惧,一直理解不了它究竟是什么。在看MKL的时候,又经常会遇到“核矩阵”(kernel matrices)这个词。现在说一下我的理解。
刚才说过,我们通过核把特征从低维空间映射到高维空间。举例来说,我们看下面的多项式核函数:

其中x,y是两个样本,他们的特征分别是(x1,x2),(y1,y2),通过这个核函数,可以看到二维特征被映射到了六维特征。而且我们也可以理解,这个映射其实就是用一个矩阵A乘以原来的特征(x1,x2)得到的。矩阵A也就是核矩阵了。一个核函数对应一个核矩阵。
我们学过的SVM都是单核(single kernel)的,在使用的时候,需要我们根据经验或试验来选择用哪种核函数、怎样指定它的参数,这样很不方便。另一方面,实际应用当中,特征往往不是single domain的,而是异构的。拿图像分类来说,我们可能用到颜色相关的特征、纹理相关的特征、空间相关的特征,这几类特征对应的最佳的核函数未必相同,让他们共用同一个核函数,未必能得到最优的映射。对这些问题的思考,就引出了MKL。
简单地说,我们给定一些base kernels,比如linear,Polynomial,RBF,Sigmoid,对于每一个,可以指定多组参数,也就是一共有M个base kernels,我们想用它们的线性组合来作为最终的核函数。通过training,得到这个线性组合中每个kernel的权重d(weight)。由于融合了各种kernel,可以照顾到异构的特征;由于自动学习权重,我们就不需要费脑子想究竟用哪一个核哪一种参数,把可能的核、参数都拿过来,组合着来用就可以了。
与传统的单核SVM的不同,就是除了要学习w、b之外,还要学习上面提到的权重d。这样的话,decision function, cost function都会有些变化,棘手的是,cost function 的求解不再是一个convex problem,传统的优化方法就不适用了。近年来MKL比较热,很多论文都是在优化方法上面下功夫,企图达到更快的收敛速度、更好的解。具体的优化方法就比较复杂了,略去。
多核线性组合,最经典的是simpleMKL,也被作为MKL的具体实现,应用在了计算机各领域。为了使MKL应用地更广,应对各种特征组合、各种样本量级,后来又有人提出了GMKL,G即Generalized,最优化方法用的是PGD(Projected Gradient Descend)。为了改进收敛效果,Vishwanathan又提出SPG-GMKL(Spectral Projected Gradient),同时提出了多核的product组合。SPG-GMKL也被后来者视作state-of-art。
除了MKL,还有一个MKB(Multiple Kernel Boosting),大连理工大学的卢湖川有几篇论文就是用MKB做跟踪。论文生成MKB是基于MKL的,我觉得不然。请看MKB的框架图:

这里的确用到多核,但每一个SVM都是单核的,根本没有用到多核训练的东西。本质上就是训练出M * N个single-kernel SVM,然后用boosting的方法,把这些弱分类器ensemble为一个强分类器。用到的就是传统的SVM加传统的boosting,只是名字新,实质并无新意。
TKDE12 有一篇 MKBoost论文,这应该是正宗的MKB,它提出了一个框架,并提供了几个formulation,然后与MKL做了比较。论文中全是公式,没有看,以后需要的时候再研究吧。
MKL的经典实现有SimpleMKL,Shogun,SPG-GMKL,SMO-MKL,Google一下就可以找到。
如果只是要使用MKL,可以不看论文中的推导,更多的是看看上述几种实现附带的例子;可以看看MKL在跟踪、图像分类中的使用,输入输出是什么;可以看看这个和这个教程,简单易懂。
从 SVM 到多核学习 MKL的更多相关文章
- AD分类论文研读(1)
转移性学习对阿尔茨海默病分类的研究 原文链接 摘要 将cv用于研究需要大量的训练图片,同时需要对深层网络的体系结构进行仔细优化.该研究尝试用转移学习来解决这些问题,使用从大基准数据集组成的自然图像得到 ...
- SVM多核学习方法简介
作者:Walker SVM是机器学习有监督学习的一种方法,常用于解决分类问题,其基本原理是:在特征空间里寻找一个超平面,以最小的错分率把正负样本分开.因为SVM既能达到工业界的要求,机器学习研究者又能 ...
- SVM的点滴
SVM 1. 普通SVM的分类函数可表示为: 其中ai为待优化参数,物理意义即为支持向量样本权重,yi用来表示训练样本属性,正样本或者负样本,为计算内积的核函数,b为待优化参数. 其优化目标函数为: ...
- 支持向量机SVM 参数选择
http://ju.outofmemory.cn/entry/119152 http://www.cnblogs.com/zhizhan/p/4412343.html 支持向量机SVM是从线性可分情况 ...
- SVM核技巧之终极分析
参考文献: http://www.blogjava.net/zhenandaci/archive/2009/03/01/257237.html http://www.cnblogs.com/jerry ...
- 【基础知识六】支持向量机SVM
开发库: libsvm, liblinear GitHub地址 SVM难点:核函数选择 一.基本问题 找到约束参数ω和b,支持向量到(分隔)超平面的距离最大:此时的分隔超平面称为“最优超平面 ...
- [转] 从零推导支持向量机 (SVM)
原文连接 - https://zhuanlan.zhihu.com/p/31652569 摘要 支持向量机 (SVM) 是一个非常经典且高效的分类模型.但是,支持向量机中涉及许多复杂的数学推导,并需要 ...
- 机器学习经典算法详解及Python实现--基于SMO的SVM分类器
原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector ...
- 一步一步搞懂支持向量机——从牧场物语到SVM(上)
之前在数据挖掘课程上写了篇关于SVM的"科普文",尽量通俗地介绍了SVM的原理和对各公式的理解.最近给正在初学机器学习的小白室友看了一遍,他觉得"很好,看得很舒服&quo ...
随机推荐
- android shareUID
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 安卓中 全局进程,其他应用可以通过 分享UID 方式 和它 在同一个进程中.
- Linux上挂载NTFS分区
1. 简介 本文的目的是提供读者在Linux操作系统上如何mount NTFS分区的文件系统的step-by-step指南.本文包括两个部分: 以只读方式mount NTFS文件系统: 以读写方式 ...
- 自动添加 Qt 开发生成的 exe 所需的依赖环境
双击获取 exe 文件路径 cd 进入文件目录的命令 调用 Qt 自带的软件进行环境配置,命令如下 windeployqt ***.exe 自动配置了依赖环境
- rails 数据迁移 -migration
1.创建一个fruits 项目: rails new fruits -d mysql --skip-bundle 2.修改Gemfile: source 'https://gems.ruby-chin ...
- Hadoop化繁为简(一)-从安装Linux到搭建集群环境
简介与环境准备 hadoop的核心是分布式文件系统HDFS以及批处理计算MapReduce.近年,随着大数据.云计算.物联网的兴起,也极大的吸引了我的兴趣,看了网上很多文章,感觉还是云里雾里,很多不必 ...
- 你的java/c/c++程序崩溃了?揭秘段错误(Segmentation fault)(3)
前言 接上两篇: 你的C/C++程序为什么无法运行?揭秘Segmentation fault (1) 你的C/C++程序为什么无法运行?揭秘Segmentation fault (2) 写到这里,越跟 ...
- 正余弦信号的DFT频谱分析
一般的,对正余弦信号进行採样并DFT运算,画出频谱图,会发现频谱并不干净.这样的现象称为频谱泄漏.由于DFT运算仅仅能是有限序列,突然的截断产生了泄漏. 会有这种特殊情况.当採样截取的刚好是整数个周期 ...
- Programming 2D Games 读书笔记(第二章)
本意还是想了解DirectX的,由于网上拿不到书的pdf文档,幸好有作者的源代码示例,想完整的看一下,基本的游戏需要的点. 下面直接以代码为例,仅用于帮助自身理解 http://www.progr ...
- rtorrent - 强大的命令行BT客户端
NOTE - 文中展示的所有示例和指令都已经在Ubuntu 13.04中测试过. 一. 安装 [root@GY-10000 data]# yum search rtorrent ...
- Oracle JDBC连接服务名、SID和tnsnames.ora配置的多种方式
昨天,领导安排去新服务器上部署项目,给了我数据库地址,服务名称,端口,用户名和密码.结果数据库一直连接不上,日志中的错误提示是监听未找到SID,我才明白原来我jdbc.properties中需要的是S ...