当前位置: 首页 > news >正文

支持向量机算法(一):像讲故事一样讲明白它的原理及实现奥秘

1、支持向量机算法介绍

支持向量机(Support Vector Machine,SVM)是一种基于统计学习理论的模式识别方法, 属于有监督学习模型,主要用于解决数据分类问题。SVM将每个样本数据表示为空间中的点,使不同类别的样本点尽可能明显地区分开。通过将样本的向量映射到高维空间中,寻找最优区分两类数据的超平面,使各分类到超平面的距离最大化,距离越大表示SVM的分类误差越小。通常SVM用于二元分类问题,对于多元分类可将其分解为多个二元分类问题,再进行分类,主要的应用场景有图像分类、文本分类、面部识别、垃圾邮件检测等领域。

☀关于支持向量机的理解,有3个问题,请进一步解释。

☀(1)空间中的点,这个空间是什么?

在支持向量机(SVM)的语境中,这个“空间”是特征空间。假设我们有一个数据集,每个样本有多个特征。例如,在一个简单的二维数据集(如判断一个水果是苹果还是橙子),我们可能有两个特征:水果的大小和颜色深浅。如果把水果的大小作为x轴,颜色深浅作为y轴,那么每个水果样本就可以用这个二维平面(空间)中的一个点来表示。
当有更多的特征时,比如再加上水果的甜度、硬度等特征,这个空间就会变成三维、四维甚至更高维度。这个空间的维度取决于数据集中样本的特征数量。一般来说,空间中的每个维度对应着一个特征,这样就可以通过这些维度来定位样本在这个空间中的位置,也就是用空间中的点来表示样本数据。

☀(2)怎么将样本的向量映射到高维空间中,高维空间是什么?

①高维空间的概念:高维空间是相对于我们日常所熟悉的二维或三维空间而言的。在SVM中,高维空间是一个数学抽象概念。以一个简单的例子来说明,如果我们在二维平面中有一些线性不可分的数据,比如一个圆内的点属于一类,圆外的点属于另一类。在二维空间中,很难找到一个直线(超平面)来划分这两类数据。但是如果我们把这些数据映射到三维空间,通过一个合适的函数(比如),在三维空间中这些数据可能就变得线性可分了。高维空间就是具有更多维度的空间,其维度数量取决于我们使用的映射函数和数据的特性。
②映射方法:通常使用核函数(Kernel Function)来将样本向量映射到高维空间。常见的核函数有线性核函数、多项式核函数、高斯径向基核函数(RBF)等。对于线性核函数,它在一定程度上可以看作是一种简单的映射,在某些线性可分的数据情况下可以很好地工作。而对于高斯径向基核函数,它能够将数据映射到一个无穷维的空间。这个函数通过计算两个样本点之间的距离,将其转换为一个新的表示形式,从而实现了从低维空间到高维空间(这里是无穷维)的映射。

☀(3)什么是超平面,如何寻找 ?

超平面的概念:在二维空间中,超平面是一条直线,它可以将平面分成两个部分。例如,对于一个简单的二元分类问题,在平面上的直线就是一个超平面,直线一侧的点可以被归为一类,另一侧的点归为另一类。在三维空间中,超平面是一个平面,如。一般地,在维空间中,超平面是一个维的子空间。它的方程可以写成,其中是权重向量,是样本向量,是偏置项。
寻找超平面的方法:SVM的目标是找到一个最优的超平面,使得两类数据之间的间隔(Margin)最大化。这个间隔是指从超平面到最近的样本点(支持向量)的距离。通过求解一个优化问题来找到这个超平面。具体来说,我们要最小化,同时满足约束条件。这个优化问题可以通过一些优化算法,如序列最小优化(Sequential Minimal Optimization,SMO)算法来求解,从而得到最优的超平面。

2、支持向量机算法实现

支持向量机模型由简单到复杂分为以下三种:

线性可分支持向量机(Linear Support Vector Machine In Linearly Separable Case),有一些苹果和橙子,把它们的大小、颜色深浅当作特征,在二维平面上,能找到一条直线将苹果和橙子完全分开,每个水果都能精准归类,这就是线性可分,这条直线就是分类超平面,此为硬间隔最大化,这便是线性可分支持向量机的作用。

线性支持向量机(Linear Support Vector machine),有一堆水果,多数苹果和橙子能用一条直线大致分开,但有几个坏果混在对面堆里。这时引入松弛因子,允许少量分错,找到一条尽量分对多数水果的直线,实现软间隔最大化,得到的就是线性支持向量机,应对近似线性可分样本。

③非线性支持向量机(Non-Linear Support Vector Machine),看一群形状各异的云朵和飞鸟,在平面上画直线根本分不开。利用核技术,将它们 “变” 到高维空间,在那可能云朵聚一堆、飞鸟聚一堆,再用软间隔最大化找到个曲面分开它们,这就是非线性支持向量机,处理非线性可分样本。

在实际应用中很少有线性问题,支持向量机模型应用最多的是第三种模型。然而,复杂模型是简单模型的改进,而且通过核函数映射就能将低维的非线性问题转化为高维空间的线性问题。

(1)线性可分支持向量机

首先假设有两分类数据,如下图所示。

现在要找出一条最佳的分割线,将两类数据分隔开。对于线性可分两分类数据,支持向量机就是条直线,对于高维数据点就是一个超平面,下图所示的三条直线都可以将上图中的两类数据分开。 

除了a、b、c外还有无数条分割线,那么,在这些分割线中哪条是最完美的呢?目标是选择一条具有较强分类能力的直线,即较稳定的分类结果和较强的抗噪声能力。

假如在上图中又增加了一些数据,如下图所示。

由于新增了样本数据,相对于直线b而言,直线a与c对样本变化的适应性变差,使用直线a进行分类,标记的圆形点会被分到三角形中,使用直线c进行分类,标记的三角形点会被分到圆形中。 如何找到最优分类数据的分割线,使得具有最优的数据分类能力呢?这条分界线要尽可能地远离两类数据点,即数据集的边缘点到分界线的距离d最大,这里虚线穿过的边缘点就叫作支持向量,分类间隔2d,如下图所示。

(下图中,虚线共穿过了3个点,那么共有3个支持向量)

这里的数据点到超平面的距离就是间隔(margin),当间隔越大,这条分割线(分类器)也就越健壮,当有新的数据点的时候,使用这条分割线得到的分类结果也就越可信。

假设b为最优分割线,那么此分割线方程为: 

转化成向量形式:

只是在二维形式上的表示,如果扩展到n维,那么将变成:

 ①x代表样本的特征向量,n表示特征的数量,不同的应用场景下特征的数量和具体内容会有所不同。

②w代表权重向量,这些权重值反映了各个特征在分类决策中的重要程度。

③γ是偏置项,用于调整超平面的位置,使得超平面能够更好地对不同类别的样本进行分类。

可以将超平面方程写成更一般的表达形式: 

 本次线性可分支持向量机的内容已讲解完毕,下次继续支持向量机知识点的讲解。

相关文章:

支持向量机算法(一):像讲故事一样讲明白它的原理及实现奥秘

1、支持向量机算法介绍 支持向量机(Support Vector Machine,SVM)是一种基于统计学习理论的模式识别方法, 属于有监督学习模型,主要用于解决数据分类问题。SVM将每个样本数据表示为空间中的点,使不同类别的…...

力扣-数组-35 搜索插入位置

解析 时间复杂度要求,所以使用二分的思想,漏掉了很多问题,这里记录 在left-right1时,已经找到了插入位置,但是没有赋值,然后break,所以导致一直死循环。 if(right - left 1){result right;b…...

List ---- 模拟实现LIST功能的发现

目录 listlist概念 list 中的迭代器list迭代器知识const迭代器写法list访问自定义类型 附录代码 list list概念 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素…...

HashMap和HashTable区别问题

并发:hashMap线程不安全,hashTable线程安全,底层在put操作的方法上加了synchronized 初始化:hashTable初始容量为11,hashmap初始容量为16 阔容因子:阔容因子都是0.75 扩容比例: 补充 hashMap…...

mysql -> 达梦数据迁移(mbp大小写问题兼容)

安装 注意后面初始化需要忽略大小写 初始化程序启动路径 F:\dmdbms\tool dbca.exe 创建表空间,用户,模式 管理工具启动路径 F:\dmdbms\tool manager.exe 创建表空间 创建用户 创建同名模式,指定模式拥有者TEST dts 工具数据迁移 mysql -&g…...

leetcode热门100题1-4

第一天 两数之和 //暴力枚举 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int n nums.size();for (int i 0; i < n; i) {for (int j i 1; j < n; j) {if (nums[i] nums[j] target) {return {i, j};}}}return {…...

作业:IO:day2

题目一 第一步&#xff1a;创建一个 struct Student 类型的数组 arr[3],初始化该数组中3个学生的属性 第二步&#xff1a;编写一个叫做save的函数&#xff0c;功能为 将数组arr中的3个学生的所有信息&#xff0c;保存到文件中去&#xff0c;使用fread实现fwrite 第三步&#xf…...

UVM: TLM机制

topic overview 不建议的方法&#xff1a;假如没有TLM TLM TLM 1.0 整个TLM机制下&#xff0c;底层逻辑离不开动作发起者和被动接受者这个底层的模型基础&#xff0c;但实际上&#xff0c;在验证环境中&#xff0c;任何一个组件&#xff0c;都有可能成为动作的发起者&#xff0…...

flink的EventTime和Watermark

时间机制 Flink中的时间机制主要用在判断是否触发时间窗口window的计算。 在Flink中有三种时间概念&#xff1a;ProcessTime、IngestionTime、EventTime。 ProcessTime&#xff1a;是在数据抵达算子产生的时间&#xff08;Flink默认使用ProcessTime&#xff09; IngestionT…...

arcgis的合并、相交、融合、裁剪、联合、标识操作的区别和使用

1、相交 需要输入两个面要素&#xff0c;最终得到的是两个输入面要素相交部分的结果面要素。 2、合并 合并能将两个单独存放的两个要素类的内容&#xff0c;汇集到一个要素类里面。 3、融合 融合能将一个要素类内的所有元素融合成一个整体。 4、裁剪 裁剪需要输入两个面要…...

【Leetcode 热题 100】20. 有效的括号

问题背景 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串 s s s&#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每…...

比较procfs 、 sysctl和Netlink

procfs 文件系统和 sysctl 的使用: procfs 文件系统(/proc) procfs 文件系统是 Linux 内核向用户空间暴露内核数据结构以及配置信息的一种方式。`procfs` 的挂载点是 /proc 目录,这个目录中的文件和目录呈现内核的运行状况和配置信息。通过读写这些文件,可以查看和控制内…...

Leetcode 3413. Maximum Coins From K Consecutive Bags

Leetcode 3413. Maximum Coins From K Consecutive Bags 1. 解题思路2. 代码实现 题目链接&#xff1a;3413. Maximum Coins From K Consecutive Bags 1. 解题思路 这一题的话思路上整体上就是一个遍历&#xff0c;显然&#xff0c;要获得最大的coin&#xff0c;其选取的范围…...

MakeFile使用指南

文章目录 1. MakeFile 的作用2. 背景知识说明2.1 程序的编译与链接2.2 常见代码的文档结构 3. MakeFile 的内容4. Makefile的基本语法5. 变量定义5.1 一般变量赋值语法5.2 自动化变量 6. 通配符 参考&#xff1a; Makefile教程&#xff1a;Makefile文件编写1天入门 Makefile由浅…...

矩阵碰一碰发视频的视频剪辑功能源码搭建,支持OEM

在短视频创作与传播领域&#xff0c;矩阵碰一碰发视频结合视频剪辑功能&#xff0c;为用户带来了高效且富有创意的内容产出方式。这一功能允许用户通过碰一碰 NFC 设备触发视频分享&#xff0c;并在分享前对视频进行个性化剪辑。以下将详细阐述该功能的源码搭建过程。 一、技术…...

VB.NET CRC32 校验

在 VB.NET 中实现 CRC32 校验并在校验失败时退出程序&#xff0c;你可以按照以下步骤进行&#xff1a; ‌实现 CRC32 计算函数‌&#xff1a;首先&#xff0c;你需要一个函数来计算给定数据的 CRC32 值。 ‌比较计算的 CRC32 值‌&#xff1a;然后&#xff0c;你需要将计算出的…...

冒充者综合征上线了

背景 今天干了一件蠢事儿&#xff0c;上周末咸鱼上有人拍了之前发布的一个java程序&#xff0c;基于 JWT 实现的一个五子棋游戏的源代码。想着反正又没事&#xff0c;就找到了移动硬盘拷贝出那个源代码上传网盘发货了。 今天买家找我说解压不了&#xff0c;我电脑解压正常。就…...

【大模型】百度千帆大模型对接LangChain使用详解

目录 一、前言 二、LangChain架构与核心组件 2.1 LangChain 核心架构 2.2 LangChain 核心组件 三、环境准备 3.1 前置准备 3.1.1 创建应用并获取apikey 3.1.2 开通付费功能 3.2 获取LangChain文档 3.3 安装LangChain依赖包 四、百度千帆大模型对接 LangChain 4.1 LL…...

Redis相关面试

以下是一些在面试中关于 Redis 最常被问到的问题&#xff0c;涵盖了 Redis 的基础概念、数据结构、持久化、主从复制、哨兵、集群、应用场景以及常见的缓存问题等。可以根据自身实际项目经验&#xff0c;结合下面的要点进行深入讲解。 1. Redis 基础与特点 Redis 是什么&#x…...

使用强化学习训练神经网络玩俄罗斯方块

一、说明 在 2024 年暑假假期期间&#xff0c;Tim学习并应用了Q-Learning &#xff08;一种强化学习形式&#xff09;来训练神经网络玩简化版的俄罗斯方块游戏。在本文中&#xff0c;我将详细介绍我是如何做到这一点的。我希望这对任何有兴趣将强化学习应用于新领域的人有所帮助…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...

阿里云Ubuntu 22.04 64位搭建Flask流程(亲测)

cd /home 进入home盘 安装虚拟环境&#xff1a; 1、安装virtualenv pip install virtualenv 2.创建新的虚拟环境&#xff1a; virtualenv myenv 3、激活虚拟环境&#xff08;激活环境可以在当前环境下安装包&#xff09; source myenv/bin/activate 此时&#xff0c;终端…...

stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)

这是系统中断服务程序的默认处理汇编函数&#xff0c;如果我们没有定义实现某个中断函数&#xff0c;那么当stm32产生了该中断时&#xff0c;就会默认跑这里来了&#xff0c;所以我们打开了什么中断&#xff0c;一定要记得实现对应的系统中断函数&#xff0c;否则会进来一直循环…...