当前位置: 首页 > 编程日记 > 正文

超详细支持向量机知识点,面试官会问的都在这里了

640?wx_fmt=jpeg

(图片付费下载自视觉中国)

作者 | 韦伟

来源 | 知乎

导语:持续准备面试中,准备的过程中,慢慢发现,如果死记硬背的话很难,可当推导一遍并且细细研究里面的缘由的话,面试起来应该什么都不怕,问什么问题都可以由公式推导得到结论,不管问什么,公式摆在那里,影响这个公式的变量就在那,你问什么我答什么,共勉!

一. 简单概括一下SVM
SVM 是一种二类分类模型。它的基本思想是在特征空间中寻找间隔最大的分离超平面使数据得到高效的二分类,具体来讲,有三种情况(不加核函数的话就是个线性模型,加了之后才会升级为一个非线性模型):
  • 当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机;
  • 当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,即线性支持向量机;
  • 当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。

二. SVM 为什么采用间隔最大化(与感知机的区别):
当训练数据线性可分时,存在无穷个分离超平面可以将两类数据正确分开。感知机利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个。线性可分支持向量机利用间隔最大化求得最优分离超平面,这时,解是唯一的。另一方面,此时的分隔超平面所产生的分类结果是最鲁棒的,对未知实例的泛化能力最强。

三. SVM的目标(硬间隔):
有两个目标:第一个是使间隔最大化,第二个是使样本正确分类,由此推出目标函数:
640?wx_fmt=png640?wx_fmt=svg
稍微解释一下,w是超平面参数,目标一是从点到面的距离公式化简来的,具体不展开,目标二就相当于感知机,只是把大于等于0进行缩放变成了大于等于1,为了后面的推导方便。有了两个目标,写在一起,就变成了svm的终极目标:

640?wx_fmt=png

四. 求解目标(硬间隔):
从上面的公式看出,这是一个有约束条件的最优化问题,用拉格朗日函数来解决。
上式的拉格朗日函数为:

640?wx_fmt=png

在满足Slater定理的时候,且过程满足KKT条件的时候,原问题转换成对偶问题:

640?wx_fmt=png

先求内部最小值,对w和b求偏导并令其等于0可得:
640?wx_fmt=svg
将其代入到上式中去可得到
640?wx_fmt=svg
此时需要求解 640?wx_fmt=svg,利用SMO(序列最小优化)算法:
SMO算法的基本思路是每次选择两个变量640?wx_fmt=png640?wx_fmt=png,选取的两个变量所对应的样本之间间隔要尽可能大,因为这样更新会带给目标函数值更大的变化。SMO算法之所以高效,是因为仅优化两个参数的过程实际上仅有一个约束条件,其中一个可由另一个表示,这样的二次规划问题具有闭式解。

五. 软间隔:
不管直接在原特征空间,还是在映射的高维空间,我们都假设样本是线性可分的。虽然理论上我们总能找到一个高维映射使数据线性可分,但在实际任务中,寻找一个合适的核函数核很困难。此外,由于数据通常有噪声存在,一味追求数据线性可分可能会使模型陷入过拟合,因此,我们放宽对样本的要求,允许少量样本分类错误。这样的想法就意味着对目标函数的改变,之前推导的目标函数里不允许任何错误,并且让间隔最大,现在给之前的目标函数加上一个误差,就相当于允许原先的目标出错,引入松弛变量640?wx_fmt=png,公式变为:

640?wx_fmt=png

那么这个松弛变量怎么计算呢,最开始试图用0,1损失去计算,但0,1损失函数并不连续,求最值时求导的时候不好求,所以引入合页损失(hinge loss):

640?wx_fmt=png

函数图张这样:
640?wx_fmt=jpeg
理解起来就是,原先制约条件是保证所有样本分类正确640?wx_fmt=png,现在出现错误的时候,一定是这个式子不被满足了,即 640?wx_fmt=svg,衡量一下错了多少呢?因为左边一定小于1,那就跟1比较,因为1是边界,所以用1减去640?wx_fmt=png来衡量错误了多少,所以目标变为(正确分类的话损失为0,错误的话付出代价):

640?wx_fmt=png

但这个代价需要一个控制的因子,引入C>0,惩罚参数,即:
640?wx_fmt=svg
可以想象,C越大说明把错误放的越大,说明对错误的容忍度就小,反之亦然。当C无穷大时,就变成一点错误都不能容忍,即变成硬间隔。实际应用时我们要合理选取C,C越小越容易欠拟合,C越大越容易过拟合。
所以软间隔的目标函数为:

640?wx_fmt=png

其中:

640?wx_fmt=png

六. 软间隔求解:
与硬间隔类似:
上式的拉格朗日函数为:

640?wx_fmt=png

在满足Slater定理的时候,且过程满足KKT条件的时候,原问题转换成对偶问题:

640?wx_fmt=png

先求内部最小值,对w,b和640?wx_fmt=png求偏导并令其等于0可得:

640?wx_fmt=png

将其代入到上式中去可得到,注意640?wx_fmt=png被消掉了:

640?wx_fmt=png

此时需要求解640?wx_fmt=png,同样利用SMO(序列最小优化)算法。
七. 核函数:
为什么要引入核函数:
当样本在原始空间线性不可分时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。而引入这样的映射后,所要求解的对偶问题的求解中,无需求解真正的映射函数,而只需要知道其核函数。核函数的定义:K(x,y)=<ϕ(x),ϕ(y)>,即在特征空间的内积等于它们在原始样本空间中通过核函数 K 计算的结果。一方面数据变成了高维空间中线性可分的数据,另一方面不需要求解具体的映射函数,只需要给定具体的核函数即可,这样使得求解的难度大大降低。
用自己的话说就是,在SVM不论是硬间隔还是软间隔在计算过程中,都有X转置点积X,若X的维度低一点还好算,但当我们想把X从低维映射到高维的时候(让数据变得线性可分时),这一步计算很困难,等于说在计算时,需要先计算把X映射到高维的的ϕ(x),再计算ϕ(x1)和ϕ(x2)的点积,这一步计算起来开销很大,难度也很大,此时引入核函数,这两步的计算便成了一步计算,即只需把两个x带入核函数,计算核函数,举个列子一目了然(图片来自:从零推导支持向量机):
640?wx_fmt=jpeg

个人对核函数的理解:核函数就是一个函数,接收两个变量,这两个变量是在低维空间中的变量,而核函数求的值等于将两个低维空间中的向量映射到高维空间后的内积。

八. 如何确定一个函数是核函数:
验证正定核啥的,咱也不太懂,给出:

640?wx_fmt=png

所以不懂,就用人家确定好的常见核函数及其优缺点:
640?wx_fmt=png

九. 如何选择核函数:
  • 当特征维数 d 超过样本数 m 时 (文本分类问题通常是这种情况), 使用线性核;
  • 当特征维数 d 比较小. 样本数 m 中等时, 使用RBF核;
  • 当特征维数 d 比较小. 样本数 m 特别大时, 支持向量机性能通常不如深度神经网络。
十. 关于支持向量的问题:
1.先说硬间隔:
先看KKT条件
640?wx_fmt=jpeg
支持向量,对偶变量 αi > 0 对应的样本;
  • 线性支持向量机中, 支持向量是距离划分超平面最近的样本, 落在最大间隔边界上。
640?wx_fmt=jpeg
  • 支持向量机的参数 (w; b) 仅由支持向量决定, 与其他样本无关。
640?wx_fmt=jpeg

2. 再说软间隔:
先看kkt条件:
640?wx_fmt=jpeg
经过SMO后,求得640?wx_fmt=png
对于任意样640?wx_fmt=png

640?wx_fmt=png

若满足640?wx_fmt=svg,进一步地,

640?wx_fmt=png

如图:
640?wx_fmt=jpeg

十一. 谈谈SVM的损失函数:
此处说的是软间隔:
先看软间隔的基本型形式:

640?wx_fmt=png

稍微做一点变化:
640?wx_fmt=svg
这样写是为了符合标准的损失函数+正则化的样子,其中, 第一项称为经验风险, 度量了模型对训练数据的拟合程度; 第二项称为结构风险, 也称为正则化项, 度量 了模型自身的复杂度. 正则化项削减了假设空间, 从而 降低过拟合风险. λ 是个可调节的超参数, 用于权衡经验风险和结构风险.
其中:

640?wx_fmt=png

这样的话给上式乘以mc,就会变成上上式了。

十二. 为什么SVM对缺失数据敏感?
这里说的缺失数据是指缺失某些特征数据,向量数据不完整。SVM 没有处理缺失值的策略。而 SVM 希望样本在特征空间中线性可分,所以特征空间的好坏对SVM的性能很重要。缺失特征数据将影响训练结果的好坏。

十三. SVM的优缺点:
优点:
  1. 由于SVM是一个凸优化问题,所以求得的解一定是全局最优而不是局部最优。
  2. 不仅适用于线性线性问题还适用于非线性问题(用核技巧)。
  3. 拥有高维样本空间的数据也能用SVM,这是因为数据集的复杂度只取决于支持向量而不是数据集的维度,这在某种意义上避免了“维数灾难”。
  4. 理论基础比较完善(例如神经网络就更像一个黑盒子)。
缺点:
  1. 二次规划问题求解将涉及m阶矩阵的计算(m为样本的个数), 因此SVM不适用于超大数据集。(SMO算法可以缓解这个问题)
  2. 只适用于二分类问题。(SVM的推广SVR也适用于回归问题;可以通过多个SVM的组合来解决多分类问题)

十四:参考文献:
https://zhuanlan.zhihu.com/p/49331510
https://zhuanlan.zhihu.com/p/43827793
https://zhuanlan.zhihu.com/p/31652569
原文链接:
https://zhuanlan.zhihu.com/p/76946313

(*本文为 AI科技大本营转载文章,转载请联系原作者)

精彩推荐


2019 中国大数据技术大会(BDTC)历经十一载,再度火热来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。【早鸟票】【特惠学生票】限时抢购,扫码了解详情!

640?wx_fmt=png


推荐阅读

  • 中文预训练ALBERT模型来了:小模型登顶GLUE,Base版模型小10倍、速度快1倍

  • 100多次竞赛后,他研发了一个几乎可以解决所有机器学习问题的框架

  • 王霸之路:从0.1到2.0,一文看尽TensorFlow“奋斗史”

  • 伯克利人工智能研究院开源深度学习数据压缩方法Bit-Swap,性能创新高

  • NLP被英语统治?打破成见,英语不应是「自然语言」同义词

  • TensorFlow2.0正式版发布,极简安装TF2.0(CPU&GPU)教程

  • 肖仰华:知识图谱构建的三要素、三原则和九大策略 | AI ProCon 2019

  • AI落地遭“卡脖子”困境:为什么说联邦学习是解决良方?

  • 限时早鸟票 | 2019 中国大数据技术大会(BDTC)超豪华盛宴抢先看!

640?wx_fmt=png

你点的每个“在看”,我都认真当成了喜欢

相关文章:

vue-router点击切换路由报错

报错: 报错原因&#xff1a; 设置mode:history解决方法&#xff1a; 将router的mode设置为‘hash就不报错了 原因下次再分析?

gvim配置相关

用 vundle 来管理 vim 插件&#xff08;包含配置文件vimrc和gvimrc&#xff09; gvim插件管理神器&#xff1a;vundle的安装与使用 Vim插件管理Vundle Linux 下VIM的配置 Vim配置系列(一) ---- 插件管理 Vim配置系列(二) —- 好看的statusline vim优秀插件整理 一些有用的 VIM …

深度学习有哪些接地气又好玩的应用?

过去几年中&#xff0c;深度学习中的很多技术如计算机视觉、自然语言处理等被应用在很多实际问题中&#xff0c;而且相关成果也表明深度学习能让人们的工作效果比以前更好。我们收集了一些深度学习方面的创意应用&#xff0c;虽然没有对每项应用进行详尽描述&#xff0c;但是希…

Ubuntu下通过CMake文件编译CUDA+OpenCV代码操作步骤

在 CUDA_Test 工程中&#xff0c;CUDA测试代码之前仅支持在Windows10 VS2013编译&#xff0c;今天在Ubuntu 14.04下写了一个CMakeLists.txt文件&#xff0c;支持在Linux下也可以通过CMake编译CUDA_Test工程&#xff0c;CMakeLists.txt文件内容如下&#xff1a;# CMake file f…

JAVA 多用户商城系统b2b2c-Spring Cloud常见问题与总结(一)

在使用Spring Cloud的过程中&#xff0c;难免会遇到一些问题。所以对Spring Cloud的常用问题做一些总结。需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码 一零三八七七四六二六 一、Eureka常见问题 1.1 Eureka 注册服务慢 默认情况下&#xff0c;服务…

TinyFrame升级之八:实现简易插件化开发

本章主要讲解如何为框架新增插件化开发功能。 在.net 4.0中&#xff0c;我们可以在Application开始之前&#xff0c;通过PreApplicationStartMethod方法加载所需要的任何东西。那么今天我们主要做的工作就集中在这个时间段&#xff1a; 1.将插件DLL及文件拷贝入主网站目录并编译…

快手王华彦:端上视觉技术的极致效率及其短视频应用实践 | AI ProCon 2019

演讲嘉宾 | 王华彦&#xff08;快手硅谷Y-tech实验室负责人&#xff09; 编辑 | Just 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 快手用户日均上传1500万个视频&#xff0c;要把这些作品准确的分发给超2亿活跃用户&#xff0c;如果没有强大的AI技术系统去理解…

tmux简介及安装

tmux是一个开源工具&#xff0c;用于在一个终端窗口中运行多个终端会话。它可以减少过多的打开终端控制台。tmux的源码在 https://github.com/tmux/tmux &#xff0c;它的License是BSD。tmux可以直接通过sudo apt-get install tmux命令安装(通过sudo apt-get remove tmux移除)…

Swift中依赖注入的解耦策略

原文地址&#xff1a;Dependency Injection Strategies in Swift 简书地址&#xff1a;Swift中依赖注入的解耦策略 今天我们将深入研究Swift中的依赖注入&#xff0c;这是软件开发中最重要的技术之一&#xff0c;也是许多编程语言中使用频繁的概念。 具体来说&#xff0c;我们将…

Eclipse mac 下的快捷键

2019独角兽企业重金招聘Python工程师标准>>> Eclipse&#xff0c;MyEclipse 的preference 在“windows”下边&#xff0c;mac下在左上角苹果图标边上 win下我们都习惯了ctrl c&#xff0c;在Mac 下使用标准键盘变成了win键c 系统的偏好设定 -> 键盘 -> 修饰…

Ubuntu上使终端显示Git分支(oh-my-zsh)

oh-my-zsh是基于Zsh(Zsh是一个Linux用户很少使用的power-shell&#xff0c;这是由于大多数Linux产品安装&#xff0c;以及默认使用bash shell)的功能作了一个扩展&#xff0c;方便插件管理、主体自定义等。oh-my-zsh源码在 https://github.com/robbyrussell/oh-my-zsh &#x…

天哪!我的十一假期被AI操控了

&#xff08;图片付费下载自视觉中国&#xff09;导语&#xff1a;这个假期&#xff0c;除了脑海一直在唱歌&#xff0c;庆祝祖国成立的 70 周年&#xff0c;当然也闲不住&#xff0c;要乘机出去浪一浪。目前小长假进度条已经进行到 71.4% 了&#xff0c;有没有发现这个假期与以…

使用SVN+Axure RP 8.0创建团队项目

一、使用到的工具&#xff1a;VisualSVN Server --SVN服务器&#xff1a;https://www.visualsvn.com/server/ Axure RP 8.0 &#xff1a;http://www.downcc.com/soft/103078.html 二、VisualSVN Server 安装以及操作1、安装 &#xff1a; 默认安装即可 2、操作&#xff1a; &a…

no no no.不要使用kill -9.

2019独角兽企业重金招聘Python工程师标准>>> no no no.不要使用kill -9. 它没有给进程留下善后的机会&#xff1a; 1) 关闭socket链接 2) 清理临时文件 3) 将自己将要被销毁的消息通知给子进程 4) 重置自己的终止状态 等等。 通常&#xff0c;应该发送15&#xff0c…

人工智能的“天罗地网”

&#xff08;图片付费下载自视觉中国&#xff09;整理 | 弯月编辑 | 郭芮来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;人工智能&#xff08;AI&#xff09;技术正在全球迅速崛起。不断涌现的最新发展令世人瞩目&#xff0c;从以假乱真的深度伪造视频&#xff0c…

Ubuntu下安装Cppcheck源码操作步骤

Cppcheck是用在C、C中对code进行静态检查的工具。它的源码在 https://github.com/danmar/cppcheck 。它的License是GPL-3.0。Cppcheck可以检查不通过编译的文件&#xff0c;执行的检查包括&#xff1a;(1)、自动变量检查&#xff1b;(2)、数组的边界检查&#xff1b;(3)、clas…

用“脸”打卡,抬头就能签到!

科技正在飞速改变我们的生活&#xff0c;以前我们上班的时候&#xff0c;脖子上总会挂一个IC卡用来验证身份和签到打卡&#xff0c;后来指纹识别出现了&#xff0c;我们又逐渐习惯了指纹打卡&#xff0c;到如今&#xff0c;随着人脸识别技术的出现&#xff0c;我们开始用“脸”…

OC基础第四讲--字符串、数组、字典、集合的常用方法

OC基础第四讲--字符串、数组、字典、集合的常用方法 字符串、数组、字典、集合有可变和不可变之分。以字符串为例&#xff0c;不可变字符串本身值不能改变&#xff0c;必须要用相应类型来接收返回值&#xff1b;而可变字符串调用相应地方法后&#xff0c;本身会改变&#xff1b…

分类、检测、分割任务均有SOTA表现,ACNet有多强?

&#xff08;图片付费下载自视觉中国&#xff09;作者 | 路一直都在来源 | 知乎专栏Abstract本文提出了一种新的自适应连接神经网络(ACNet)&#xff0c;从两个方面对传统的卷积神经网络(CNNs)进行了改进。首先&#xff0c;ACNet通过自适应地确定特征节点之间的连接状态&#xf…

CUDA Samples: approximate prior vbox layer

以下CUDA sample是分别用C和CUDA实现的类似prior vbox layer的操作&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;各个文件内容如下&#xff1a;common.hpp:#ifndef FBC_CUDA_TEST_COMMON_HPP_ #define FBC_CUDA_TEST_COMMON_HPP_#include <typeinfo> #inc…

如何成为一名成功的 iOS 程序员?

前言&#xff1a; 编程是一个仅靠兴趣仍不足以抵达成功彼岸的领域。你必须充满激情&#xff0c;并且持之以恒地不断汲取更多有关编程的知识。只是对编程感兴趣还不足以功成名就——众所周知&#xff0c;我们工作起来像疯子。 编程是一个没有极限的职业&#xff0c;所以要成为一…

C#之委托与事件

委托与事件废话一堆&#xff1a;网上关于委托、事件的文章有很多&#xff0c;一千个哈姆雷特就有一千个莎士比亚&#xff0c;以下内容均是本人个人见解。1. 委托1.1 委托的使用这一小章来学习一下怎么简单的使用委托&#xff0c;了解一些基本的知识。这里先看一下其他所要用到的…

24式加速你的Python

作者 | 梁云1991来源 Python与算法之美一、分析代码运行时间第1式&#xff0c;测算代码运行时间平凡方法快捷方法&#xff08;jupyter环境&#xff09;第2式&#xff0c;测算代码多次运行平均时间平凡方法快捷方法&#xff08;jupyter环境&#xff09;第3式&#xff0c;按调用函…

pip、NumPy、Matplotlib在Windows上的安装过程

Windows上Python 3.6.2 64位的安装步骤&#xff1a;1. 从 https://www.python.org/downloads/windows/ 下载Windows x86-64 executable installer(即python-3.6.2-amd64.exe)&#xff1b;2. 直接以管理员身份运行安装&#xff0c;勾选添加到环境变量、pip等即可。可以同时在Wi…

分享:个人是怎么学习新知识的

为什么80%的码农都做不了架构师&#xff1f;>>> 挺多童鞋问我是怎么学习新知识的&#xff0c;干脆写篇文章总结一下&#xff0c;希望对大家有所帮助。对照书、技术博客、极客时间等学习的方式我就不说了。 一、早期 在15年及更早&#xff0c;由于知识储备少&#x…

easyui的datagrid

datagrid数据的绑定方式&#xff1a; 1&#xff09;data 后跟数据行的json串 2&#xff09;url 后跟{"total":,"rows":,"foot":},其中total代码返回总行数&#xff0c;rows为数据行json串 .NET MVC&#xff0c;controll控制类方法中获取datagrid…

线性回归介绍及分别使用最小二乘法和梯度下降法对线性回归C++实现

回归&#xff1a;在这类任务中&#xff0c;计算机程序需要对给定输入预测数值。为了解决这个任务&#xff0c;学习算法需要输出函数f:Rn→R。除了返回结果的形式不一样外&#xff0c;这类问题和分类问题是很像的。这类任务的一个示例是预测投保人的索赔金额(用于设置保险费)&am…

4种最常问的编码算法面试问题,你会吗?

导语&#xff1a;面试是测查和评价人员能力素质的一种考试活动。最常问的编码算法面试问题你知道多少呢&#xff1f;作者 | Rahul Sabnis译者 | 苏本如&#xff0c;编辑 | 刘静来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;在许多采访中&#xff0c;我经常被要求…

[小梅的体验课堂]Microsoft edge canary mac版本体验

简介 华硕微软越来越没有自己的JC了&#xff0c;不经在windows里面加了wsl而且还废弃了自己的老edge浏览器&#xff0c;重新基于chromium内核开发了新的edge浏览器了&#xff0c;不管怎么说mac上又多了一款新的浏览器&#xff0c;对于一个爱好新鲜的我来说那就简单安装体验下 下…

SQL Server用户自定义函数

用户自定义函数不能用于执行一系列改变数据库状态的操作&#xff0c;但它可以像系统 函数一样在查询或存储过程等的程序段中使用&#xff0c;也可以像存储过程一样通过EXECUTE 命令来执行。在 SQL Server 中根据函数返回值形式的不同将用户自 定义函数分为三种类型&#xff1a;…