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到底分得对不对就知道它原本可不可分了。

所以最终的结论是,映射的结果并不是最主要的,唯一用来检验这个核函数好不好的就是它能不能将样本线性分开,这往往和它的维度有关,和具体的分布规律还真没什么关系。

那决策边界是怎么画出来的?理论上,应该是先在高维空间求得决策平面、再映射回来。但是有问题是:

  1. 映射不一定是可逆的,数据能映射过去,不一定能映射回来
  2. 即使可逆,像上面说的RBF的映射函数,这个怎么求逆,那可是无限维的。

所以真相往往赤裸裸,我们看到的图像上的决策边界,其实是:

来源,知乎王赟

从概念上说,低维空间中的这个非线性判决边界,就是高维空间中的线性判决边界映射回来的结果。

但从实际操作上来说,如果你想画出低维空间中的这个非线性判决边界,其实很简单,用不着去想高维空间:只要用一定密度的格点在低维空间中采样,把每一个样本进行分类,一类染成红色,一类染成蓝色,判决边界就自然显现出来了。

没错,就是一个点一个点画出了的。

还有一个问题,李航的书中提到,一个核函数对应的其实是不止一个映射和特征空间。

那为什么他们的分类表现是一样的呢?要解释这个问题,就要用我们上面刚刚说了是马后炮的映射来举例子了,想象在一个特征空间上有一个决策平面和一些样本,我们将他们映射到另外一个维度的特征空间上,他们的相对位置总不能变吧,所以对数据的判定也会维持原样。

懂了,不纠结了,老老实实用就行了。每次各种核函数试一遍,选表现最好的。

机器学习-SVM-核函数的更多相关文章

  1. 文本分类学习 (五) 机器学习SVM的前奏-特征提取(卡方检验续集)

    前言: 上一篇比较详细的介绍了卡方检验和卡方分布.这篇我们就实际操刀,找到一些训练集,正所谓纸上得来终觉浅,绝知此事要躬行.然而我在躬行的时候,发现了卡方检验对于文本分类来说应该把公式再变形一般,那样 ...

  2. libsvm的安装,数据格式,常见错误,grid.py参数选择,c-SVC过程,libsvm参数解释,svm训练数据,libsvm的使用详解,SVM核函数的选择

    直接conda install libsvm安装的不完整,缺几个.py文件. 第一种安装方法: 下载:http://www.csie.ntu.edu.tw/~cjlin/cgi-bin/libsvm. ...

  3. 【机器学习】SVM核函数

    知识预备 1. 回顾:logistic回归出发,引出了SVM,即支持向量机[续]. 2.  Mercer定理:如果函数K是上的映射(也就是从两个n维向量映射到实数域).那么如果K是一个有效核函数(也称 ...

  4. 机器学习——SVM详解(标准形式,对偶形式,Kernel及Soft Margin)

    (写在前面:机器学习入行快2年了,多多少少用过一些算法,但由于敲公式太过浪费时间,所以一直搁置了开一个机器学习系列的博客.但是现在毕竟是电子化的时代,也不可能每时每刻都带着自己的记事本.如果可以掏出手 ...

  5. [机器学习] SVM——Hinge与Kernel

    Support Vector Machine [学习.内化]--讲出来才是真的听懂了,分享在这里也给后面的小伙伴点帮助. learn from: https://www.youtube.com/wat ...

  6. 5.SVM核函数

    核函数(Kernels) 定义 1.1 (核或正定核) 设是中的一个子集,称定义在上的函数是核函数,如果存在一个从到Hilbert空间的映射 使得对任意的,都成立.其中表示Hilbert空间中的内积. ...

  7. SVM核函数与软间隔

    核函数 在上文中我们已经了解到使用SVM处理线性可分的数据,而对于非线性数据需要引入核函数的概念它通过将数据映射到高维空间来实现线性可分.在线性不可分的情况下,支持向量机通过某种事先选择的非线性映射( ...

  8. 【模式识别】SVM核函数

    下面是几种经常使用的核函数表示: 线性核(Linear Kernel) 多项式核(Polynomial Kernel) 径向基核函数(Radial Basis Function) 也叫高斯核(Gaus ...

  9. 小刘的机器学习---SVM

    前言: 这是一篇记录小刘学习机器学习过程的随笔. 正文: 支持向量机(SVM)是一组用于分类, 回归和异常值检测的监督学习方法. 在分类问题中,SVM就是要找到一个同时离各个类别尽可能远的决策边界即最 ...

  10. 程序员训练机器学习 SVM算法分享

    http://www.csdn.net/article/2012-12-28/2813275-Support-Vector-Machine 摘要:支持向量机(SVM)已经成为一种非常受欢迎的算法.本文 ...

随机推荐

  1. ping包的checksum校验和

    PING包发送里面有一个比较关键的就是checksum即校验和 checksum本来就是ICMP包内的数据 怎么又从ICMP包开始计算?后来看了一下文档,就是就算ICMP的时候checksum本身 的 ...

  2. DP&图论 DAY 3 上午

    DP&图论  DAY 3  上午 状态压缩dp >状态压缩dp ◦状态压缩是设计dp状态的一种方式.◦当普通的dp状态维数很多(或者说维数与输入数据有关),但每一维总量很少是,可以将多维 ...

  3. Steps 步骤条

    引导用户按照流程完成任务的分步导航条,可根据实际应用场景设定步骤,步骤不得少于 2 步. 基础用法 简单的步骤条. 设置active属性,接受一个Number,表明步骤的 index,从 0 开始.需 ...

  4. 批量替换word内容

    有一个需求需要把word中的一段文档的编号批量替换 如,把133-183批量的替换成31-81,需要批量的替换word,脚本如下 from docx import Document import os ...

  5. linuxs上mono

    当前,在Linux系统上架设ASP.NET网站.建设WEB应用工程项目已经在国内流行起来,而“Mono+Jexus”架构模式是Linux承载ASP.NET企业级应用的极为重要的架构方式,这种架构中,J ...

  6. Python获取两个文件的交集、并集、差集

    题记:朋友在处理数据时,需要解决这方面的问题,所以利用她给的代码,自己重新梳理了下,并成功运行. 代码如下: # coding:utf-8 s1 = set(open(r'C:\\Users\\yan ...

  7. 性能测试之JMeter远程模式

    性能测试之JMeter远程模式 事实上,你的JMeter客户端机器是不能表现出完美的压力请求,来模拟足够多的用户或由于网络限制去向服务施加压力,一种解决方法是通过一个JMeter去控制多个/远程JMe ...

  8. kubernetes学习:CKA考试题

    1. 列出环境内所有的pv 并以 name字段排序(使用kubectl自带排序功能) kubectl get pv --sort-by=.metadata.name 2. 列出指定pod的日志中状态为 ...

  9. 关于ckeditor粘贴图片自动上传

    在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案. 其原理为一下步骤: 监听粘贴事件:[用于插入图片] 获取光标位置:[记录图片插入位置] 获取剪切板内容: ...

  10. Python之异常处理合集

    PermissionError: [Errno 13] Permission denied open(filePath)中的filePath是一目录路径,而非目录路径 先前打开的file文件对象未被关 ...