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. 19个JavaScript简化编码小技巧

    这篇文章适合任何一位基于JavaScript开发的开发者.我写这篇文章主要涉及JavaScript中一些简写的代码,帮助大家更好理解一些JavaScript的基础.希望这些代码能从不同的角度帮助你更好 ...

  2. VirtualBox——在Win7的HOST上安装配置虚拟机CentOS7

    在Win7为HOST的环境下,安装VirtualBox,在其中安装CentOS7,以Bridge的方式搭建网络环境. 主要配置包括VirtualBox中的网络设置,以及CentOS中的网络配置.另外还 ...

  3. Oracle 性能之 Enq: CF - contention

    Oracle 性能之 Enq: CF - contention Table of Contents 1. 原因 2. 解决问题 2.1. 针对持有锁进程类型处理 2.1.1. 查看持有锁会话的进程类型 ...

  4. java逆向工程-mybatis-generator

    题记:在快速开发的项目中有使用到,这样可以避免冗余工作 声明:参考于https://www.cnblogs.com/smileberry/p/4145872.html 环境:必须先安装maven环境, ...

  5. 内存数据库:memcached与redis技术的对比试验

    本文以高性能nginx服务器为应用背景,想利用缓存技术来减轻系统负荷,加快响应时间,从而增加web服务器的吞吐量. redis是一种分布式内存数据库,memcached是一种内存缓存技术,它们都采用k ...

  6. mongoDB 安装过程

    1.在官方网站下载 mongoDB的安装包,我下载的是3.4.6  系统为win10_64 2.需要安装vc++2015 在安装时发现 win7 系统安装不了. 不得已才安装的win10 3.安装mo ...

  7. 解决oracle 物化视图刷新失败

    oracle 物化视图刷新失败可能原因: 1.视图未建立物化视图日志 2.基表为授权给用户 1.物化视图语法 create materialized view [view_name] refresh ...

  8. Implementing a Dynamic Vector (Array) in C(使用c实现动态数组Vector)

    An array (vector) is a common-place data type, used to hold and describe a collection of elements. T ...

  9. freetye2使用

    使用环境和版本:qt ubuntu 16.04   freetype-2.10.0 1.下载 https://sourceforge.net/projects/freetype/files/freet ...

  10. WebHook钩子

    webhooks整理码云创建远程仓库生成公钥 服务器配置webhooks #!/bin/bashecho ""#输出当前时间date --date='0 days ago' &qu ...