详解SVM模型——核函数是怎么回事
大家好,欢迎大家阅读周二机器学习专题,今天的这篇文章依然会讲SVM模型。
也许大家可能已经看腻了SVM模型了,觉得我是不是写不出新花样来,翻来覆去地炒冷饭。实际上也的确没什么新花样了,不出意外的话这是本专题最后一篇文章了。下周我们就要开始深度学习之旅了,我相信很多同学期待这一天已经很久了,实际上我也一样,因为这个专题里讲的大部分内容已经只在面试环节会用到,而我已经很久没有面试了。所以让我们收拾一下激动的心情,来把SVM最后剩下的一点内容讲完。
虽然只剩下最后一点内容了,但是今天的内容非常重要,可以说是SVM模型面试的核心终点。说到SVM可能对偶问题、拉格朗日面试官不一定会问你,可能他自己也不一定会,但是今天要讲的核函数是一定会问的。因为它表面上看起来是SVM最重要的内容,实际上我当时在刚转行准备面试的时候,SVM模型相关的内容一概不知,就知道核函数,所以我想大家应该能够体会到这里面的深意。
核函数究竟是什么
首先我们来介绍一下核函数的概念,可能大家会很好奇,明明我们已经把SVM模型的原理完整推导完了,怎么又冒出来一个核函数。实际上核函数非常精彩,它对于SVM也非常重要,因为它奠定了SVM的“江湖地位”,也可以说是SVM模型最大的特性。
在介绍核函数之前,我们先来看一个问题,这个问题在机器学习的历史上非常有名,叫做亦或问题。我们都知道,在二进制当中有一个操作叫做亦或操作。亦或操作其实很简单,就是如果两个数相同返回的结果就是0,否则就返回1。如果我们的数据是类似亦或组成的,就会是这样一个形状:
我们观察一下上面这个图,会发现一个问题,就是我们无论如何也不可能找到一条线把上面这个分类完成。因为一条线只能分出两个区域,但是上面这个图明显有四个区域。
那如果我们把上面的数据映射到更高的维度当中,上图是二维的图像,我们把它映射到三维当中,就可以使用一个平面将样本区分开了。也就是说通过一个映射函数,将样本从n维映射到n+1或者更高的维度,使得原本线性不可分的数据变成线性可分,这样我们就解决了一些原本不能解决的问题。
所以核函数是什么?是一系列函数的统称,这些函数的输入是样本x,输出是一个映射到更高维度的样本xtx_txt。大部分能实现这一点的函数都可以认为是核函数(不完全准确,只是为了理解方便),当然一些稀奇古怪的函数虽然是核函数,但是对我们的价值可能并不大,所以我们也很少用,常用的核函数还是只有少数几种。
使用方法
现在我们已经知道核函数是什么了,那么它又该如何使用呢?
这个问题也不难,数学上比较困难的是表示问题,一个问题被描述以及表示清楚可能是最难的,当表示出来了之后把它解出来可能就要简单很多了。所以我们先来表示问题,用一个字母Φ\PhiΦ来表示核函数。前面已经说过了,核函数的输入是样本x,所以映射之后的样本就是Φ(x)\Phi(x)Φ(x)。
还记得我们上次推导到最后的公式吗?我们把它写出来,大家回顾一下。
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ &\min_{\alpha}…
我们要做的就是把核函数代入进去,仅此而已,代入进去之后,就会得到:
KaTeX parse error: No such environment: align* at position 7: \begin{̲a̲l̲i̲g̲n̲*̲}̲ &\min_{\alpha}…
这里有一个小问题,我们前面说了函数Φ(x)\Phi(x)Φ(x)会把x映射到更高的维度。比如x本身是10维的,我们用了函数之后给映射到1000维了,当然它的线性不可分的问题可能解决了,但是这会带来另外一个问题,就是计算的复杂度增加了。因为原本xiTxjx_i^Tx_jxiTxj本来只需要10次计算,但现在映射了之后,需要1000次计算才可以得到结果。这不符合我们想要白嫖不想花钱的心理,所以我们对核函数做了一些限制,只有可以白嫖的映射函数才被称为核函数。
我们把需要满足的条件写出来,其实很简单。我们把满足条件的核函数称为K,那么K应该满足:
K(xi,xj)=K(xiTxj)=Φ(xi)TΦ(xj)K(x_i, x_j) = K(x_i^T x_j) = \Phi(x_i)^T \Phi(x_j)K(xi,xj)=K(xiTxj)=Φ(xi)TΦ(xj)
也就是说K对xiTxjx_i^Tx_jxiTxj的结果进行计算等价于映射之后的结果再进行点乘操作,这样就可以在计算复杂度不变的情况下完成映射。其实对于核函数是有数学上的定义的,这里我没放出来,一个是觉得表示太复杂用不到,另外一个是在面试的时候其实也不会问到这么细,我们只需要知道它的性质就可以了。因为常见使用的核函数来来回回基本上也就那么几种,我们记住它们就OK了。
下面我们就来看一下常见的核函数,大概有这么四种:
- 线性核函数,其实就是没有核函数。我们表示出来就是K(xi,xj)=xiTxjK(x_i, x_j) = x_i^Tx_jK(xi,xj)=xiTxj
- 多项式核函数,它等价于一个多项式变换:K(xi,xj)=(γxiTxj+b)dK(x_i, x_j) = (\gamma x_i^Tx_j + b)^dK(xi,xj)=(γxiTxj+b)d,这里的γ\gammaγ,b和d都是我们设置的参数
- 高斯核,这种核函数使用频率很高,K(xi,xj)=exp(−γ∣∣xi−xj∣∣2)K(x_i, x_j) = \exp(-\gamma ||x_i - x_j||^2)K(xi,xj)=exp(−γ∣∣xi−xj∣∣2)
- sigmoid核,它的公式是:K(xi,xj)=tanh(γxiTxj+b)K(x_i, x_j) = \tanh(\gamma x_i ^T x_j + b)K(xi,xj)=tanh(γxiTxj+b)
我们使用核函数的方法很简单,就是用K这个函数计算xi,xjx_i, x_jxi,xj的值来代替原本xiTxjx_i ^Tx_jxiTxj的结果,对于SVM模型的推演并不产生影响。这也是为什么我们在上一篇文章当中用SMO算法来推导α\alphaα优化方法时候,要令Ki,j=xiTxjK_{i,j}=x_i^T x_jKi,j=xiTxj的原因,其实就是在为后面讲解核函数做铺垫。
我个人觉得和前面硬间隔软间隔以及对偶问题和SMO算法的推导比起来,核函数的原理应该算是其中最简单的。即使你完全不理解SVM模型的原理,也可以搞得懂核函数。所以大家看这篇文章应该是没有太大压力的。
文章到这里就结束了,如果喜欢的话,希望可以来一波三连支持,再次感谢大家的阅读(关注、转发、点赞)。
原文链接,求个关注
详解SVM模型——核函数是怎么回事相关推荐
- 模型算法_详解SVM模型之SMO算法
今天是机器学习专题第35篇文章,我们继续SVM模型的原理,今天我们来讲解的是SMO算法. 公式回顾 在之前的文章当中我们对硬间隔以及软间隔问题都进行了分析和公式推导,我们发现软间隔和硬间隔的形式非常接 ...
- Sklearn参数详解—SVM
总第108篇 本篇主要讲讲Sklearn中SVM,SVM主要有LinearSVC.NuSVC和SVC三种方法,我们将具体介绍这三种分类方法都有哪些参数值以及不同参数值的含义. 在开始看本篇前你可以看看 ...
- 详解概率图模型——概述
详解概率图模型--概述 详解概率图模型--概述 概率图 概览 有向图 vs. 无向图 有向图 无向图 判别式(discriminative)模型 and 生成式(generative)模型 前言 两个 ...
- 公开课报名 | 详解CNN-pFSMN模型以及在语音识别中的应用
近年来,在深度学习技术的帮助下,语音识别取得了极大的进展,从实验室开始走向市场,走向实用化.基于语音识别技术的输入法.搜索和翻译等人机交互场景都有了广泛的应用. Librispeech是当前衡量语音识 ...
- 公开课 | 详解CNN-pFSMN模型以及在语音识别中的应用
近年来,在深度学习技术的帮助下,语音识别取得了极大的进展,从实验室开始走向市场,走向实用化.基于语音识别技术的输入法.搜索和翻译等人机交互场景都有了广泛的应用. Librispeech是当前衡量语音识 ...
- 【转】图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵
转自:图形流水线中坐标变换详解:模型矩阵.视角矩阵.投影矩阵_sherlockreal的博客-CSDN博客_视角矩阵 图形流水线中坐标变换详解:模型矩阵.视角矩阵.投影矩阵 图形流水线中坐标变换过程 ...
- Apollo进阶课程㉘丨Apollo控制技术详解——基于模型的控制方法
原文链接:进阶课程㉘丨Apollo控制技术详解--基于模型的控制方法 PID控制是一个在工业控制应用中常见的反馈回路部件,由比例单元P.积分单元I和微分单元D组成.PID控制的基础是比例控制:积分控制 ...
- 电机标幺化、PI标幺化、锁相环PLL标幺化 详解电机模型相关标幺化处理
电机标幺化.PI标幺化.锁相环PLL标幺化 详解电机模型相关标幺化处理 电流环PI控制器的标幺化处理 观测器中PLL锁相环的标幺化处理 采样时间处理 这是文档,不是代码,文档中的代码均为引用举例子的 ...
- 电机标幺化、PI标幺化、锁相环PLL标幺化 详解电机模型相关标幺化处理 电流环PI控制器的标幺化处理
电机标幺化.PI标幺化.锁相环PLL标幺化 详解电机模型相关标幺化处理 电流环PI控制器的标幺化处理 观测器中PLL锁相环的标幺化处理 采样时间处理 这是文档,不是代码,文档中的代码均为引用举例子的 ...
最新文章
- GitHub 热榜:歪果小姐姐教你用纯代码画画,真细腻!
- igbinary vs serialize vs json_encode
- java 项目保存日志到本地_Springboot项目使用Slf4j将日志保存到本地目录
- 企业网站设计方案需先明确网站主题
- 怎样设定手机或平板让它更安全?
- idea Empty git --version output:解决
- C/C++笔试、面试题
- HDU 2079-课程时间(生成函数)
- android 開發人員模式,Android
- jQuery.html()方法ie下不能设置html代码的问题
- 黑莓8820刷机教程 设置
- swifty引用AFNetworking出现clang: error: linker command failed with exit code 1 (use -v to see invocation
- matlab分簇教程,分簇算法matlab
- 常见排序算法原理及java实现
- 面试题-实现数组map方法
- 关于离开,请诸位保重自己
- c语言求两个字符串的交集,用c语言求两个集合的交集,并集,差集
- R 语言中1 和1L的区别
- 刺激前低的EEG alpha功率增强了视觉知觉,但不是视觉知觉敏感度
- 解决Visual Studio输出中文乱码问题
热门文章
- 神奇的小石子 dfs(深搜) 考核补题
- 2017.08.19【NOIP提高组】模拟赛B组 【雅礼联考GDOI2017模拟】Zjr506的捕猫计划
- 我的世界Minecraft1.12.2模组开发(10)生物实体
- recv函数和send函数
- 【解决方案】Fiddler一直提示The system proxy was changed.Click to reenable capture...
- 企业备份方案设计干货参考:典型场景、典型问题及案例
- 人工神经网络算法的应用,人工神经网络算法步骤
- 微型计算机上的南桥芯片功能,微型计算机主板上安装的主要部件
- Java程序跑的快,全要靠线程带
- 记录一下 pythom3.6安装dlib和cuda