第一次接触到核函数还是在大一学线代的时候,现在在一些应用领域经常看到它的身影,在网络上学习一番后,结合高人的叙述和自己的理解写下这个学习记录。

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


1、回答作者:王赟 Maigo

链接:https://www.zhihu.com/question/24627666/answer/28440943
来源:知乎

我来举一个核函数把低维空间映射到高维空间的例子。

下面这张图位于第一、二象限内。我们关注红色的门,以及“北京四合院”这几个字下面的紫色的字母。我们把红色的门上的点看成是“+”数据,紫色字母上的点看成是“-”数据,它们的横、纵坐标是两个特征。显然,在这个二维空间内,“+”“-”两类数据不是线性可分的。

我们现在考虑核函数 K ( v 1 , v 2 ) = < v 1 , v 2 > 2 K(v_1,v_2) = <v_1,v_2>^2 K(v1​,v2​)=<v1​,v2​>2,即“内积平方”。
这里面 v 1 = ( x 1 , y 1 ) , v 2 = ( x 2 , y 2 ) v_1=(x_1,y_1), v_2=(x_2,y_2) v1​=(x1​,y1​),v2​=(x2​,y2​)是二维空间中的两个点。

这个核函数对应着一个二维空间到三维空间的映射,它的表达式是:
P ( x , y ) = ( x 2 , 2 x y , y 2 ) P(x,y)=(x^2,\sqrt{2}xy,y^2) P(x,y)=(x2,2 ​xy,y2)
可以验证,在P这个映射下,原来二维空间中的图在三维空间中的像是这个样子:

(前后轴为x轴,左右轴为y轴,上下轴为z轴)
注意到绿色的平面可以完美地分割红色和紫色,也就是说,两类数据在三维空间中变成线性可分的了。
而三维中的这个判决边界,再映射回二维空间中是这样的:


这是一条双曲线,它不是线性的。

=============================================

如上面的例子所说,核函数的作用就是隐含着一个从低维空间到高维空间的映射,而这个映射可以把低维空间中线性不可分的两类点变成线性可分的。

当然,我举的这个具体例子强烈地依赖于数据在原始空间中的位置。
事实中使用的核函数往往比这个例子复杂得多。它们对应的映射并不一定能够显式地表达出来;它们映射到的高维空间的维数也比我举的例子(三维)高得多,甚至是无穷维的。这样,就可以期待原来并不线性可分的两类点变成线性可分的了。

在机器学习中常用的核函数,一般有这么几类,也就是LibSVM中自带的这几类:

  1. 线性: K ( v 1 , v 2 ) = < v 1 , v 2 > K(v_1,v_2)=<v_1,v_2> K(v1​,v2​)=<v1​,v2​>
  2. 多项式: K ( v 1 , v 2 ) = ( γ < v 1 , v 2 > + c ) n K(v_1,v_2)=(\gamma<v_1,v_2>+c)^n K(v1​,v2​)=(γ<v1​,v2​>+c)n
  3. Radial basis function: K ( v 1 , v 2 ) = exp ⁡ ( − γ ∣ ∣ v 1 − v 2 ∣ ∣ 2 ) K(v_1,v_2)=\exp(-\gamma||v_1-v_2||^2) K(v1​,v2​)=exp(−γ∣∣v1​−v2​∣∣2)
  4. Sigmoid: K ( v 1 , v 2 ) = tanh ⁡ ( γ < v 1 , v 2 > + c ) K(v_1,v_2)=\tanh(\gamma<v_1,v_2>+c) K(v1​,v2​)=tanh(γ<v1​,v2​>+c)

我举的例子是多项式核函数中 γ = 1 , c = 0 , n = 2 \gamma=1, c=0, n=2 γ=1,c=0,n=2的情况。

在实用中,很多使用者都是盲目地试验各种核函数,并扫描其中的参数,选择效果最好的。至于什么样的核函数适用于什么样的问题,大多数人都不懂。很不幸,我也属于这大多数人,所以如果有人对这个问题有理论性的理解,还请指教。

=============================================

核函数要满足的条件称为Mercer’s condition。
由于我以应用SVM为主,对它的理论并不很了解,就不阐述什么了。
使用SVM的很多人甚至都不知道这个条件,也不关心它;有些不满足该条件的函数也被拿来当核函数用。


2、回答作者:文鸿郴

链接:https://www.zhihu.com/question/24627666/answer/28460490
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

核函数和映射没有关系。

一般英文文献对Kernel有两种提法,一是Kernel Function,二是Kernel Trick。从Trick一词中就可以看出,这只是一种运算技巧而已,不涉及什么高深莫测的东西。

具体Trick的意义,就是简化计算二次规划中间的一步内积计算。也即中间步骤有一步必须求得 ϕ ( x i ) ′ ϕ ( x i ) \phi(x_i)'\phi(x_i) ϕ(xi​)′ϕ(xi​),而我们可以定义核函数 K ( x i , y i ) = ϕ ( x i ) ′ ϕ ( x i ) K(x_i,y_i)=\phi(x_i)'\phi(x_i) K(xi​,yi​)=ϕ(xi​)′ϕ(xi​),使得我们在不需要显式计算每一个 ϕ ( x i ) ′ \phi(x_i)' ϕ(xi​)′、甚至不需要知道 ϕ ( ⋅ ) \phi(·) ϕ(⋅)长什么样的情况下,直接求出 ϕ ( x i ) ′ ϕ ( x i ) \phi(x_i)'\phi(x_i) ϕ(xi​)′ϕ(xi​)的值来。

也就是说,核函数、内积、相似度这三个词是等价的。因为inner product其实就是一种similarity的度量。核函数和映射是无关的。

但为什么这么多的认知中核函数是一种映射呢。一来这两件事一般先后进行,所以常常被混为一谈。二来就像前面所述,核函数让人们不需要知道长什么样,不需要知道怎么选取映射,就能够算出内积。因此这常常被认作是一种implicit mapping。这是由Mercer Theorem(任何半正定的函数都可以作为核函数) 保证的,即只要核函数满足一定条件,那么映射空间一定存在。


3、有价值的回答

梦想是养只羊驼
整个story可以这么说:那些搞svm,ridge regression的人,发现自己的算法对数据集的效果不好,他们认为这可能是因为数据集线性不可分。另外他们发现他们搞出的式子里,出现的都是两个数据点的内积。他们想,我们要是把原始数据集映射到高维可能就线性可分啦,但是这可是内积啊,而且怎么找映射函数呢?这时候Mercer Theorem出现了,简直就是黑暗中的一缕阳光啊!好的,那就构造一个kernel function吧,根据Mercer Theorem,那些原始维度的内积转换到高维内积只需要把数据点带进核函数就ok啦。这不就简单了?结果在数据集上居然很好!!!然后这种方法就有很多时髦名称了。大家都follow么。

风断桥
按我自己理解就是,处理低维非线性可分数据一般的步骤应该是先找到映射函数(映射到高维空间去),然后再高维空间里面通过内积(其实内积仅仅是其中一种在高维空间里面度量其数据相互之间距离的一种手段,这里的距离可能定义不准确,可以这么说,算是度量的一种标准吧),然后我在很多论文里面就发现,还是以RBF为例,往往都是说原始数据通过一个核函数,然后乘以一个权值,输出最后预测结果…然后接下来总会有解释说通过了核函数将原始数据映射到高维空间,从而实现了数据的线性分类!我基本上觉得这种解释就是一种敷衍,完全不是对其方法的一种解释,反而恰恰是对原始方法的一种误解,然而还有好多期刊也好像不太在意这样子的解释。听完大家的看法之后,帮助理解了不少,我整理整理,谢谢各位!
——文鸿郴
你的理解是对的。先映射,再写出优化问题,求解过程中用到内积,内积计算时用到核函数简化计算

核函数在SVM的应用,核函数到底是什么相关推荐

  1. SVM使用高斯核函数(RBF)时的超参数C和gamma如何选择

    C C是惩罚系数,即对样本分错的宽容度.C越高,说明越不能容忍出现分错,容易过拟合.C越小,容易欠拟合.C过大或过小,泛化能力变差. gamma 千万要注意地是这个,否则容易死记硬背,即gamma和σ ...

  2. sklearn svm如何选择核函数_使用python+sklearn实现成对度量、相关性和核函数

    sklearn.metrics.pairwise子模块实现了评估样本集的成对距离或相关性.此模块包含距离度量和内核.这里对这两个问题作了简要的总结.距离度量是函数d(a, b),如果对象a和b被认为比 ...

  3. sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比

    机器学习 xueyifeiyun1989zx,公众号:围着围巾的小黑机器学习之监督学习实战 前文我们提到机器学习中的监督学习,其中有一个模型是我们提到的但是没有训练测试的,叫做支持向量机(简称SVM) ...

  4. 基于sklearn的软硬间隔以及各类核函数的SVM实现

    在西瓜数据集 3.0α 上分别用线性核和高斯核训练一个 SVM,并比较其支持向量的差别. 数据集下载地址: https://amazecourses.obs.cn-north-4.myhuaweicl ...

  5. R语言使用caret包的train函数构建多项式核SVM模型(多项式核函数)模型构建分类模型、trainControl函数设置交叉验证参数、自定义调优评估指标

    R语言使用caret包的train函数构建多项式核SVM模型(多项式核函数)模型构建分类模型.trainControl函数设置交叉验证参数.自定义调优评估指标.tuneLength参数和tuneGri ...

  6. 核函数及SVM核函数的选择

    核函数: 实际应用中,我们经常遇到数据线性不可分问题,可将数据从低维空间映射到高维空间,使数据在高维空间线性可分,之后在优化时需要计算内积,复杂度很高.这个时候就可以使用核函数,而核函数准确地说是一种 ...

  7. 【机器学习算法-python实现】svm支持向量机(3)—核函数

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景知识    前面我们提到的数据集都是线性可分的,这样我们可以用SMO等方法找到支持向量的集合.然而当我们 ...

  8. sklearn svm如何选择核函数_文本挖掘篇|利用SVM进行短文本分类

    何为数据挖掘,顾名思义就是从大量数据中挖掘或抽取出知识.在实际中,进行数据挖掘的数据不仅仅有数值型数据,还有图片型数据,文本型数据等.而所谓文本挖掘,就是从大量文本数据中,提取出对信息使用者有价值的信 ...

  9. matlab svm核函数选择,SVM分类核函数及参数选择比较.pdf

    Compu~r Engineering口 4 胁日ff0 计算机工程与应用 SVM分类核函数及参数选择比较 奉国和 FENG Guohe 华南师范大学 经济管理学院 信息管理系,广州 5 10006 ...

最新文章

  1. 构造方法,this,super关键字
  2. 【spring boot】 mybatis配置双数据源/多数据源
  3. python 学习资源收集汇总
  4. 编写Java程序 堆栈的接口_java - 错误:调用实现接口的通用方法时,java.lang.AbstractMethodError - 堆栈内存溢出...
  5. 一般软件工程师怎样拥有更多的资产
  6. Python中的抽象
  7. 盘点AI江湖中,清华人的“无问西东”
  8. 全国信息流广告优化师交流群,不容错过!赶紧加入!
  9. java nginx 502_Nginx 中 502 和 504 错误详解
  10. 电子签到系统有哪些不同体验?
  11. 雷柏V500s和V500的win键无效
  12. 扫描二维码下载app,判断是Android还是ios,并跳转到不同的下载地址
  13. 河海大学计算机辅助,黄瑞
  14. CSS3 2D转换3D转换
  15. 攻防世界xff和refereer
  16. 【Vue 快速入门系列】Vue数据实现本地存储、自定义事件绑定、全局事件总线、$nextTick的使用
  17. Python3 利用Virustotal API 获取json格式的分析报告
  18. 国家省份城市级联菜单
  19. horizon学习小结
  20. Windows系列原版系统镜像下载

热门文章

  1. 怎样通过修改folder.htt来实现文件夹加密码
  2. String是基本数据类型吗?
  3. Spring Boot 中使用 Hikari连接各类数据源
  4. 从0到N建立高性价比的大数据平台
  5. 华为离职副总徐家骏给任正非的辞职信,振聋发聩
  6. 【云原生】企业级容器管理平台Openshift介绍
  7. Spring入门基础
  8. js挂马,臭名昭著nu99.com
  9. 学习心得(华清远见)
  10. python--斗地主