项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

1.核函数把低维空间映射到高维空间

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

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

这个核函数对应着一个二维空间到三维空间的映射,它的表达式是:
P(x,y)=(x2,2xy,y2)P(x,y)=(x^2,\sqrt{2}xy,y^2)P(x,y)=(x2,2​xy,y2)

在P这个映射下,原来二维空间中的图在三维空间中的像是这个样子:

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

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

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

2.常见的核函数

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

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

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

3.核函数的性质

核函数只是满足某些必要条件的函数,其作用要与具体的算法结合才能显示出来。
我来简明说一下SVM中核技巧(kernel trick)的作用,一句话概括的话,就是降低计算的复杂度,甚至把不可能的计算变为可能。
核函数有如下一个性质:
K(x1,x2)=ϕ(x1)∗ϕ(x2)K(x_1,x_2) = \phi (x_1)*\phi(x_2)K(x1​,x2​)=ϕ(x1​)∗ϕ(x2​)

其中ϕ(x)\phi(x)ϕ(x) 是对xxx做变换的函数,有些变换会将样本映射到更高维的空间,如果这个高维空间内x1x_1x1​与x2x_2x2​是线性可分的,那么我们就做了一次成功的变换。核函数是二元函数,输入是变换之前的两个向量,其输出与两个向量变换之后的内积相等(这个性质非常重要)

4.核函数与SVM

求解SVM时,其原始形式(这里我们假设已经对原始的输入做了变换,即输入模型的样本变成了ϕ(x))\phi(x))ϕ(x))

12wTw+C∑1Nβi\frac{1}{2}w^{T}w + C\sum_{1}^{N}{\beta_i} 21​wTw+C1∑N​βi​ s.t.
yi(wTϕ(xi)+b)≥1−βiy_i(w^{T}\phi(x_i)+b) \geq 1 - \beta_iyi​(wTϕ(xi​)+b)≥1−βi​

βi≥0\beta_i \geq 0βi​≥0
i = 1 , 2… N(N为样本个数)

这是个二次规划,因为未知量的个数是参数w的维度,而w的维度与样本的维度相等,即等于变换后ϕ(x)\phi(x)ϕ(x)的的维度,所以其求解复杂度与样本的维数正相关,这意味着,如果我们把原始样本从十维空间变换到一万维的空间,那么求解该问题的时间复杂度提升了1000倍或者更多,我们知道有些变换可以将样本换边到无穷维空间,那么这种变化之后直接是不可求解的。上面的问题可以使用对偶 + 核技巧的组合来解决。

我们也知道,SVM原始形式的对偶问题是:

∑i=1N∑j=1Nαiαjyiyjϕ(xi)Tϕ(xj)−∑i=1Nαi\sum_{i=1}^{N}\sum_{j=1}^{N}{\alpha_i\alpha_jy_iy_j\phi(x_i)^{T}\phi(x_j)} - \sum_{i=1}^{N}{\alpha_i} i=1∑N​j=1∑N​αi​αj​yi​yj​ϕ(xi​)Tϕ(xj​)−i=1∑N​αi​ s.t.

0≤αi≤C0\leq\alpha_i\leq C0≤αi​≤C
∑i=1Nyiαi=0\sum_{i=1}^{N}{y_i\alpha_i} = 0 i=1∑N​yi​αi​=0

很明显,未知量α\alphaα的个数与样本的个数是相等的,那么这个对偶问题计算的时间复杂度是与训练样本的个数正相关的(这也是为啥样本个数太多的时候不推荐使用带核技巧的SVM的原因)。

仅仅做对偶还没有解决问题,因为在$ \sum_{i=1}{N}\sum_{j=1}{N}{\alpha_i\alpha_jy_iy_j\phi(x_i)^{T}\phi(x_j)} - \sum_{i=1}^{N}{\alpha_i} $ 中还要求ϕ(xi)Tϕ(xj)\phi(x_i)^{T}\phi(x_j)ϕ(xi​)Tϕ(xj​),这就需要将样本先变换到高维空间,然后再求在高维空间内的内积,这样的变换还是需要很多计算资源。等等,我们说过核函数的作用是“核函数是二元函数,输入是变换之前的两个向量,其输出与两个向量变换之后的内积相等”,所以我们可以用K(xi,xj)K(x_i,x_j)K(xi​,xj​)来代替$\sum_{i=1}{N}\sum_{j=1}{N}{\alpha_i\alpha_jy_iy_j\phi(x_i)^{T}\phi(x_j)} - \sum_{i=1}^{N}{\alpha_i} 中的中的中的\phi(x_i)^{T}\phi(x_j)$,避免了显式的特征变换。于是,使用对偶+核技巧,我们成功解决了问题。

5.相关视频地址

SVM
Kernel

原文链接:https://www.zhihu.com/question/24627666
根据原文链接整理而来

核函数(Kernel Function)与SVM相关推荐

  1. 核函数(Kernel function)(举例说明,通俗易懂)

    已知有一组向量,可用线性函数去探索其是否具有线性关系,若数据之间是非线性呢? 非线性数据是指只有利用非线性模型才能更好的预测.但非线性问题往往不好求解,所以希望用解线性分类问题的方法解决这个问题.所采 ...

  2. 核函数(Kernel function)

    已知有一组向量,可用线性函数去探索其是否具有线性关系,若数据之间是非线性呢? 非线性数据是指只有利用非线性模型才能更好的预测.但非线性问题往往不好求解,所以希望用解线性分类问题的方法解决这个问题.所采 ...

  3. 核函数K(kernel function)

    https://blog.csdn.net/zkq_1986/article/details/52448238 1 核函数K(kernel function)定义 核函数K(kernel functi ...

  4. 百面机器学习 #3 经典算法:01-3 核函数支撑向量机SVM

    文章目录 1.3 非线性SVM与核技巧 1.3.1 核函数 1.3.2 核技巧在支持向量机中的应用 1.3.3 常用核函数 1.4 其他问题 1.4.1 是否存在一组参数使SVM训练误差为0:是 1. ...

  5. Loss Function , Cost Function and Kernel Function in ML(To be continued)

    机器学习中的损失函数.代价函数.核函数 1.Definiton Shark Machine Learning Library–分别有介绍 "objective function, cost ...

  6. 对核函数(kernel)最通俗易懂的理解

    机器学习算法中,不论是感知机还是支持向量机,在面对非线性问题时,往往都会用到一个名为"核函数"的技巧.那么到底什么是核函数呢?是否真的如听起来这样难以理解呢? 核函数:是映射关系  ...

  7. 支持向量机求解过程的可视化及其核函数kernel 【Tsai Tsai】

    目录 1.支持向量机分类器是如何工作的? 2. sklearn.svm.SVC 2.1 线性SVM决策过程的可视化 2.2 参数说明 2.3 非线性数据集上的推广与3D可视化 3. SVC的重要参数k ...

  8. hdu 5095 Linearization of the kernel functions in SVM(模拟,分类清楚就行)

    题意: INPUT: The input of the first line is an integer T, which is the number of test data (T<120). ...

  9. Python视觉摄像头检测有趣项目之机器学习和概率论重点概念分析重要(三)(重点)

    ==继续上面的博文,这次发现了一个对机器学习以及概率统计都有深入研究的博主:bitcarmanlee------https://blog.csdn.net/bitcarmanlee/article/d ...

  10. SVM熟练到精通3:核函数与非线性分类

    文章引自pluskid于2010年发表于"Machine Learning"板块,本文仅做编辑. 1.回顾 前面我们介绍了线性情况下的支持向量机,它通过寻找一个线性的超平面来达到对 ...

最新文章

  1. 数据中台应用实战50篇(一)-企业级数据中台的建设方法架构和技术栈
  2. bib config_OEMAddressTable,config.bib详解
  3. spring 源码-context
  4. (stack 解析表达式)矩阵链乘
  5. D3 Handling Events
  6. JFFS2 文件系统及新特性介绍
  7. JSON格式转换工具
  8. 踩过坑的可控硅设计 经验总结
  9. python播放音频文件——playsound
  10. 工厂模式之简单工厂、工厂方法与抽象工厂
  11. 语义错误和语法错误的区别
  12. vue实现在线编辑excel(转)
  13. vba 邮件body html,Excel VBA中的Outlook电子邮件和签名 - .Body vs .HTMLbody
  14. 程序员应该知道的国外技术网站
  15. 超级好的6款办公软件,你用过几款呢?
  16. iOS 开发者账号持有人转让最新方式
  17. 大数据、云计算、区块链、人工智能!你选择哪个?
  18. 计算机组装职高必背,(完整word版)职高计算机组装与维护教案.doc
  19. VC设置断点无效的各种解决方法
  20. SVN入门及配置使用(多平台)

热门文章

  1. js my_first
  2. 记录centos7下tomcat部署war包过程
  3. ActiveMQ笔记(二)
  4. MySQL更新死锁问题
  5. case与bug的对应关系
  6. 关于SharePoint 2010里Servers in farm页面里status意义的澄清
  7. leetcode_684. Redundant Connection
  8. 我爱刷题系列汇总(51-100)【2017.11.24-2018.01.12】
  9. TableViewCell分割线消失的问题
  10. 《一胜九败》读书笔记