SVM算法的介绍

news2024/12/23 9:49:45

一、SVM算法的介绍

1.什么是SVM算法?

SVM(Support Vector Machine)是一种常见的监督学习算法,用于进行二分类或多分类任务。它的主要思想是找到一个最优的超平面,将不同类别的样本分隔开

在这里插入图片描述

超平面最大间隔介绍:

在这里插入图片描述

上左图显示了三种可能的线性分类器的决策边界:

虚线所代表的模型表现非常糟糕,甚至都无法正确实现分类。其余两个模型在这个训练集上表现堪称完美。

但是它们的决策边界与实例过于接近,导致在面对新实例时,表现可能不会太好

右图中的实线代表SM分类器的决策边界,不仅分离了两个类别,且尽可能远离最近的训练实例

2.硬间隔和软间隔
  • 硬间隔

    硬间隔指的是当数据线性可分时,支持向量机通过寻找一个可以完全将不同类别的样本分开的超平面。在硬间隔中,SVM的目标是使所有样本都满足线性约束条件,即样本点距离超平面的距离大于等于一个阈值,通常为1。这意味着所有样本都应该被正确分类,并且没有容忍错误分类的余地。硬间隔适用于数据线性可分的情况,但对于噪声和离群点较多的数据集,可能会导致过拟合。

    当有一个异常值的鸢尾花数据:左图的数据根本找不出硬间隔,而右图最终显示的决策边界与我们之前所看到的无异常值时的决策边界也大不相同,可能无法很好地泛化。

    在这里插入图片描述

  • 软间隔

    软间隔是为了处理线性不可分的情况而引入的概念。当数据线性不可分时,硬间隔会导致无法找到满足线性约束的超平面。软间隔允许一些样本点出现在超平面的错误一侧,通过引入松弛变量(Slack Variable)来允许一定程度的错误分类。软间隔的目标是在尽量保持数据分离的同时,最小化错误分类和松弛变量的总和。软间隔允许一定程度的容忍错误分类,从而增加模型的鲁棒性和泛化能力

    软间隔的引入使得支持向量机可以处理线性不可分的情况,并且对噪声和离群点具有一定的容错能力。然而,软间隔引入了一个新的调节参数C,用于平衡间隔大小和错误分类的权重。较大的C值将更加关注正确分类,而较小的C值将更加容忍错误分类。合理选择C值可以有效控制模型的偏差和方差。

    如下图所示,左边使用了高C值,分类器的错误样本较少,但是间隔也较小;右边使用的低C值,间隔大了很多,但是位于间隔上的实例也更多,看起来右图更加容忍错误分类(泛化效果更好)。

    在这里插入图片描述

总结起来,硬间隔适用于线性可分的数据,要求没有错误分类;软间隔适用于线性不可分的数据,通过引入松弛变量允许一定程度的错误分类。选择硬间隔还是软间隔要根据数据的线性可分性以及噪声和离群点的情况来决定。

3.SVM的基本原理
  1. 数据表示:SVM将每个样本表示为特征向量,并将其映射到一个高维特征空间。在特征空间中,样本通过特征向量表示,每个特征表示一个维度。
  2. 构建超平面:SVM寻找一个最优的超平面,将不同类别的样本分开。超平面是一个维数比样本少一的线性子空间。对于二分类任务,超平面将数据划分为两个类别;对于多分类任务,可以使用多个超平面进行分割。
  3. 最大化间隔:SVM的目标是找到一个能够最大化不同类别样本之间的间隔(即支持向量)的超平面。间隔是指离超平面最近的样本点到超平面的距离。
  4. 核函数:当数据不是线性可分时,SVM可以使用核函数将数据映射到更高维的特征空间,从而使数据线性可分。常用的核函数包括线性核、多项式核和高斯核等。
  5. 模型训练和预测:SVM通过最优化问题来训练模型,通常使用凸优化方法求解。训练完成后,可以用于对新样本进行分类预测。
4.SVM的三种损失函数

在这里插入图片描述

左边的二维图像,横标代表y的值,纵标代表误差。

右边的图像是超平面的图像。

  • 绿色:0/1损失
    • 当正例的点落在y=0这个超平面的下边,说明是分类正确,无论距离超平面多远多近,误差都是0;
    • 当这个正例的样本点落在y=0的上方的时候,说明分类错误,无论距离多远多近,误差都是1;
    • 图像就是上面绿色线。
  • 蓝色:SVM Hinge损失函数
    • 当一个正例的点落在y=1的直线上,距离超平面长度1,那么误差就为0;
    • 当它落在距离超平面0.5的地方,误差就为0.5;
    • 当他落在y=0上的时候,距离超平面为0,误差就为1;
    • 当这个点落在了y=0的上方,被误分到了负例中,距离算出来应该是负的,比如距离为-0.5,那么误差就为1.5;
    • 以此类推,画在二维坐标上就是上图蓝色的那条线。
  • 红色:Logistic损失函数
    • 损失函数的公式为:ln(1+e^(-yi));
    • 当yi=0时,损失等于ln2,这样的话损失函数的图像有点丑,所以我们给损失函数再除以ln2;
    • 这样当yi=0时,损失为1,即损失函数的图像过(0,1)点;
    • 对应的损失函数图像是上面红色的线。

SVM Hinge 损失函数是比较常用的损失函数。

5.什么是核函数?

在支持向量机(SVM)算法中,核函数是一种用于处理非线性问题的技术。它通过将原始特征映射到一个高维特征空间,从而使数据在高维空间中线性可分。

核函数的作用是将原始数据从低维空间映射到高维空间,通过非线性映射使得数据在高维空间中呈现线性可分的特性。在高维空间中,支持向量机可以找到一个超平面来分割不同类别的样本。

在这里插入图片描述

比如左上面这张图,在二维空间中,无法找到一个超平面来分割红色和蓝色样本。但如果把这些数据映射到三维空间中,如右上图所示,此时就可以找到一个超平面来分割这两种数据。

核函数的一般形式为:
K ( x , y ) = φ ( x ) ⋅ φ ( y ) K(x, y) = φ(x)·φ(y) K(x,y)=φ(x)φ(y)
其中,K(x, y) 表示核函数的计算结果,x 和 y 是原始特征空间中的样本点,φ(·) 表示映射函数。

核函数的选择非常重要,不同的核函数会对数据的映射效果和最终的分类结果产生影响。常用的核函数有以下几种:

  1. 线性核函数(Linear Kernel):线性核函数是最简单的核函数,它只进行内积计算,不进行任何映射操作。适用于线性可分问题
  2. 多项式核函数(Polynomial Kernel):多项式核函数将数据映射到高维空间,并使用多项式函数进行计算。它在原始特征的基础上引入了高次项,可以处理一些非线性问题
  3. 高斯核函数(Gaussian Kernel):高斯核函数也称为径向基函数(Radial Basis Function,RBF核函数),它是常用的核函数之一。高斯核函数通过计算样本点与支持向量之间的距离,构建一个类似于高斯分布的权重。它能够有效处理复杂的非线性问题
  4. Sigmoid核函数(Sigmoid Kernel):Sigmoid核函数使用了一个sigmoid函数,可以将数据映射到一个S形曲线上。它可以处理一些非线性可分问题,但在实际中使用较少

选择适当的核函数取决于数据的特性和问题的性质,一般有如下规则

  • 如果特征数量很大,甚至和样本数量差不多时,往往线性可分,这时选用逻辑回归(LR)或者线性核函数
  • 如果特征数量很小样本数量正常,不多也不少,可以选用高斯核函数(RBF)
  • 如果特征数量很小,而样本数量很大,这是可以手动添加一些特征,使得线性可分,然后选用逻辑回归或者线性核函数
  • 多项式核函数一般很少用,效率不高,结果也不优于高斯核函数;
  • 线性核函数参数少,速度快;高斯核函数参数多,分类结果非常依赖于参数,需要交叉验证或者网格搜索最佳参数,比较耗时;
  • 高斯核函数的应用非常广,无论是小样本还是大样本,高维还是低维等情况,高斯核函数均适用。
6.SVM算法的优缺点
  • 优点:
    • 在高维空间中处理非线性问题:通过使用核函数,SVM可以将数据映射到高维特征空间中,从而处理非线性问题。
    • 有效处理小样本数据集:SVM在小样本数据集上表现出色,并且对于样本维度较高的问题也适用。
    • 泛化能力强:SVM通过最大化间隔来选择最优超平面,可以有效地避免过拟合。
  • 缺点:
    • 对于大规模数据集计算复杂度高:SVM在处理大规模数据集时,需要较高的计算资源和时间。
    • 参数选择敏感:SVM的性能受到参数选择的影响,如选择核函数和正则化参数等。
    • 对于噪声和缺失数据敏感:SVM对于噪声和缺失数据比较敏感,需要进行适当的数据预处理。

综上所述,SVM是一种强大的分类算法,尤其适用于小样本数据集和高维特征空间。它在许多领域都有广泛的应用,包括图像分类、文本分类、生物信息学等。

二、SVM算法的API介绍

1.SVM算法API综述
  • SVM算法既可以用于分类问题,也可以用于回归和异常值检测问题。

  • SVM具有良好的鲁棒性,对未知数据拥有较强的泛化能力,特别是在数据量较少的情况下,相较于其他传统机器学习算法具有更优的性能。

sklearn中支持向量分类主要有三种方法:SVC、NuSVC、LinearSVC,扩展为三个支持向量回归的方法为:SVR、NuSVR、LinearSVR。

  • SVC和NuSVC方法基本一致,唯一区别就是损失函数的度量方式不同。
    • NuSVC中的nu参数和SVC中的C参数
  • LinearSVC是实现线性核函数的支持向量分类,没有kernel参数。
2.使用SVM模型时,通常采用以下流程:
  1. 对样本数据进行归一化处理;
  2. 应用核函数对样本进行映射(样本线性可分时,采用线性核函数;样本线性不可分时,采用高斯核函数(RBF));
  3. 若采用高斯核函数的话,需要用交叉验证和网格搜索选择最佳参数;
  4. 用最优参数训练得到模型;
  5. 模型评估。
3.SVC

class sklearn.svm.SVC(C=1.0, kernel=“rbf”, degree=3, coef0=0.0, random_state=None)

  • C:惩罚系数,用来控制损失函数的惩罚系数,类似于线性回归中的正则化系数。

    • C值大,惩罚力度大,趋向于对训练集全分对的情况。这样会出现训练集测试时的准确率很高,但泛化能力弱,容易导致过拟合。
    • C值小,惩罚力度小,容错能力增强,泛化能力较强,但也可能欠拟合。
  • kernel:算法中采用的核函数类型,核函数是用来将非线性问题转化为线性问题的一种方法。

    • 默认值是“RBF”,高斯核函数
    • Linear指的是线性核函数
    • Poly指的是多项式核函数
    • Sigmoid指的是双曲正切函数tanh核函数
  • degree:

    • 当指定kernel为“Poly”时,表示选择的多项式的最高次数,默认为三次多项式。
    • 当指定kernel不是“Poly”时,则忽略该参数。
  • coef0:核函数常数值(y=kx+b中的b值,即偏置)

    • 只有Poly和Sigmoid核函数中有,默认值为0
4.NuSVC

class sklearn.svm.NuSVC(nu=0.5)

  • nu:训练误差部分的上限和支持向量部分的下限,取值在(0,1)之间,默认值为0.5。
5.LinearSVC

class sklearn.svm.LinearSVC(penalty=“l2”, loss=“squared_hinge”, dual=True, C=1.0)

  • penalty:正则化参数
    • L1和L2两种参数值
  • loss:损失函数
    • 有hinge和squared_hinge两种值,前者又称L1损失,后者称为L2损失,默认值是squared_hinge。
    • 其中hinge是SVM的标准损失,squared_hinge是hinge的平方
  • dual:是否转化为对偶问题求解,默认值为True。
  • C:惩罚系数。
    • 用来控制损失函数的惩罚系数。

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

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

相关文章

MyBatisPlus快速入门

MyBatisPlus 1、MyBatisPlus简介MyBatisPlus概述入门案例 2、标准数据层开发MyBatisPlus开启日志标准CRUD分页查询 3、DQL编程控制条件查询null值处理查询投影查询条件字段映射与表名映射 4、DML编程控制id生成策略控制多数据操作逻辑删除乐观锁 5、代码生成器 1、MyBatisPlus简…

testng介绍

1、java.lang.Exception: No runnable methods at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods IDEA run case抛出no runnable methods,project基于testng编写case 需要配置Run→Edit Configuration 2、task配置 test {useTestNG {//打印…

Vector-常用CAN工具 - CANoe迁移常见Port配置问题

从 CANoe 和 CANalyzer 12.0 SP4 版本开始,以太网迁移向导将在必要时自动开始将现有工具配置转换为新的基于端口的网络访问格式。尽管大多数现有配置都可以毫无问题地转换,但有些可能不会。如果在迁移过程中遇到问题,迁移向导将通过以下可能的…

LeetCode刷题(ACM模式)-04字符串

参考引用:代码随想录 注:每道 LeetCode 题目都使用 ACM 代码模式,可直接在本地运行,蓝色字体为题目超链接 1. 反转字符串 344. 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形…

PAT A1162 Postfix Expression

1162 Postfix Expression 分数 25 作者 陈越 单位 浙江大学 Given a syntax tree (binary), you are supposed to output the corresponding postfix expression, with parentheses reflecting the precedences of the operators. Input Specification: Each input file …

权限管理与Shiro入门

权限管理与Shiro入门 学习目标: 理解前端权限控制思路 理解有状态服务和无状态服务通过拦截器实现JWT鉴权 能够理解shiro以及shiro的认证和授权 前端权限控制 需求分析 需求说明 基于前后端分离的开发模式中,权限控制分为前端页面可见性权限与后…

操作系统复习3.1.1-内存非连续存储

基本分页存储管理 背景 固定分区带来的是内部内存碎片难以利用 而动态分配带来的外部内存碎片难以利用 而基本分页存储管理解决了这个问题,将一个进程分散地装入不同分区,避免了紧凑的处理 思想 将一个进程(43MB)装入内存,一个分页大小为…

【fluent】利用UDF和Scheme变量实现根据条件满足情况保存dat、case数据案例文件

一、问题背景 前一段时间在闲鱼上,遇到有一个人问我“在udf中如何实现某一个变量满足一定取值范围内才保存dat和case文件”。 而后我帮他解决了这个问题,在此处也将解决办法公益性地分享出来。 主要参考的是CFD online上的一篇讨论fluent udf, saving…

chatgpt赋能python:Python函数:介绍及应用

Python函数:介绍及应用 Python是一种功能强大的编程语言。函数是Python编程中最常用的组件之一。函数是用来执行特定的程序并返回结果的工具,可以在一个程序中调用多次。在本文中,我们将介绍Python函数的应用和使用方法。 Python函数的定义…

ant-design-vue将英文改为中文 DatePicker日期控件

ant-design设置DatePicker日期控件中文显示 ant-design-vue将英文改为中文 我们在使用 ant-design-vue 的时候 会遇到默认的语言是 英语 大部分我们需要转成为中文 这时候我们就需要进行配置 首先我们改单一组件的语言&#xff1a; <template><a-date-picker v-model:…

互联网医院牌照申请条件|互联网医院牌照申请流程

​ 随着互联网技术的迅速发展&#xff0c;互联网医院已成为医疗服务领域的重要组成部分。互联网医院是指通过互联网提供医疗服务的机构&#xff0c;其开展医疗业务需经过相关管理部门的批准&#xff0c;且必须持有互联网医院牌照。 申请条件 互联网医院牌照的申请条件如下&a…

互联网医院资质的申请条件和流程有哪些

​随着互联网的快速发展&#xff0c;互联网医疗逐渐成为了医疗行业的重要组成部分&#xff0c;互联网医院也因此出现了。互联网医院是指通过网络技术&#xff0c;开展远程医学服务、健康管理、医学教育等活动的医疗机构。 互联网医院牌照申请需要的资料和条件 要想成功申请互…

压缩感知重构之分段正交匹配追踪算法

算法的重构是压缩感知中重要的一步&#xff0c;是压缩感知的关键之处。因为重构算法关系着信号能否精确重建&#xff0c;国内外的研究学者致力于压缩感知的信号重建&#xff0c;并且取得了很大的进展&#xff0c;提出了很多的重构算法&#xff0c;每种算法都各有自己的优缺点&a…

Arthas-Class/Classloader相关命令使用

tip&#xff1a;作为程序员一定学习编程之道&#xff0c;一定要对代码的编写有追求&#xff0c;不能实现就完事了。我们应该让自己写的代码更加优雅&#xff0c;即使这会费时费力。 开头&#xff1a; 我们先说下生产使用频率较高的有哪些&#xff1a;dump、jad、mc、retransfo…

FMEA教程

1. 2. 3. 4. 5. PFMEA是“过程失效模式与后果分析”的英文“Process Failure Mode and Effect Analysis”的缩写。为了更好地促进AQP PFMEA软件的应用&#xff0c;我们将以系列文章分享运用AQP PFMEA软件有效开展PFMEA工作的理念和方法&#xff0c;同时系统性介绍AQP PFMEA软…

leetcode96--不同的二叉搜索树[java]

不同的二叉搜索树 leetcode 96 题 不同的二叉搜索树题目描述暴力递归解题思路代码演示执行效率 递归 缓存解题思路代码演示执行效率 动态规划专题 leetcode 96 题 不同的二叉搜索树 原题链接: 难度—中等 https://leetcode.cn/problems/unique-binary-search-trees/ 题目描述 …

chatgpt赋能python:分解gif:使用Python将动态图片拆分成单帧图片

分解gif&#xff1a;使用Python将动态图片拆分成单帧图片 随着互联网上图片的使用越来越普遍&#xff0c;动态图片也成为了大家经常使用的图片之一。GIF动态图作为一种常见的动态图片格式&#xff0c;有时需要将其拆分成单帧图片&#xff0c;以便于使用或修改其中的某一帧。本…

目标检测笔记(九):详细介绍并实现可视化深度学习中每层特征层的网络训练情况

文章目录 为什么要解析特征层如何可视化特征层可视化结果如何 ❤️ &#x1f9e1; &#x1f49b; &#x1f49a; &#x1f499; &#x1f49c; &#x1f5a4; &#x1f90d; &#x1f90e; &#x1f494; ❣️ &#x1f495; &#x1f49e; &#x1f493; &#x1f497; &#…

SpringCloud(三)

文章目录 Eureka注册中心Eureka的结构和作用搭建eureka-server创建eureka-server服务引入eureka依赖编写启动类编写配置文件启动服务 服务注册1&#xff09;引入依赖2&#xff09;配置文件3&#xff09;启动多个user-service实例 服务发现1&#xff09;引入依赖2&#xff09;配…

chatgpt赋能python:Python冒泡法排序:一种简单且高效的排序方法

Python 冒泡法排序&#xff1a;一种简单且高效的排序方法 在计算机科学中&#xff0c;排序算法是一种将给定数据集合重新排列为按照一定顺序排列的有序序列的方法。而冒泡排序算法是其中最简单、最基础的一种排序算法。 什么是冒泡排序&#xff1f; 冒泡排序&#xff0c;顾名…