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的更多相关文章

  1. AD分类论文研读(1)

    转移性学习对阿尔茨海默病分类的研究 原文链接 摘要 将cv用于研究需要大量的训练图片,同时需要对深层网络的体系结构进行仔细优化.该研究尝试用转移学习来解决这些问题,使用从大基准数据集组成的自然图像得到 ...

  2. SVM多核学习方法简介

    作者:Walker SVM是机器学习有监督学习的一种方法,常用于解决分类问题,其基本原理是:在特征空间里寻找一个超平面,以最小的错分率把正负样本分开.因为SVM既能达到工业界的要求,机器学习研究者又能 ...

  3. SVM的点滴

    SVM 1. 普通SVM的分类函数可表示为: 其中ai为待优化参数,物理意义即为支持向量样本权重,yi用来表示训练样本属性,正样本或者负样本,为计算内积的核函数,b为待优化参数. 其优化目标函数为: ...

  4. 支持向量机SVM 参数选择

    http://ju.outofmemory.cn/entry/119152 http://www.cnblogs.com/zhizhan/p/4412343.html 支持向量机SVM是从线性可分情况 ...

  5. SVM核技巧之终极分析

    参考文献: http://www.blogjava.net/zhenandaci/archive/2009/03/01/257237.html http://www.cnblogs.com/jerry ...

  6. 【基础知识六】支持向量机SVM

    开发库: libsvm, liblinear      GitHub地址 SVM难点:核函数选择 一.基本问题 找到约束参数ω和b,支持向量到(分隔)超平面的距离最大:此时的分隔超平面称为“最优超平面 ...

  7. [转] 从零推导支持向量机 (SVM)

    原文连接 - https://zhuanlan.zhihu.com/p/31652569 摘要 支持向量机 (SVM) 是一个非常经典且高效的分类模型.但是,支持向量机中涉及许多复杂的数学推导,并需要 ...

  8. 机器学习经典算法详解及Python实现--基于SMO的SVM分类器

    原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector  ...

  9. 一步一步搞懂支持向量机——从牧场物语到SVM(上)

    之前在数据挖掘课程上写了篇关于SVM的"科普文",尽量通俗地介绍了SVM的原理和对各公式的理解.最近给正在初学机器学习的小白室友看了一遍,他觉得"很好,看得很舒服&quo ...

随机推荐

  1. centos 7 安装 BeautifulSoup 和requests

    安装beautifulsoup wget https://www.crummy.com/software/BeautifulSoup/bs4/download/4.5/beautifulsoup4-4 ...

  2. View初探

    View初探 学习自 <Android开发艺术探索> View漫谈 Activity构成了我们的界面但是知识一个空壳子,Activity与View相结合才构成了我们丰富多彩的界面,并且为了 ...

  3. 网站截图工具EyeWitness

    网站截图工具EyeWitness   在网页分析和取证中,往往需要大批量的网站截图.Kali Linux提供了一款网站批量截图工具EyeWitness.该工具不仅支持网址列表文件,还支持Nmap和Ne ...

  4. C语言sscanf和sprintf输入输出使用及Strlen、Memset解释

    sscanf() - 从一个字符串中读进与指定格式相符的数据.   swscanf()- 用于处理宽字符字符串,和sscanf功能相同    通过学习和使用个人认为,在字符串格式不是很复杂,但是也并不 ...

  5. 关于操作Access数据库jdk选择问题

    关于操作Access数据库,使用jdk64位无法通过ODBC无法获取数据,只能通过jdk32位进行开发.

  6. Codeforces Round #511 (Div. 2)

    Codeforces Round #511 (Div. 2) #include <bits/stdc++.h> using namespace std; int n; int main() ...

  7. LPC43xx State Configurable Timer : SCT

  8. OpenOCD Debug Adapter Configuration

    Correctly installing OpenOCD includes making your operating system give OpenOCD access to debug adap ...

  9. 飘逸的python - 中文编码长度有趣的现象

    最近在做验证用户姓名的功能时发现这样一个现象.   >>len(u'打怪者') #unicode 3 >>len(u'打怪者'.encode('gbk')) #gbk 6 &g ...

  10. 在CentOS 6 的cron/crontab中使用wine运行exe程序

    几个月前服务器的OS从Ubuntu 10.04转为CentOS 6.3,装好wine后手动运行shell脚本可以正常运行指定的exe程序(脚本和Ubuntu中的一样),于是就直接修改crontab定时 ...