大家好,欢迎大家阅读周二机器学习专题,今天的这篇文章依然会讲SVM模型。

也许大家可能已经看腻了SVM模型了,觉得我是不是写不出新花样来,翻来覆去地炒冷饭。实际上也的确没什么新花样了,不出意外的话这是本专题最后一篇文章了。下周我们就要开始深度学习之旅了,我相信很多同学期待这一天已经很久了,实际上我也一样,因为这个专题里讲的大部分内容已经只在面试环节会用到,而我已经很久没有面试了。所以让我们收拾一下激动的心情,来把SVM最后剩下的一点内容讲完。

虽然只剩下最后一点内容了,但是今天的内容非常重要,可以说是SVM模型面试的核心终点。说到SVM可能对偶问题、拉格朗日面试官不一定会问你,可能他自己也不一定会,但是今天要讲的核函数是一定会问的。因为它表面上看起来是SVM最重要的内容,实际上我当时在刚转行准备面试的时候,SVM模型相关的内容一概不知,就知道核函数,所以我想大家应该能够体会到这里面的深意。

核函数究竟是什么

首先我们来介绍一下核函数的概念,可能大家会很好奇,明明我们已经把SVM模型的原理完整推导完了,怎么又冒出来一个核函数。实际上核函数非常精彩,它对于SVM也非常重要,因为它奠定了SVM的“江湖地位”,也可以说是SVM模型最大的特性。

在介绍核函数之前,我们先来看一个问题,这个问题在机器学习的历史上非常有名,叫做亦或问题。我们都知道,在二进制当中有一个操作叫做亦或操作。亦或操作其实很简单,就是如果两个数相同返回的结果就是0,否则就返回1。如果我们的数据是类似亦或组成的,就会是这样一个形状:

我们观察一下上面这个图,会发现一个问题,就是我们无论如何也不可能找到一条线把上面这个分类完成。因为一条线只能分出两个区域,但是上面这个图明显有四个区域。

那如果我们把上面的数据映射到更高的维度当中,上图是二维的图像,我们把它映射到三维当中,就可以使用一个平面将样本区分开了。也就是说通过一个映射函数,将样本从n维映射到n+1或者更高的维度,使得原本线性不可分的数据变成线性可分,这样我们就解决了一些原本不能解决的问题。

所以核函数是什么?是一系列函数的统称,这些函数的输入是样本x,输出是一个映射到更高维度的样本。大部分能实现这一点的函数都可以认为是核函数(不完全准确,只是为了理解方便),当然一些稀奇古怪的函数虽然是核函数,但是对我们的价值可能并不大,所以我们也很少用,常用的核函数还是只有少数几种。

使用方法

现在我们已经知道核函数是什么了,那么它又该如何使用呢?

这个问题也不难,数学上比较困难的是表示问题,一个问题被描述以及表示清楚可能是最难的,当表示出来了之后把它解出来可能就要简单很多了。所以我们先来表示问题,用一个字母来表示核函数。前面已经说过了,核函数的输入是样本x,所以映射之后的样本就是

还记得我们上次推导到最后的公式吗?我们把它写出来,大家回顾一下。

我们要做的就是把核函数代入进去,仅此而已,代入进去之后,就会得到:

这里有一个小问题,我们前面说了函数会把x映射到更高的维度。比如x本身是10维的,我们用了函数之后给映射到1000维了,当然它的线性不可分的问题可能解决了,但是这会带来另外一个问题,就是计算的复杂度增加了。因为原本本来只需要10次计算,但现在映射了之后,需要1000次计算才可以得到结果。这不符合我们想要白嫖不想花钱的心理,所以我们对核函数做了一些限制,只有可以白嫖的映射函数才被称为核函数

我们把需要满足的条件写出来,其实很简单。我们把满足条件的核函数称为K,那么K应该满足:

也就是说K对的结果进行计算等价于映射之后的结果再进行点乘操作,这样就可以在计算复杂度不变的情况下完成映射。其实对于核函数是有数学上的定义的,这里我没放出来,一个是觉得表示太复杂用不到,另外一个是在面试的时候其实也不会问到这么细,我们只需要知道它的性质就可以了。因为常见使用的核函数来来回回基本上也就那么几种,我们记住它们就OK了。

下面我们就来看一下常见的核函数,大概有这么四种:

  1. 线性核函数,其实就是没有核函数。我们表示出来就是
  2. 多项式核函数,它等价于一个多项式变换:,这里的,b和d都是我们设置的参数
  3. 高斯核,这种核函数使用频率很高,
  4. sigmoid核,它的公式是:

我们使用核函数的方法很简单,就是用K这个函数计算的值来代替原本的结果,对于SVM模型的推演并不产生影响。这也是为什么我们在上一篇文章当中用SMO算法来推导优化方法时候,要令的原因,其实就是在为后面讲解核函数做铺垫。

我个人觉得和前面硬间隔软间隔以及对偶问题和SMO算法的推导比起来,核函数的原理应该算是其中最简单的。即使你完全不理解SVM模型的原理,也可以搞得懂核函数。所以大家看这篇文章应该是没有太大压力的。

文章到这里就结束了,如果喜欢的话,希望可以来一波三连支持,再次感谢大家的阅读(关注、转发、点赞)。

原文链接,求个关注

本文使用 mdnice 排版

- END -

{{uploading-image-326893.png(uploading...)}}

详解SVM模型——核函数是怎么回事的更多相关文章

  1. 详解svm和smo的出现

    SupportVector Machines are learning models used forclassification: which individuals in a population ...

  2. 机器学习,详解SVM软间隔与对偶问题

    今天是机器学习专题的第34篇文章,我们继续来聊聊SVM模型. 我们在上一篇文章当中推导了SVM模型在硬间隔的原理以及公式,最后我们消去了所有的变量,只剩下了\(\alpha\).在硬间隔模型当中,样本 ...

  3. 详解Transformer模型(Atention is all you need)

    1 概述 在介绍Transformer模型之前,先来回顾Encoder-Decoder中的Attention.其实质上就是Encoder中隐层输出的加权和,公式如下: 将Attention机制从Enc ...

  4. 03.Django的MTV开发模式详解和模型关系构建

    ORM:对象关系映射 一:MTV开发模式把数据存取逻辑.业务逻辑和表现逻辑组合在一起的概念有时被称为软件架构的 Model-View-Controller(MVC)模式. 在这个模式中,Model 代 ...

  5. 图示详解BERT模型的输入与输出

    一.BERT整体结构 BERT主要用了Transformer的Encoder,而没有用其Decoder,我想是因为BERT是一个预训练模型,只要学到其中语义关系即可,不需要去解码完成具体的任务.整体架 ...

  6. JVM内存模型和结构详解(五大模型图解)

    JVM内存模型和Java内存模型都是面试的热点问题,名字看感觉都差不多,实际上他们之间差别还是挺大的. 通俗点说,JVM内存结构是与JVM的内部存储结构相关,而Java内存模型是与多线程编程相关@mi ...

  7. 深入理解SVM,详解SMO算法

    今天是机器学习专题第35篇文章,我们继续SVM模型的原理,今天我们来讲解的是SMO算法. 公式回顾 在之前的文章当中我们对硬间隔以及软间隔问题都进行了分析和公式推导,我们发现软间隔和硬间隔的形式非常接 ...

  8. 第94天:CSS3 盒模型详解

    CSS3盒模型详解 盒模型设定为border-box时 width = border + padding + content 盒模型设定为content-box时 width = content所谓定 ...

  9. seq2seq模型详解及对比(CNN,RNN,Transformer)

    一,概述 在自然语言生成的任务中,大部分是基于seq2seq模型实现的(除此之外,还有语言模型,GAN等也能做文本生成),例如生成式对话,机器翻译,文本摘要等等,seq2seq模型是由encoder, ...

随机推荐

  1. 【小白学PyTorch】3 浅谈Dataset和Dataloader

    文章目录: 目录 1 Dataset基类 2 构建Dataset子类 2.1 Init 2.2 getitem 3 dataloader 1 Dataset基类 PyTorch 读取其他的数据,主要是 ...

  2. Python爬虫实战点触验证码, 模拟登陆bilibili

    爬虫思路如下: 利用自动化爬虫工具 Selenium 模拟点击输入等操作来进行登录 分析页面,获取点触验证码的点触图片,通过将图片发送给超级鹰打码平台识别后获取坐标信息 根据超级鹰返回的数据,模拟坐标 ...

  3. oeasy教您玩转linux010109clear清屏

     回忆上次内容 上次讲了灵魂三问 whatis whereis which 通过这三个问题,可以对命令基本了解,我们来试一下!!

  4. 再爆安全漏洞,这次轮到Jackson了,竟由阿里云上报

    冤冤相报何时了,得饶人处且饶人.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[ ...

  5. 深入了解Kafka【五】Partition和消费者的关系

    1.消费者与Partition 以下来自<kafak权威指南>第4章. 假设主题T1有四个分区. 1.1.一个消费者组 1.1.1.消费者数量小于分区数量 只有一个消费者时,消费者1将收到 ...

  6. 当前PageOffice需要获取更高版本的授权才能正常运行。(Error:0x0005)

      说明当前程序的是pagoeffice3说明当前程序的是pagoeffice3.0的程序,而序列号用的是2.0的序列号,或者说是当前程序是4.0的程序,而序列号用的是3.0的序列号.即当前用的是高版 ...

  7. 小程序开发-block组件的使用

    微信小程序中,block不是一个组件,而是一个包装元素,不会在页面中做任何渲染. 使用情况:条件渲染 wx:if 因为 wx:if 是一个控制属性,需要将它添加到一个标签/组件上,用于控制隐藏与显示. ...

  8. JS实现斐波那契数列的五种方式

    下面是五种实现斐波那契数列的方法 循环   function fibonacci(n){ var res1 = 1; var res2 = 1; var sum = res2; for(var i = ...

  9. SpringBoot—整合log4j2入门和log4j2.xml配置详解

    关注微信公众号:CodingTechWork,一起学习进步. 引言   对于一个线上程序或者服务而言,重要的是要有日志输出,这样才能方便运维.而日志的输出需要有一定的规划,如日志命名.日志大小,日志分 ...

  10. centos7安装jdk11

    我下载的网址是http://jdk.java.net/11/ 找安装包的事就说到这里了.我是因为公司用的jdk8,但是,我给个人研究东西的时候,目前定的版本是jdk11 .另外,现在基本全线转到了op ...