【机器学习】12.十大算法之一支持向量机(SVM - Support Vector Machine)算法原理讲解

【机器学习】12.十大算法之一支持向量机(SVM - Support Vector Machine)算法原理讲解

  • 一·摘要
  • 二·个人简介
  • 三·基本概念
  • 四·支持向量与超平面
      • 4.1 超平面(Hyperplane)
      • 4.2 支持向量(Support Vectors)
      • 4.3 核技巧(Kernel Trick)
      • 4.4 软间隔与正则化
  • 五·SVM算法原理
      • 5.1 点到超平面的距离公式
      • 5.2 最大间隔的优化模型
  • 六·松弛变量
      • 6.1 松弛变量的定义
      • 6.2 优化模型的修改
      • 6.3 软间隔与硬间隔
      • 6.4 核技巧与松弛变量
  • 七·核函数
      • 7.1 核函数的基本概念
      • 7.2 常用的核函数
      • 7.3 核函数的作用

一·摘要

在这里插入图片描述

支持向量机(SVM)是一种高效的监督学习算法,广泛应用于分类和回归问题。它通过在特征空间中寻找一个最优的超平面来区分不同类别的数据点,目标是最大化两类数据点之间的间隔,从而提高模型的泛化能力。SVM的关键概念包括超平面、间隔、支持向量以及核函数,其中核函数允许SVM处理非线性问题,通过将数据映射到更高维的空间来寻找线性可分的超平面。此外,软间隔和正则化技术用于处理数据的非完全线性可分性,同时控制模型复杂度,防止过拟合。SVM的实现涉及选择合适的核函数,构建并求解一个凸二次规划问题,以及评估和应用训练好的模型。它的优点在于模型简单、易于实现,且具有良好的泛化能力,但计算复杂度高,对核函数和参数选择敏感,且在处理大规模数据集时可能会遇到性能瓶颈。

二·个人简介

🏘️🏘️个人主页:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证,CSDN内容合伙人,阿里云社区专家博主,新星计划导师,在职数据分析师。

💕💕悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。

在这里插入图片描述

🐘 希望大家能持续支持,共同向前迈进!😁
如果您觉得文章有价值,
欢迎留言💬,点赞👍,收藏🔖并关注我们➕🤝。
🪐💫💫💫💫💫💫💫热门专栏💫💫💫💫💫💫💫🪐
类型专栏
Python基础Python基础入门—详解版
Python进阶Python基础入门—模块版
Python高级Python网络爬虫从入门到精通🔥🔥🔥
Web全栈开发Django基础入门
Web全栈开发HTML与CSS基础入门
Web全栈开发JavaScript基础入门
Python数据分析Python数据分析项目🔥🔥
机器学习机器学习算法🔥🔥
人工智能人工智能

三·基本概念

支持向量机(Support Vector Machine, SVM)是一种强大的机器学习算法,主要用于解决分类和回归问题。它基于统计学习理论中的结构风险最小化原则,通过在特征空间中寻找一个最优的决策边界,即超平面,来区分不同的数据类别。这个超平面的选择旨在最大化数据点到超平面的最短距离,这个距离被称为间隔(margin)。间隔越大,模型的泛化能力通常越好。

SVM的核心是支持向量,这是一组对确定超平面位置和方向至关重要的数据点,它们是距离超平面最近的点。如果数据不是线性可分的,SVM通过引入核函数将原始数据映射到一个更高维的空间,在这个新空间中寻找线性可分的超平面。常用的核函数包括线性核、多项式核、径向基函数(RBF)核等。

为了处理数据中的噪声和异常点,SVM引入了软间隔的概念,允许一些数据点被错误分类,以换取更好的泛化性能。同时,通过正则化项控制模型的复杂度,避免过拟合。SVM的训练过程通常涉及到求解一个凸二次规划问题,以找到最优的超平面参数。

见下图,在一个二维环境中,其中点R,S,G点和其它靠近中间黑线的点可以看作为支持向量,它们可以决定分类器,也就是黑线的具体参数。
在这里插入图片描述

四·支持向量与超平面

支持向量和超平面是支持向量机(SVM)算法中的核心概念。下面我将详细解释这两个概念:

4.1 超平面(Hyperplane)

在数学中,超平面是一个线性子空间,其维度比它所在的空间低一维。例如,在二维空间中,超平面是一条直线;在三维空间中,它是平面;在更高维空间中,它仍然是一个线性边界,但可能难以直观理解。

在SVM中,超平面用于将数据分为不同的类别。对于二维空间,你可以想象超平面是一条直线,将空间分为两部分,每部分包含一个类别的数据点。对于更高维度的空间,超平面是一个更高维的线性边界,同样用于分隔数据点。

4.2 支持向量(Support Vectors)

支持向量是那些位于距离超平面最近的数据点。它们是SVM在训练过程中用来确定超平面位置的关键数据点。如果从这些点中移除任何一个,都会改变超平面的位置和方向。

支持向量之所以重要,是因为它们定义了数据点之间的边界(即间隔)。SVM的目标是找到这样一个超平面,使得最近的这些支持向量(即距离超平面最近的数据点)与超平面之间的距离(间隔)最大化。这个间隔的大小是衡量模型泛化能力的一个重要指标。

4.3 核技巧(Kernel Trick)

在实际应用中,数据可能不是线性可分的。这时,SVM可以使用核技巧来处理非线性问题。核函数可以将原始数据映射到一个更高维的空间,在新的空间中寻找一个线性可分的超平面。常用的核函数包括线性核、多项式核、径向基函数(RBF)核等。

4.4 软间隔与正则化

在处理实际数据时,可能无法找到一个完美的超平面来完全分开所有数据点。这时,SVM引入了软间隔的概念,允许一些数据点被错误分类,以换取更好的泛化能力。同时,通过正则化项(通常是法向量的范数)来控制模型的复杂度,避免过拟合。

在这里插入图片描述

五·SVM算法原理

5.1 点到超平面的距离公式

点到超平面的距离公式用于计算一个点到给定超平面的最短距离。超平面在n维空间中可以用以下方程式表示:
在这里插入图片描述
其中:
w 是一个n维的法向量,垂直于超平面。
x 是一个n维的点,位于空间中。
b 是超平面的偏置项。
点 x 到这个超平面的垂直距离 d 可以通过以下公式计算:
在这里插入图片描述
这个公式的几何意义是:从点 𝑥 向超平面作垂线,垂足到点 𝑥的距离就是𝑑这个距离也代表了点 𝑥到超平面的“间隔”。在支持向量机中,间隔的大小是非常重要的,因为它与模型的泛化能力有关。SVM的目标是找到这样一个超平面,使得间隔最大化,即所有数据点到这个超平面的距离之和最大。

5.2 最大间隔的优化模型

线性可分情况下的优化模型
当数据是线性可分的,即存在一个超平面能够完美地将不同类别的数据点分开,SVM的目标是找到一个超平面,使得距离最近的两个数据点(即支持向量)到超平面的距离最大化。这个距离被称为间隔(margin)。
超平面可以表示为:
在这里插入图片描述
最大间隔优化问题
SVM的目标函数是最大化间隔,可以表示为:
在这里插入图片描述
在这里插入图片描述引入拉格朗日乘子
在这里插入图片描述
对偶问题
在这里插入图片描述

六·松弛变量

在支持向量机(SVM)中,松弛变量(Slack Variables)是引入的一种机制,用于处理数据集中的非线性可分情况。在理想情况下,如果数据是线性可分的,SVM可以找到一个超平面将不同类别的数据点完全分开,同时最大化间隔。然而,在现实世界中,很多数据集并不是完全线性可分的,这就需要使用松弛变量来允许一些数据点被错误分类,从而提高模型的泛化能力。在这里插入图片描述

6.1 松弛变量的定义

在这里插入图片描述

6.2 优化模型的修改

在这里插入图片描述
这里的 𝐶是一个正的调节参数,用于控制模型对误分类的惩罚程度。𝐶的值越大,模型对误分类的惩罚越重,越倾向于找到没有误分类的解;𝐶的值越小,模型对误分类的容忍度越高,越容易找到间隔更大的解,即使这意味着更多的误分类。

6.3 软间隔与硬间隔

  • 硬间隔(Hard Margin):没有引入松弛变量的SVM,要求所有数据点都在间隔边界的外侧或边界上,即不允许任何误分类。
  • 软间隔(Soft Margin):引入了松弛变量的SVM,允许一些数据点在间隔边界的内侧,即允许一定程度的误分类。 核技巧与松弛变量.

6.4 核技巧与松弛变量

即使在非线性可分的情况下,通过使用核技巧将数据映射到高维空间,结合松弛变量,SVM仍然可以找到具有最大间隔的超平面。

七·核函数

核函数(Kernel Function)是支持向量机(SVM)中的一种重要工具,它允许SVM在高维空间中有效地处理非线性问题。核函数的基本思想是通过映射将原始数据从低维空间映射到高维空间,在这个高维空间中寻找数据的线性可分性。
在这里插入图片描述

7.1 核函数的基本概念

在这里插入图片描述

7.2 常用的核函数

在这里插入图片描述

7.3 核函数的作用

  1. 处理非线性问题:通过映射到高维空间,核函数使得原本在低维空间中线性不可分的数据在高维空间中线性可分。
  2. 提高模型表达能力:不同的核函数可以捕捉数据的不同特征,提高模型的表达能力。
  3. 减少计算复杂度:使用核函数可以避免直接在高维空间中进行计算,从而减少计算复杂度。

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

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

相关文章

【Django+Vue3 线上教育平台项目实战】构建课程详情页与集成视频播放功能

文章目录 前言一、课程列表页面a.后端代码b.前端代码 二、课程详情页面a. 视频播放功能的集成1.获取上传视频的链接地址2.集成在前端页面中1>使用vue-alipayer视频播放组件2>使用video标签 b. 页面主要内容展示1.后端代码1>分析表2>核心逻辑 2.前端代码3.效果图 前…

线程池-拒绝策略

线程池-拒绝策略 RejectedExecutionHandlerAbortPolicyCallerRunsPolicyDiscardPolicyDiscardOldestPolicy自定义拒绝策略 当核心线程已用尽 & 阻塞队列已满 & 超过最大线程数时,再向线程池提交任务,则会触发线程池的拒绝策略。 RejectedExecuti…

Python爬虫与文本到语音转换实战:获取并播报长沙天气

简介💕 在本文中,我们将通过一个简单的Python脚本,演示如何使用网络爬虫技术获取长沙的天气信息,并使用文本到语音技术将天气信息播报出来。我们将使用pyttsx3库进行语音播报,使用requests库来发起网络请求&#xff0…

自动驾驶-2D目标检测

yolo及yolo的变体 anchor boxes (锚框) intersection over union 并集交集 用于计算两个边界框的差异程度 bounding box predictions 边界框预测 non maximum suppression非极大值抑制 为了分离这些边界框并为每个对象获得单个边界框,我们使用IOU。这种获取单…

2024-07-15 Unity插件 Odin Inspector4 —— Collection Attributes

文章目录 1 说明2 集合相关特性2.1 DictionaryDrawerSettings2.2 ListDrawerSettings2.3 TableColumnWidth2.4 TableList2.5 TableMatrix 1 说明 ​ 本章介绍 Odin Inspector 插件中集合(Dictionary、List)相关特性的使用方法。 2 集合相关特性 2.1 D…

2-34 小波神经网络采用传统 BP 算法

小波神经网络采用传统 BP 算法,存在收敛速度慢和易陷入局部极小值两个突出弱点。建立了基于遗传算法的小波神经网络股票预测模型 GA-WNN。该模型结合了遗传算法的全局优化搜索能力以及小波神经网络良好的时频局部特性。运用 MATLAB 对拟合和预测过程进行仿真。结果表…

<数据集>绝缘子缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:2139张 标注数量(xml文件个数):2139 标注数量(txt文件个数):2139 标注类别数:8 标注类别名称:[insulator, broken disc, pollution-flashover, Two glass, Glassdirt…

李笑来思考框架的结晶《思考的真相》(2024 年新书)

点开文章的你肯定读过李笑来的书,比如讲认知的《财富自由之路》、讲管理自己的《把时间当做朋友》、讲财富底层逻辑的《财富的真相》、讲定投的《让时间陪你慢慢变富》等等。 李笑来的书不讲究华丽的文字,在意逻辑、论证的严谨,层层递进&…

数据结构之通过“ 队列 ”实现的“ 栈 ”功能。

🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:数据结构 前言 本节内容是利用“ 队列 ”先进先出的特点 实现 “ 栈 ” 先进后出。 一、题目 1.1 题目描述: 请你仅使用两个队列实现一个后入先出&…

成为CMake砖家(1): 在Windows上查看CMake文档

大家好,我是白鱼。 在使用 CMake 的过程中,想必有不少朋友像我一样, 想在本地查看 CMake 文档。 首先安装 CMake, Installer 版本: 安装后,从开始菜单输入 CMake, 选择结果中的 “CMake Documentation”…

如何在 Shell 脚本中使用函数 ?

函数是一个可重用的代码块。我们经常把重复的代码放入一个函数中,并从不同的地方调用该函数,库是函数的集合。我们可以在库中定义常用的函数,其他脚本可以使用它们而无需复制代码。 Calling function 在 Shell 中,调用函数和调用…

1.33、激活可视化卷积神经网络(matalb)

1、激活可视化卷积神经网络原理及流程 激活可视化(Activation Visualization)指的是通过可视化神经网络中激活函数的输出,来理解神经网络是如何学习并提取特征的过程。在卷积神经网络(CNN)中,我们可以通过…

tomcat的优化、动静分离

tomcat的优化 tomcat自身的优化 tomcat的并发处理能力不强,大项目不适应tomcat做为转发动态的中间件(k8s集群,pytnon rubby),小项目会使用(内部使用的)动静分离 默认配置不适合生产环境&…

MySQl高级篇 -索引优化篇

索引 InnoDB采用了一个B数来存储索引,使得在千万级数据量的一个情况下,树的高度可以控制在3层以内,而层高代表磁盘IO的一个次数,因此基于索引查找可以减少磁盘IO的次数 MySQL的索引是在存储引擎层实现的,不同的存储引…

头歌资源库(31)象棋中马遍历棋盘的问题

一、 问题描述 二、算法思想 这是一个典型的深度优先搜索问题。 首先,我们创建一个mn的棋盘,并初始化所有的点为未访问状态。 然后,我们从(0, 0)位置开始进行深度优先搜索。 在每一步中,我们先标记当前位置为已访问&#xff0…

Android Viewpager2 remove fragmen不生效解决方案

一、介绍 在如今的开发过程只,内容变化已多单一的fragment,变成连续的,特别是以短视频或者直播为主的场景很多。从早起的Viewpage只能横向滑动,到如今的viewpage2可以支持横向或者竖向滑动。由于viewpage2的adapter在设计时支持缓…

解决mysql,Navicat for MySQL,IntelliJ IDEA之间中文乱码

使用软件版本 jdk-8u171-windows-x64 ideaIU-2021.1.3 mysql-essential-5.0.87-win32 navicat8_mysql_cs 这个问题我调试了好久,网上的方法基本上都试过了,终于是解决了。 三个地方结果都不一样。 方法一 首先大家可以尝试下面这种方法&#xff1a…

基于Python+Django+MySQL+Echarts的租房数据可视化分析系统

租房数据可视化 DjangoMySQLEcharts 基于PythonDjangoMySQLEcharts的租房数据可视化分析系统 Echarts 信息存储在数据库中 不含爬虫代码,或爬虫代码已失效 不支持登录注册 简介 基于DjangoMySQLEcharts的租房数据可视化系统通过连接数据库获取数据&#xff0c…

【格密码基础】旋转格的性质

目录 一. 回顾ZSVP问题 二. 基于ZSVP问题的密码系统 三. 格基旋转与Gram矩阵 四. 补充矩阵QR分解 4.1 矩阵分解 4.2 举例 前序文章请参考: 【格密码基础】详解ZSVP问题-CSDN博客 一. 回顾ZSVP问题 根据之前的讨论我们知道解决ZSVP问题的计算复杂度为&#x…

一款IM即时通讯聊天系统源码,包含app和后台源码

一款IM即时通讯聊天系统源码 聊天APP 附APP,后端是基于spring boot开发的。 这是一款独立服务器部署的即时通讯解决方案,可以帮助你快速拥有一套自己的移动社交、 企业办公、多功能业务产品。可以 独立部署!加密通道!牢牢掌握通…