机器学习-SVM-核函数
SVM-核函数
在研究了一天的SVM核函数后,我顿悟了一个道理:
研究和使用核函数的人,从一开始的目的就是把data分开而已。高维和映射,都是原来解释操作合理性的,但根本不是进行这一操作的原因
我为什么会这么想?我们举一个例子,就说径向基函数核(RBF)吧,按理来说,它的映射应该是和高斯分布或者径向基函数有点关系吧,事实也的确是这样,知乎上有位大神真的推导出来了这个无线维的函数(https://www.zhihu.com/question/24627666,优达学城),我把结果贴一下:
其中,
你们看这个函数的样子,再看看径向基函数核函数的样子:
你和我说发明这个方法的人是先想到了要得到上面的这个函数,然后才写出了这个核函数,我是不太信的。
所以我觉得,真相就是,他们在发明的时候没有想过“径向基函数会把样本映射到怎样的一个特征空间中,我们的样本因为有怎样的特征所以使用这种方法就是线性可分了”,他们想的可能是,(这里引用知乎”谢锴“的话,我觉得很精辟):
整个story可以这么说:那些搞svm,ridge regression的人,发现自己的算法对数据集的效果不好,他们认为这可能是因为数据集线性不可分。另外他们发现他们搞出的式子里,出现的都是两个数据点的内积。他们想,我们要是把原始数据集映射到高维可能就线性可分啦,但是这可是内积啊,而且怎么找映射函数呢?这时候Mercer Theorem出现了,简直就是黑暗中的一缕阳光啊!好的,那就构造一个kernel function吧,根据Mercer Theorem,那些原始维度的内积转换到高维内积只需要把数据点带进核函数就ok啦。这不就简单了?结果在数据集上居然很好!!!然后这种方法就有很多时髦名称了。大家都follow么。
可以看到,可能他们一开始唯一想到的,就是”怎么找一个对高维空间的映射,爱咋分布咋分布,maybe works”,我甚至有点怀疑之所以普遍使用径向基函数的原因就是因为它是无限维、维度够高。
还有两个人说的也比较直白:
我们如果想进行原本就线性不可分的数据集进行分割,那么选项一是容忍错误分类,即引入Soft Margin;选项二是我们可以对Input Space做Feature Expansion,把数据集映射到高维中去,形成了Feature Space。我们几乎可以认为(引用Caltech的课堂用语“We are safe but not certain”)原本在低维中线性不可分的数据集在足够高的维度中存在线性可分的超平面。
作者:知乎用户链接:https://www.zhihu.com/question/24627666/answer/28460490来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。数据集的分布应该是没法提前选择的对吧,都是给定了数据集再去发掘其中价值。我见过的一种说法是,根本不care你数据集最后能否分开,我只要暴力应用SVM,最后投射回到低维空间,看看label到底分得对不对就知道它原本可不可分了。
所以最终的结论是,映射的结果并不是最主要的,唯一用来检验这个核函数好不好的就是它能不能将样本线性分开,这往往和它的维度有关,和具体的分布规律还真没什么关系。
那决策边界是怎么画出来的?理论上,应该是先在高维空间求得决策平面、再映射回来。但是有问题是:
- 映射不一定是可逆的,数据能映射过去,不一定能映射回来
- 即使可逆,像上面说的RBF的映射函数,这个怎么求逆,那可是无限维的。
所以真相往往赤裸裸,我们看到的图像上的决策边界,其实是:
来源,知乎王赟
从概念上说,低维空间中的这个非线性判决边界,就是高维空间中的线性判决边界映射回来的结果。
但从实际操作上来说,如果你想画出低维空间中的这个非线性判决边界,其实很简单,用不着去想高维空间:只要用一定密度的格点在低维空间中采样,把每一个样本进行分类,一类染成红色,一类染成蓝色,判决边界就自然显现出来了。
没错,就是一个点一个点画出了的。
还有一个问题,李航的书中提到,一个核函数对应的其实是不止一个映射和特征空间。

那为什么他们的分类表现是一样的呢?要解释这个问题,就要用我们上面刚刚说了是马后炮的映射来举例子了,想象在一个特征空间上有一个决策平面和一些样本,我们将他们映射到另外一个维度的特征空间上,他们的相对位置总不能变吧,所以对数据的判定也会维持原样。
懂了,不纠结了,老老实实用就行了。每次各种核函数试一遍,选表现最好的。
机器学习-SVM-核函数的更多相关文章
- 文本分类学习 (五) 机器学习SVM的前奏-特征提取(卡方检验续集)
前言: 上一篇比较详细的介绍了卡方检验和卡方分布.这篇我们就实际操刀,找到一些训练集,正所谓纸上得来终觉浅,绝知此事要躬行.然而我在躬行的时候,发现了卡方检验对于文本分类来说应该把公式再变形一般,那样 ...
- libsvm的安装,数据格式,常见错误,grid.py参数选择,c-SVC过程,libsvm参数解释,svm训练数据,libsvm的使用详解,SVM核函数的选择
直接conda install libsvm安装的不完整,缺几个.py文件. 第一种安装方法: 下载:http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm. ...
- 【机器学习】SVM核函数
知识预备 1. 回顾:logistic回归出发,引出了SVM,即支持向量机[续]. 2. Mercer定理:如果函数K是上的映射(也就是从两个n维向量映射到实数域).那么如果K是一个有效核函数(也称 ...
- 机器学习——SVM详解(标准形式,对偶形式,Kernel及Soft Margin)
(写在前面:机器学习入行快2年了,多多少少用过一些算法,但由于敲公式太过浪费时间,所以一直搁置了开一个机器学习系列的博客.但是现在毕竟是电子化的时代,也不可能每时每刻都带着自己的记事本.如果可以掏出手 ...
- [机器学习] SVM——Hinge与Kernel
Support Vector Machine [学习.内化]--讲出来才是真的听懂了,分享在这里也给后面的小伙伴点帮助. learn from: https://www.youtube.com/wat ...
- 5.SVM核函数
核函数(Kernels) 定义 1.1 (核或正定核) 设是中的一个子集,称定义在上的函数是核函数,如果存在一个从到Hilbert空间的映射 使得对任意的,都成立.其中表示Hilbert空间中的内积. ...
- SVM核函数与软间隔
核函数 在上文中我们已经了解到使用SVM处理线性可分的数据,而对于非线性数据需要引入核函数的概念它通过将数据映射到高维空间来实现线性可分.在线性不可分的情况下,支持向量机通过某种事先选择的非线性映射( ...
- 【模式识别】SVM核函数
下面是几种经常使用的核函数表示: 线性核(Linear Kernel) 多项式核(Polynomial Kernel) 径向基核函数(Radial Basis Function) 也叫高斯核(Gaus ...
- 小刘的机器学习---SVM
前言: 这是一篇记录小刘学习机器学习过程的随笔. 正文: 支持向量机(SVM)是一组用于分类, 回归和异常值检测的监督学习方法. 在分类问题中,SVM就是要找到一个同时离各个类别尽可能远的决策边界即最 ...
- 程序员训练机器学习 SVM算法分享
http://www.csdn.net/article/2012-12-28/2813275-Support-Vector-Machine 摘要:支持向量机(SVM)已经成为一种非常受欢迎的算法.本文 ...
随机推荐
- kali安装与配置
闲来没事,把kali虚拟机重新装到了电脑上,记录下步骤 1.在kali官网(https://www.kali.org/downloads/)直接下载的.ova虚拟机,因为之前从官网下载的iso文件不知 ...
- java连接mysql出现The server time zone value '�й���ʱ��' is unrecognized or represents more than...
在连接的配置文件中,指定数据库位置的末尾加上serverTimezone=UTC ```yml url: jdbc:mysql://localhost:3306/app?serverTimezone= ...
- Ngrinder 源码之Maven 项目
Ngrinder支持Maven结构的测试脚本.使用ScriptHandlerFactory来个脚本选择处理器handler,目前有JythonScriptHandler, GroovyScriptHa ...
- Redis5.0 3台主机三主三从部署Cluster集群
1.下载安装 [root@ip101 redis-5.0.4]# pwd /opt/app/redis-5.0.4 [root@ip101 redis-5.0.4]# ls 00-RELEASENOT ...
- jQuery获取元素值以及设置元素值总结
html(): 1:用户获取元素内的HTML内容,如果元素包含子标签,会以整体的形式返回 2:只获取第一个元素的内容 3:只获取普通元素的内容,表单元素内容无法获取 html(val): 1:用来设置 ...
- openerp学习笔记 视图中字段只变化(on_change)联动其他字段值、选择和过滤
1.修改产品数量时,自动计算产品销售金额.销售成本和销售利润<field name="num" on_change="on_change_product(produ ...
- oracle 查看数据库和表命令
1.su – oracle 不是必需,适合于没有DBA密码时使用,可以不用密码来进入sqlplus界面. 2.sqlplus /nolog 或sqlplus system/manager 或./sql ...
- 六十九:flask上下文之线程隔离的g对象的使用
保存全局对象的g对象g对象是在整个flask应用运行期间都是可以使用的,并且也是和request一样,是线程隔离的,这个对象是专门用来存放开发者自己定义的一些数据,方便在整个flask程序中都可以使用 ...
- 生成iOS-Xcode技术文档
从源码中抽取注释生成文档的专用工具: [doxygen](http://www.stack.nl/~dimitri/doxygen/index.html):适于生成html文档与pdf文档. 支持的语 ...
- django在进行模板render(渲染)时,对传过来的是字典中包含字典应用方法
网上自强学堂参考的 views.py def home(request): info_dict = {'site': u'自强学堂', 'content': u'各种IT技术教程'} return r ...
