SVM面试知识点总结

1. SVM 原理

SVM 是一种二类分类模型。它的基本思想是在特征空间中寻找间隔最大的分离超平面使数据得到高效的二分类,具体来讲,有三种情况(不加核函数的话就是个线性模型,加了之后才会升级为一个非线性模型):

  • 当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机;
  • 当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,即线性支持向量机;
  • 当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。

2. SVM 为什么采用间隔最大化(与感知机的区别):

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

3. 为什么要将求解 SVM 的原始问题转换为其对偶问题

  • 一是对偶问题往往更易求解,当我们寻找约束存在时的最优点的时候,约束的存在虽然减小了需要搜寻的范围,但是却使问题变得更加复杂。为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,即拉格朗日函数,再通过这个函数来寻找最优点。
  • 二是可以自然引入核函数,进而推广到非线性分类问题。

4. 为什么 SVM 要引入核函数

当样本在原始空间线性不可分时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。而引入这样的映射后,所要求解的对偶问题的求解中,无需求解真正的映射函数,而只需要知道其核函数。核函数的定义:K(x,y)=<?(x),?(y)>,即在特征空间的内积等于它们在原始样本空间中通过核函数 K 计算的结果。一方面数据变成了高维空间中线性可分的数据,另一方面不需要求解具体的映射函数,只需要给定具体的核函数即可,这样使得求解的难度大大降低。

用自己的话说就是,在SVM不论是硬间隔还是软间隔在计算过程中,都有X转置点积X,若X的维度低一点还好算,但当我们想把X从低维映射到高维的时候(让数据变得线性可分时),这一步计算很困难,等于说在计算时,需要先计算把X映射到高维的的?(x),再计算?(x1)和?(x2)的点积,这一步计算起来开销很大,难度也很大,此时引入核函数,这两步的计算便成了一步计算,即只需把两个x带入核函数,计算核函数,举个列子一目了然:

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

5. 为什么SVM对缺失数据敏感

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

6. 如何选择核函数:

  • 当特征维数 d 超过样本数 m 时 (文本分类问题通常是这种情况), 使用线性核;
  • 当特征维数 d 比较小. 样本数 m 中等时, 使用RBF核;
  • 当特征维数 d 比较小. 样本数 m 特别大时, 支持向量机性能通常不如深度神经网络

7. SVM的目标(硬间隔):

有两个目标:第一个是使间隔最大化,第二个是使样本正确分类,由此推出目标函数:

稍微解释一下,w是超平面参数,目标一是从点到面的距离公式化简来的,具体不展开,目标二就相当于感知机,只是把大于等于0进行缩放变成了大于等于1,为了后面的推导方便。有了两个目标,写在一起,就变成了svm的终极目标:

8. 求解目标(硬间隔):

从上面的公式看出,这是一个有约束条件的最优化问题,用拉格朗日函数来解决。

上式的拉格朗日函数为:

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

先求内部最小值,对  和  求偏导并令其等于  可得:

将其代入到上式中去可得到

此时需要求解  ,利用SMO(序列最小优化)算法:

SMO算法的基本思路是每次选择两个变量,选取的两个变量所对应的样本之间间隔要尽可能大,因为这样更新会带给目标函数值更大的变化。SMO算法之所以高效,是因为仅优化两个参数的过程实际上仅有一个约束条件,其中一个可由另一个表示,这样的二次规划问题具有闭式解。

9. 软间隔:

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

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

函数图长这样:

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

但这个代价需要一个控制的因子,引入C>0,惩罚参数,即:

可以想象,C越大说明把错误放的越大,说明对错误的容忍度就小,反之亦然。当C无穷大时,就变成一点错误都不能容忍,即变成硬间隔。实际应用时我们要合理选取C,C越小越容易欠拟合,C越大越容易过拟合。

所以软间隔的目标函数为:

其中:

10. 软间隔求解:

与硬间隔类似:

上式的拉格朗日函数为:

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

先求内部最小值,对  ,  和  求偏导并令其等于  可得:

将其代入到上式中去可得到,注意  被消掉了:

此时需要求解  ,同样利用SMO(序列最小优化)算法。

11. 关于支持向量的问题:

1.先说硬间隔:

先看KKT条件

支持向量,对偶变量 αi > 0 对应的样本;

  • 线性支持向量机中, 支持向量是距离划分超平面最近的样本, 落在最大间隔边界上。

  • 支持向量机的参数 (w; b) 仅由支持向量决定, 与其他样本无关。

2. 再说软间隔:

先看kkt条件:

经过SMO后,求得  , 。

对于任意样本

,此样本点不是支持向量,该样本对模型没有任何的作用
,此样本是一个支持向量(同硬间隔)

若满足,进一步地,

  • , 则,即刚好,样本恰好在最大间隔边界上
  • ,有,此时若则该样本落在最大间隔内部
  • 则该样本落在最大间隔内部(不属于自己的另一部分)即被错误分类

如图:

12. 谈谈SVM的损失函数:

此处说的是软间隔:

先看软间隔的基本型形式:

稍微做一点变化:

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

其中:

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

13. SVM的优缺点:

优点:

  1. 由于SVM是一个凸优化问题,所以求得的解一定是全局最优而不是局部最优。
  2. 不仅适用于线性线性问题还适用于非线性问题(用核技巧)。
  3. 拥有高维样本空间的数据也能用SVM,这是因为数据集的复杂度只取决于支持向量而不是数据集的维度,这在某种意义上避免了“维数灾难”。
  4. 理论基础比较完善(例如神经网络就更像一个黑盒子)。

缺点:

  1. 二次规划问题求解将涉及m阶矩阵的计算(m为样本的个数), 因此SVM不适用于超大数据集。(SMO算法可以缓解这个问题)
  2. 只适用于二分类问题。(SVM的推广SVR也适用于回归问题;可以通过多个SVM的组合来解决多分类问题)


参考文献:https://zhuanlan.zhihu.com/p/76946313

原文地址:https://www.cnblogs.com/XDU-Lakers/p/11698303.html

时间: 2024-10-15 02:01:42

SVM面试知识点总结的相关文章

Android面试知识点(转)

该文所有问题转自:http://www.cnblogs.com/hpboy/p/3307371.html 一.算法,数据结构 1.排序算法 2.查找算法 3.二叉树 4.广度,深度算法: 二.java基础 1.集合Collection,List,Map等常用方法,特点,关系: 2.线程的同步,中断方式有几种,线程池,线程状态,常用的方法比较,比如wait,sleep等: 3.反射机制 4.IO包的使用,运用了什么设计模式 5.设计模式,常用的设计模式,运用场景: 6.内存管理,引用的种类: 7.

L--前端开发面试知识点(HTML相关)

简介 前端开发面试知识点大纲: HTML&CSS: 对web标准的理解.浏览器内核的差异.兼容性.hack.css基本功:布局.盒子模型.选择器优先级及使用.HTML5.CSS3.移动端适应. javascript: 数据类型.面向对象.继承.闭包.插件.作用域.跨域.原型链.模块化.自定义事件.内存泄露.事件机制.异步装载回调.模板引擎.nodejs.JSON.ajax 其他:HTTP.安全.正则.优化.重构.响应式.移动端.团队协作.可维护.SEO.UED.架构.职业生涯 1.请你谈谈Coo

Java---常用基础面试知识点

综合网上的一点资源,给大家整理了一些Java常用的基础面试知识点,希望能帮助到刚开始学习或正在学习的学员. 1.抽象 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象. 2.继承 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法. 对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继 承了原始类的特性,新

Java 面试知识点解析(二)——高并发编程篇

前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大部分内容参照自这一篇文章,有一些自己补充的,也算是重新学习一下 Java 吧. 前序文章链接: Java 面试知识点解析(一)--基础知识篇 (一)高并发编程基础知识 这里涉及到一些基础的概念,我重新捧起了一下<实战 Java 高并发程序设计>这一本书,感觉到心潮澎湃,这或许就是笔者叙述功底扎实的

关于Java面试知识点解析——JVM基础篇

跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽.切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来(期间也没有准备充分),到底是因为技术原因(影响自己的发展,偏移自己规划的轨迹),还是钱给少了,不受重视. 准备不充分的面试,完全是浪费时间,更是对自己的不负责(如果title很高,当我没说).今天给大家分享下 Java面试知识点解析--JVM基础篇 1)Java 是如何实现跨平台的? 注意:跨平台的是 Java 程序,而不是 JVM.JVM 是用 C/C++ 开发的,是

【数据库】数据库面试知识点汇总

转自:https://www.cnblogs.com/wenxiaofei/p/9853682.html 数据库面试知识点汇总 一.基本概念 1.主键.外键.超键.候选键 超键:在关系中能唯一标识元组的属性集称为关系模式的超键.一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键.超键包含候选键和主键. 候选键:是最小超键,即没有冗余元素的超键. 主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合.一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Nul

怎么掌握安卓中高级开发面试知识点?缓存重点都在这!

前言 之前早就说要整理一个集合方便大家,还好没有拖到2020年BATJ.字节跳动面试专题,算法专题,高端技术专题,混合开发专题,java面试专题,Android,Java小知识,到性能优化.线程.View.OpenCV.NDK等已经上传到了的我的GitHub 大家点击我的GitHub地址:https://github.com/Meng997998/AndroidJX点下star一起学习 好了今天就跟着我来,告诉你缓存重点,一起熟练掌握安卓中高级开发面试知识点! 我们都知道,几乎所有的项目都做了缓

面试--知识点2

1.1 JAVA基础 面向对象和面向过程的区别 Java 语言有哪些特点 关于 JVM JDK 和 JRE 最详细通俗的解答 Oracle JDK 和 OpenJDK 的对比 List 和 Set 的区别 什么是 Java 程序的主类 应用程序和小程序的主类有何不同 Java 应用程序与小程序之间有那些差别 字符型常量和字符串常量的区别 Java 面向对象编程三大特性: 封装 继承 多态 构造器 Constructor 是否可被 override Arrays.sort 实现原理和 Collec

前端面试知识点集锦

个人总结的比较全面的前端面试知识点.主要是一些个人认为面试时容易考到以及平时需要注意的一些知识点. 本人只是对这些知识进行了一个大概的总结,还有一部分技术还没开始涉及,后期会持续添加.如果需要进行深入了解可以根据知识点查询相关的技术文章. 本文涵盖了以下各个方面的知识: HTML, CSS, JS基础知识 网站性能优化知识 前端项目自动化构建相关知识 算法相关知识 网络与HTTP协议相关知识 前端的安全相关知识 插件编写相关知识 JS模块化编程相关知识 Github Repo:https://g