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. Nginx数据结构之红黑树ngx_rbtree_t

    1. 什么是红黑树? 1.1 概述 红黑树实际上是一种自平衡二叉查找树. 二叉树是什么?二叉树是每个节点最多有两个子树的树结构,每个节点都可以用于存储数据,可以由任 1 个节点访问它的左右 子树或父节 ...

  2. redux 第二部分

    redux 的使用方法, 为什么使用 action.js 文件,进行优化代码将其分开,然后我们通过工厂函数的每次返回不同的对象,由于参数是固定的,每次返回的都是事件类型和事件数据,所以我们可以使用一个 ...

  3. android data binding jetpack V 实现recyclerview 绑定

    android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...

  4. leetcode-hard-array- 227. Basic Calculator II

    mycode  29.58% class Solution(object): def calculate(self, s): """ :type s: str :rtyp ...

  5. 解决Git 报错:warning: LF will be replaced by CRLF

    Ruby命令 $ git init $ git add . 系统出现如下错误:warning: LF will be replaced by CRLF 原因分析:CRLF -- Carriage-Re ...

  6. UI的流畅度优化

    Android中所有的界面绘制工作都是在UI线程中进行的,提高UI流畅度的最核心根本在于释放UI线程.即:不在主线程中做耗时的操作. 很多人都知道,耗时的操作要放到子线程中去做,比如访问网络,比如读写 ...

  7. 集成学习之Adaboost算法原理

    在boosting系列算法中,Adaboost是最著名的算法之一.Adaboost既可以用作分类,也可以用作回归. 1. boosting算法基本原理 集成学习原理中,boosting系列算法的思想:

  8. 【VBA】多条件去重

    Function kaidan(txt)Dim i As IntegerDim arrSet d = CreateObject("scripting.dictionary")For ...

  9. oracle 查看表空间使用比

    select b.file_name 物理文件名, b.tablespace_name 表空间, b.bytes / / 大小M, (b.bytes - sum(nvl(a.bytes, ))) / ...

  10. Python聚类算法之基本K均值实例详解

    Python聚类算法之基本K均值实例详解 本文实例讲述了Python聚类算法之基本K均值运算技巧.分享给大家供大家参考,具体如下: 基本K均值 :选择 K 个初始质心,其中 K 是用户指定的参数,即所 ...