机器学习 | 支持向量机

news2024/12/23 1:15:41

一.基本原理

SVM是一种二分类模型

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

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

二.优缺点

优点

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

缺点

  • 二次规划问题求解将涉及m阶矩阵的计算(m为样本的个数),因此SVM不适用于超大数据集(SMO算法将可以缓解这个问题)
  • 只适用于二分类问题(SVM的推广SVR也适用于回归问题;可以通过多个SVM的组合来解决多分类问题)
  • 模型预测时,预测时间与支持向量的个数成正比。当支持向量的数量较大时,预测计算复杂度较高。因此支持向量机目前只适合小批量样本的任务,无法适应百万甚至上亿样本的任务

三.适用场景

  • 在很多数据集上都有优秀的表现。相对来说,SVM尽量保持与样本间距离的性质导致它抗攻击的能力更强。和随机森林一样,这也是一个拿到数据就可以先尝试一下的算法
  • 小样本,不要求数据分布,主要用于二分类问题

四.常见面试题

1. SVM与感知机的区别?

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

2.为什么SVM要引入核函数?

当样本在原始空间线性不可分时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分

引入这样的映射后,所要求解的对偶问题的求解中,无需求解真正的映射函数,而只需要知道其核函数

3.如何选择核函数?

  • 当特征维数超过样本数(文本分类问题通常是这种情况),使用线性核
  • 当特征维数比较小,样本数中等时,使用RBF核
  • 当特征维数比较小,样本数特别大时,SVM通常不如深度神经网络
  • 线性核:主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果很理想
  • RBF核:主要用于线性不可分的情形。参数多,分类效果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。个人体会是使用libsvm,默认参数,RBF核比线性核效果稍差,通过进行大量参数的尝试,一般能找到比线性核更好的效果
  • 到底该采用哪种核,要根据具体问题,有的数据是线性可分的,有的不可分,需要多尝试不同核不同参数。如果特征提取的好,包含的信息量足够大,很多问题都是线性可分的。当然,如果有足够的时间去寻找RBF核参数,应该能达到更好的效果

4.为什么SVM对噪声及缺失数据敏感?

  • 当噪声出现的过多的话,或者当噪声出现并成为支持向量的时候,噪声对模型的影响是巨大的
  • 这里说的缺失数据是指缺失某些特征数据,向量数据不完整。SVM没有处理确实值得策略。而SVM希望样本在特征空间中线性可分,所以特征空间的好坏对SVM的性能重要,缺失特征数将影响训练结果的好坏

5.SVM目标函数和约束怎么得来的?

6.SVM为什么采用间隔最大化?

  • 当训练数据线性可分时,存在无穷个分离超平面可以将两类数据正确分开
  • 感知机利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个
  • 线性可分支持向量机利用间隔最大化求得最优分离超平面,这时,解是唯一的。另一方面,此时的分隔超平面所产生的分类结果是最鲁棒的,对未知实例的泛化能力最强
  • 然后应该借此阐述,几何间隔,函数间隔,及从函数间隔—>求解最小化1/2 ||w||^2 时的w和b。即线性可分支持向量机学习算法—最大间隔法的由来

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

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

8.SVM中参数C的理解

把这个参数C理解为调节优化方向中两个指标(间隔大小,分类准确度)偏好的权重。soft-margin SVM针对hard-margin SVM容易出现的过度拟合问题,适当放宽了margin的大小,容忍一些分类错误(violation),把这些样本当做噪声处理,本质上是间隔大小和噪声容忍度的一种trade-off,至于具体怎么trade-off,对哪个指标要求更高,那就体现在C这个参数上了

9.SVM是否适合大规模数据? 

10.kernel在SVM扮演什么角色?

11.SVM属于神经网络的范畴吗?

把这个参数C理解为调节优化方向中两个指标(间隔大小,分类准确度)偏好的权重。soft-margin SVM针对hard-margin SVM容易出现的过度拟合问题,适当放宽了margin的大小,容忍一些分类错误(violation),把这些样本当做噪声处理,本质上是间隔大小和噪声容忍度的一种trade-off,至于具体怎么trade-off,对哪个指标要求更高,那就体现在C这个参数上了

12.不平衡样本会对SVM的结果产生影响吗?怎么解决?

不平衡样本会对结果产生影响,超平面会靠近样本少的类别。原因是:使用的是软间隔分类,而如果所有的类别都使用同样的惩罚系数,则由于优化目标里面最小化惩罚量,所以靠近少数样本时,其惩罚量会小一些

解决方法为:

  • 对正例和负例赋予不同的C值,例如正例远少于负例,则正例的C值取得较大,这种方法的缺点是可能会偏离原始数据的概率分布
  • 对训练集的数据进行预处理即对数量少的样本以某种策略进行采样,增加其数量或者减少数量多的样本,典型的方法为:随机插入法,缺点是可能出现过拟合,较好的是SMOTE,其缺点是只能应用在具体的特征空间中,不适合处理那些无法用特征向量表示的问题,当然增加样本也意味着训练时间可能增加
  • 基于核函数的不平衡数据处理

13.SVM如何处理多分类问题?

直接法:直接在目标函数上修改,将多个分类面的参数求解合并到一个最优化问题里面,看似简单但是计算量却非常大

间接法:对训练器进行组合,其中比较典型的是一对一和一对多

  • 一对多:就是对每个类都训练出一个分类器,由于SVM是二分类,所以将此二分类器的两类设定为目标类为一类,其余类为另外一类。这样针对K个类可以训练出K个分类器,当有一个新的样本来的时候,用这K个分类器来测试,哪个分类器的概率高,那么这个样本就属于哪一类。这种方法效果不好,偏差比较高
  • 一对一:针对任意两个类训练出一个分类器,如果有K类,一共训练出C(2,K)个分类器,这样当有一个新的样本要来的时候,用这C(2,K)个分类器来测试,每当被判定属于某一类的时候,该类就加一,最后票数最多的类别被认定为该样本的类

14.libSVM和libLinear有什么区别?

  • libSVM是一套完整的SVM模型实现。用户可以在libSVM中使用核函数来训练非线性的分类器,当然也能使用更基础的线性SVM。而libLinear是一个针对线性分类场景而设计的工具包,除了支持线性的SVM外,还可以支持线性的逻辑回归等模型,但是无法通过定义核函数方式实现非线性的分类器
  • 由于支持核函数的扩展,libSVM理论上具有比libLinear更强的分类能力,能够处理更为复杂的问题。但是很多人因此就只使用libSVM,甚至最简单的线性分类器都使用libSVM来训练和预测,这也是不可取的。因为libLinear设计的初衷就是为了提高线性分类的效率,其优化算法与libSVM中的优化算法有着根本的区别。虽然在进行线性分类时libSVM和libLinear都可以达到类似的结果,但是libLinear无论是在训练上还是预测上,都比libSVM高效的多
  • 受限于算法,libSVM往往在样本量过万之后速度就比较慢了,如果样本量再上升一个数量级,那么通常的机器已经无法处理了。但使用libLinear则完全不需要有这方面的担忧,即便是百万千万级别的数据,libLinear也可以轻松搞定,因为libLinear本身就是为了解决较大规模样本的模型训练而设计的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/111659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

玩以太坊链上项目的必备技能(Constant 和 Immutable 状态变量-Solidity之旅十六)

constant(常量) 说到常量这一概念,拥有现代编程经历的您,对这一词再熟悉不过了。 常量,常量,顾名思义便是变量值始终不变,这在很多面向对象程序语言中都有。 相对 Solidity 来说,…

Web入门开发【六】- 域名认证

欢迎来到霍大侠的小院,我们来学习Web入门开发的系列课程。 首先我们来了解下这个课程能学到什么? 1、你将可以掌握Web网站的开发全过程。 2、了解基础的HTML,CSS,JavaScript语言。 3、开发自己的第一个网站。 4、认识很多对编…

LabVIEW如何减少下一代测试系统中的硬件过时2

LabVIEW如何减少下一代测试系统中的硬件过时2 HAL最佳实践 从通用测试函数中分离测试逻辑 一个重要的最佳实践是将特定于dut的测试逻辑与更通用的、可重用的测试模块分离,以提高重用性并减少重新验证和文档成本。解耦和使层模块化可以改进系统架构,使…

08 面向对象三大特性

目录 一 封装 1.1 概述 1.2 为什么要进行封装? 1.3 Java中的封装 1.4 四种访问权限修饰符 1.5 练习 二 继承 2.1 继承的由来 2.2 继承的好处 2.3 语法格式 2.4 继承的特点之一:成员变量 2.4.1 父类成员变量私有化 2.4.2 父类和子类成员变量…

二维刚体变换

欢迎访问我的博客首页。 二维刚体变换1. 二维旋转矩阵2. 参考1. 二维旋转矩阵 二维世界坐标系中任一点 P(x,y)P(x, y)P(x,y) 绕原点逆时针旋转 θ\thetaθ 度到点 P′(x′,y′)P(x, y)P′(x′,y′),这个旋转可以用一个二维矩阵表示 R逆[cosθ−sinθsinθcosθ].(1.…

女文科生转行做程序员,工资涨了4倍,戏说“我是女生”怕啥秃顶

前几天,有一个女生在后台留言,问她要不要毕业后做程序员工作?自己特别纠结。 情况是这样的:她今年大学毕业,学计算机专业,有一定兴趣,但父母比较反对,列举了很多程序员熬夜加班的痛…

Fragment案例

Fragment案例 1.案例要求 框架布局项目难点:1 导航栏的实现,显示导航按钮、切换Fragment 2 每个Fragment的创建、显示 3 Fragment的跳转(从新闻列表到新闻详情,再返回) 涉及的技术:用RadioGroup及RadioButt…

【学习笔记07】vue3移动端的适配

目录1、创建一个项目并启动2、设置根字体大小和单位转化3、去掉边框距离4、css的嵌套使用5、连接到手机上显示6、vant ui 库的使用6.1 基础用法6.2 底部导航栏7、模拟锤子商城7.1 请求数据7.2 解决跨越7.3 组件切换7.4 轮播图的实现1、创建一个项目并启动 npm init vuelatestcd…

【OpenCV-Python】教程:7-4 KMeans 应用

OpenCV Python KMeans 应用 【目标】 使用 cv2.kmeans 对数据进行聚类 【代码】 1. 单个特征的 KMeans # 单特征数据的聚类 import numpy as np import cv2 from matplotlib import pyplot as pltx np.random.randint(25,100,25) y np.random.randint(175,255,25)z np.h…

Linux系统下管理员账号root忘记密码怎么找回

忘记root密码一般有两种情况: 一种是登上了root账号,但是忘记密码了,这种情况比较简单,在终端即可实现修改密码; 一种是登录不上root账号,这种情况稍微麻烦些,需要开机时进行一系列操作。 不能登…

【源码共读】Css-In-Js 的实现 classNames 库

classNames是一个简单的且实用的JavaScript应用程序,可以有条件的将多个类名组合在一起。它是一个非常有用的工具,可以用来动态的添加或者删除类名。 仓库地址:classNames 使用 根据classNames的README,可以发现库的作者对这个…

Spring 事务失效的常见八大场景,注意避坑

1. 抛出检查异常导致事务不能正确回滚 Servicepublic class Service1 {Autowiredprivate AccountMapper accountMapper;Transactionalpublic void transfer(int from, int to, int amount) throws FileNotFoundException {int fromBalance accountMapper.findBalanceBy(from);…

【源码共读】学习 axios 源码整体架构 (II)

源码分析 跳转至Axios.js文件中 // 构造函数 constructor(instanceConfig) {this.defaults instanceConfig// 创建对应的拦截器this.interceptors {request: new InterceptorManager(),response: new InterceptorManager()} } 那么,拦截器是怎么创建的呢 首先&a…

【云服务器 ECS 实战】一文掌握弹性伸缩服务原理及配置方法

1. 弹性伸缩概述2. 实现模式3. 基于 GRE 实现 VPC 的互联4. 弹性伸缩服务的配置使用4.1 创建伸缩组4.2 伸缩配置4.3 创建伸缩规则1. 弹性伸缩概述 弹性伸缩(Auto Scaling)就是自动为我们调整弹性计算资源大小,以满足业务需求的变化&#xff…

javaee之spring1

什么是Spring 一、Spring的优势 二、Spring的体系结构 先说一下从什么位置去下载Spring的源码 进入Spring官网,找到Spring Framework框架 点进去之后,找到如下位置,继续点击 进去之后,继续下拉,找到下面这个位置点进…

慕了,我要是早点看到这篇写 Kafka 的分区管理的文章就好了

Kafka可以将主题划分为多个分区(Partition),会根据分区规则选择把消息存储到哪个分区中,只要如果分区规则设置的合理,那么所有的消息将会被均匀的分布到不同的分区中,这样就实现了负载均衡和水平扩展。另外…

可以做抽奖活动的微信小程序在哪里做_分享抽奖活动小程序制作步骤

越来越多的企业开始了解微信抽奖游戏的实用性和价值,因为用户更喜欢简单有趣的游戏抽奖方式,如大转盘、摇一摇、抢福袋、砸金蛋、摇一摇、刮刮卡等互动抽奖游戏。 如果企业想制作这种抽奖游戏,都倾向使用市场上的各种抽奖制作软件&#xff0c…

(Java)车厢重组

车厢重组一、题目描述二、输入格式三、输出格式四、样例(1)样例输入(2)样例输出五、正确代码六、思路一、题目描述 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最…

网络技术——网络运维工程师必会的网络知识(2)(详细讲解)

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 网络传输介质 信号分类和失真 双绞线分类: 双绞线…

非计算机专业,可以学好编程吗?

现在IT行业越来越火热,想要学习编程的人也越来越多。IT行业的薪资连续好几年赶超金融行业,位居行业之首,有太多人转行跨界,想要进入这个领域,那么作为初学者的你,是不是也很困惑,非科班&#xf…