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

机器学习 Day18 Support Vector Machine ——最优美的机器学习算法

1.问题导入:

2.SVM定义和一些最优化理论

2.1SVM中的定义

2.1.1 定义

  • SVM 定义:SVM(Support Vector Machine,支持向量机)核心是寻找超平面将样本分成两类且间隔最大 。它功能多样,可用于线性或非线性分类、回归、异常值检测等,在机器学习领域地位重要,尤其适合中小规模复杂数据集分类。
    • 图中不同颜色点代表不同类别样本,超平面是分割两类样本的平面,位于超平面两侧且离超平面最近的样本点(绿圈标注)就是支持向量,它们决定超平面位置(之后数学推导会有说明),而超平面要使两类样本间隔最大。

    2.1.2 超平面最大间隔

    • 左图分析:展示三种线性分类器决策边界,虚线代表的模型无法正确分类,其余两个模型虽在训练集表现好,但决策边界离样本太近,新样本出现时泛化能力可能差(欠拟合)。
    • 右图分析:SVM 分类器决策边界(实线),既分离了两个类别,又尽可能远离最近训练实例,这样能有更好泛化能力,降低过拟合风险。

    2.1.3 硬间隔

    • 概念:严格要求所有实例不在最大间隔之间且位于正确一边的分类方式。
    • 问题
      • 条件苛刻,仅在数据线性可分时有效,若数据线性不可分则找不到合适硬间隔。
      • 对异常值敏感,一个异常值就可能大幅改变决策边界,使其无法很好泛化。左图因异常值找不到硬间隔,右图有异常值时决策边界与无异常值时差异大。

    2.1.4 软间隔

    • 概念:为避免硬间隔分类问题,在保持最大间隔宽阔和限制间隔违例(位于最大间隔之上或错误一边的实例 )间找平衡的分类方式。
    • 参数 C 作用:在 Scikit - Learn 的 SVM 类中,超参数 C 控制平衡。C 值小,间隔宽,间隔违例多;C 值大,间隔窄,间隔违例少(数学推导中说明)。左图 C = 100,错误样本少但间隔小;右图 C = 1,间隔大,多数间隔违例在决策边界正确一边,泛化效果可能更好 。

2.2最优化理论

2.2.1对偶理论

  •  注意原问题的对偶问题中是先对拉格朗日函数求w的下确界,再对构造的参数因子求最大。
  • 问题3就是弱对偶理论,问题5就是强对偶理论,以上图片中仅仅涉及到SVM需要的理论,这里对于感兴趣的读者,可以观看以下关于对偶理论的补充(不做证明)

1.如果一个原始LP问题存在最优解,那么它的对偶问题也存在最优解,并且最优值相等

2.由1推出:若x和w分别是原始问题,以及其对偶问题的可行解,则x和w分别是原问题的最优解充要条件是它们对应的优化函数值相等

3.给定一个原始LP问题和对偶问题,它们的解的情况有且仅有以下表格中的一种情况出现:

2.2.2凸优化理论 

2.2.2.1凸函数

2.2.2.2凸优化

所以说,如果一个优化问题我们可以转换为凸优化问题,那么会很简单,常见也有很多求解凸优化的问题,针对无约束的和带有约束的。

2.2.2.3直线距离公式

3.SVM算法推导

我们只说SVM用于分类的推导,并且只说用于二分类的推导,多分类会由二分类得到

数据在空间中常常被分为3类:线性可分,近似线性可分,线性不可分,在SVM中分别对应的就是硬间隔,软间隔,核技巧,文章会一一解释:

3.1线性可分模型——硬间隔处理

最直观的想法就是我们可以直接通过一条线对这个线性可分的模型进行处理,比如说就是这条直线(二维是直线,高维就是超平面了),直线方程可以是图中方程,然后我们给一个预测样本,我们就去带入这个超平面,如果这个在上方就是正类,下方就是负类,所以模型就是这样:

我们承认的是一般情况下如果存在一条直线可以把 两个类分开,那么就存在无数条直线把这两个类分开,那么我们如何衡量那条直线效果最好呢。我们SVM的衡量方法就是把这条直线向上向下平移直到与某个或者某几个样本点相交,这时我们去选择一个间隔最大的直线即可,比如这个图

但仅仅这样就可以确定一条直线的位置吗,显然不行,因为在这个间隔之间的任何一条直线显然都可以通过平移得到这个最大间隔,所以为了保证唯一,我们选取的直线位于这条间隔之间,现在我们就可以建立优化模型了:

对于一个输入:,注意这里不限制维数,即x是一个多维度的向量,y是一个标签,用来表示类别,当然你可以不是正负一,但是这里正负一方便以后的计算,我们做出以下规定:显然这个最大间距就是由先接触的点决定的,这些点我们叫做支持向量,我们计算支持向量x0到这条直线的距离乘以2即可,观察距离公式,显然可以通过相等比例放缩w和b得到的是同一个直线,所以我们可以通过放缩来使得分母部分为1,即|w^Tx0+b|=1,此时支持向量到超平面的距离为||w||^-1,所以有如下最优化方程:

注意这个优化问题是凸优化,你别看约束域有点复杂,但其实我们基变量是w和b,yi是已知的,所以约束函数就是一次的,而且最优化函数二次的,所以这是一个凸二次规划问题! 求解凸优化有很多算法,之后用其求解即可,当然我们还可以做进一步的简化,这里先不讲,因为我们之后两个模型和这个模型的简化方法一样,之后建完模型后会统一讲解。

3.2近似线性可分模型——软间隔处理

对于线性可分模型的建模,可以肯定的是一点会解出一个(w,b),但是对于近似线性可分模型,如果仍然使用以上模型,会有约束条件矛盾的情况,即不存在(w,b)来使得模型成立,这时候我们只需要引入松弛变量即可,(松弛变量的目的就是在于使得约束条件不是那么的严格成立,对应于SVM就是我们容忍一些点存在于间隔之间),所以约束条件就变成了:

但是显然如果松弛变量取得很大,上面那个1-epsl 是负数,很明显恒成立,所以我们要给目标函数加上一个罚函数的限制(正则项):注意这里C是事先设定的一个值,C就是我们在2.1.4中介绍的C。C越大,惩罚力度越大,为了使目标函数小,epsl就得少一点,所以对应的就是违反原不等式的少,对应图,就是违反点少,就是间隔违例少。

以上就是对于近似线性可分的处理,当然这个需要优化的变成了(w,b,epsl) ,当然还是一个凸二次规划,也可以使用一些算法(SMO),简化这个问题还和上边一样,我们在最后一节会讲到。显然这个模型可以包含第一个模型,在这个模型里另epsl全部为0即可。所以我们以后在高维也是推广此类模型。

3.3线性不可分模型——核技巧

3.3.1核函数

低维不可分数据在高维中有很大概率变为线性可分,SVM并没有像其他算法一样去改变形状,比如决策树算法等就是通过一些折线啥的去处理这种情况,但SVM是讲数据投射到高维度进行处理,当然核技巧并不是SVM所特有的,之所以我们说SVM很优美,之后我们会看到(利用核函数避免了维度计算带来的灾难),核技巧如何用于模型求解,现在我们先讲核函数

一般的规律是维度越高,变成线性可分的概率就会越大,所以我们希望映射函数是一个到无穷维空间的映射,面临的问题就是我们如何计算这个向量的值,因为它是一个无穷维的,但是我们一会回看到不需要计算这个值,可以通过K来完成整个算法。那么什么样的函数可以作为一个核函数呢,在泛函分析中有如下定理:

核函数一般情况下有如下:

一般情况下经常使用RBF核。 

3.3.2 原理推导

模型和3.2大致相同,和3.2不同的是仅仅把x的位置改为映射函数即可,且此时对应的w也要对应相应的维度。所以模型是:

接下来我们来尝试简化模型,注意模型3.1和3.2的求解一样。

我们注意这个优化所有的条件满足 2.2.1中的强对偶性,即它的对偶问题最优值和它一样,所以我们转变为求他的对偶问题,注意该模型是没有等式条件的。其对偶问题是:​​​​​​​​​​​​​​

我们先来看L的极值,直接求导即可:

可以看到我们在未知映射的条件下利用核函数求得了算法,避免了高维计算。这是一大亮点。

这个优化函数中我们可以发现只有带求参数是未知的而且另一个参数没有了,所以优化模型变为:

我们求解这个 凸优化问题会得到最优值,接下来利用这些求(w,b)即可:求w的时候有以上公式,但这里我们是不知道映射的,那怎么办呢?其实我们不需要知道这个映射,这又是SVM的一个亮点:

我们并不需要计算w就可以得到结果,求b的话需要用到KKT条件:

至此给定一个样本就可以按照以上公式判别他的类别,注意观察上面的公式,涉及到对\alpha的求和,所以这个解当\alpha为0时,不影响算法,影响算法的仅仅是\alpha不为0,而由互补松弛条件,对应的,注意还有\varepsilon=0,这就是支持向量的所在超平面,所以这就是我们开头说的,只有支撑向量会影响算法!!算法流程是:

 4.SVM用于多分类

SVM用于多分类可以去更改模型,我们这里讲解的是类似于集成学习的方法,主要包含一对其他和一对一的情况:

5.SVM用于回归 

6.总结 

7.调包 

 

        

相关文章:

机器学习 Day18 Support Vector Machine ——最优美的机器学习算法

1.问题导入: 2.SVM定义和一些最优化理论 2.1SVM中的定义 2.1.1 定义 SVM 定义:SVM(Support Vector Machine,支持向量机)核心是寻找超平面将样本分成两类且间隔最大 。它功能多样,可用于线性或非线性分类…...

IIS入门指南:原理、部署与实战

引言:Web服务的基石 在Windows Server机房中,超过35%的企业级网站运行在IIS(Internet Information Services)之上。作为微软生态的核心Web服务器,IIS不仅支撑着ASP.NET应用的运行,更是Windows Server系统管…...

Linux运维——Shell脚本读取配置文件

Shell脚本读取配置文件 一、键值对格式配置文件(最常用)1.1、配置文件示例1.2、source命令导入1.3、sed解析1.4、解析数组 二、INI格式配置文件1.1、配置文件示例1.2、sed解析1.3、ini配置带数组(显式声明数组)1.4、ini配置带数组…...

答题pk小程序道具卡的获取与应用

道具卡是答题PK小程序中必不可少的一项增加趣味性的辅助应用,那么道具卡是如何获取与应用的呢,接下来我们来揭晓答案: 一、道具卡的获取: 签到获取:在每日签到中签到不仅可获得当日的签到奖励积分,同时连…...

leetcode3265. 统计近似相等数对 I-medium

1 题目:统计近似相等数对 I 官方标定难度:中 给你一个正整数数组 nums 。 如果我们执行以下操作 至多一次 可以让两个整数 x 和 y 相等,那么我们称这个数对是 近似相等 的: 选择 x 或者 y 之一,将这个数字中的两个…...

【架构篇】代码组织结构设计

代码组织结构设计:模块化分层与高效协作实践 摘要 本文以Java项目为例,解析后端代码组织的标准化结构,涵盖模块划分原则、依赖管理策略及实际应用场景。通过模块化设计提升代码可维护性、团队协作效率及系统扩展能力。 一、模块化设计的核心…...

2_Spring【IOC容器中获取组件Bean】

Spring中IOC容器中获取组件Bean 实体类 //接口 public interface TestDemo {public void doSomething(); } // 实现类 public class HappyComponent implements TestDemo {public void doSomething() {System.out.println("HappyComponent is doing something...")…...

日期数据渲染转换问题

今天在学习Springboot框架时,想做一个非常简单的增删改查巩固一下,结果在数据渲染上出现了一个小问题,如图数据库中的数据一切正常 但是在前端渲染时,是下面这个效果 这是因为数据库存储的日期类型数据在前端渲染时,没…...

Spring Boot拦截器详解:原理、实现与应用场景

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、拦截器概述 拦截器(Interceptor)是Spring MVC框架中用于对请求进行预处理和后处理的组件,主要作用于Controller层。相…...

ubuntu18.04编译qt5.14.2源码

ubuntu18.04编译qt5.14.2源码 文章目录 ubuntu18.04编译qt5.14.2源码[toc]1 前言2 参考文档3 下载源码3.1 方法13.2 方法23.3 方法3 4 ubuntu编译qt源码4.1 环境准备4.2 设置交换分区大小4.3 编译源码4.4 添加环境变量4.5 验证编译结果4.6 编译帮助文档(qch&#xf…...

创建指定版本的vite项目

1、获取vite的版本号 npm view create-vite versions 注:4.4.1版本即对应着node16版本的项目 2、创建制定版本的vite项目 npm init vite<version>...

iOS 初识RunLoop

iOS 初识RunLoop 文章目录 iOS 初识RunLoopRunLoop的概念RunLoop的功能RunLoop和线程的关系RunLoop的结构ModeObserverTimer 和 source小结 RunLoop的核心RunLoop的流程RunLoop的应用AutoreleasePool响应触控事件刷新界面常驻线程网络请求NSTimer 和 CADisplayLinkNSTimerGCDTi…...

电子电路仿真实验教学平台重磅上线!——深圳航天科技创新研究院倾力打造,助力高校教学数字化转型

在传统电子电路课堂中&#xff0c;实验室的灯光总与高昂的成本、拥挤的设备、反复的耗材损耗相伴&#xff0c;而教师不得不面对这样的现实&#xff1a;有限的硬件资源束缚着教学深度&#xff0c;不可逆的实验风险制约着创新探索&#xff0c;固化的时空场景阻碍着个性化学习。当…...

搭建一个WordPress网站需要多少成本

WordPress 最初可能只是一个简单的博客平台。但近年来&#xff0c;它不仅成为了最好的博客平台&#xff0c;还成为了一个全面的内容管理系统。白宫、jQuery、NGINX、《纽约时报》等企业都把 WordPress 作为自己的网上家园。 不过&#xff0c;它们只是其中的佼佼者。根据 Built…...

Python数据可视化 - Pyecharts绘图示例

文章目录 一、Pyecharts简介及安装1. Pyecharts简介2. 安装Pyecharts 二、准备数据三、饼图示例1. 初始化选项配置2. 饼图相关设置3. 全局配置项3.1 标题配置项3.2 图例配置项3.3 提示框配置项3.4 工具箱配置项3.5 视觉映射配置项 4. 系列配置项4.1 标签选项配置4.2 图元样式配…...

NC016NC017美光固态芯片NC101NC102

NC016NC017美光固态芯片NC101NC102 在存储技术的演进历程中&#xff0c;美光科技的NC016、NC017、NC101与NC102系列固态芯片&#xff0c;凭借其技术创新与市场适应性&#xff0c;成为行业关注的焦点。本文将从技术内核、产品性能、行业动向、应用场景及市场价值五个维度&#…...

[Android] 青木扫描全能文档3.0,支持自动扫描功能

声明&#xff1a;根据许多帖友的反馈&#xff0c;我也根据重新实测得出结论&#xff1a;该app是提供一天的体验时间&#xff0c;后续还是采取收费才能使用功能的措施。因为现在市面上免费使用的扫描工具很少了&#xff0c;所以当初我初步测试感觉软件不错就发布了出来&#xff…...

Vue 3 动态 ref 的使用方式(表格)

一、问题描述 先给大家简单介绍一下问题背景。我正在开发的项目中&#xff0c;有一个表格组件&#xff0c;其中一列是分镜描述&#xff0c;需要支持视频上传功能。用户可以为每一行的分镜描述上传对应的视频示例。然而&#xff0c;在实现过程中&#xff0c;出现了一个严重的问…...

Bash fork 炸弹 —— :(){ :|: };:

&#x1f9e0; 什么是 Fork 炸弹&#xff1f; Fork 炸弹是一种拒绝服务&#xff08;DoS&#xff09;攻击技术&#xff0c;利用操作系统的 fork() 系统调用不断创建新进程&#xff0c;直到系统资源&#xff08;如进程表、CPU、内存&#xff09;被耗尽&#xff0c;从而使系统无法…...

互联网大厂Java面试:从Spring Boot到微服务架构的技术深挖

场景描述 在某互联网大厂的面试会议室里&#xff0c;严肃的面试官老王正审视着面前的程序员明哥。这场面试以业务场景为切入点&#xff0c;围绕Java技术栈展开。 第一轮&#xff1a;基础知识与Spring生态 面试官老王&#xff1a; 明哥&#xff0c;你对Spring Boot的核心功能…...

IT审计之外包

外包管理的定义与重要性 外包管理是指企业将部分业务或服务委托给外部供应商进行管理和执行的过程。在IT领域&#xff0c;外包管理尤为重要&#xff0c;因为IT系统的复杂性和关键性要求企业必须确保外包服务的质量和安全性。外包管理不仅涉及合同管理&#xff0c;还包括供应商…...

精益数据分析(66/126):技术驱动的大规模用户调研——从工具组合到高效验证

精益数据分析&#xff08;66/126&#xff09;&#xff1a;技术驱动的大规模用户调研——从工具组合到高效验证 在创业的移情阶段&#xff0c;如何突破小规模访谈的局限&#xff0c;快速获取大规模用户反馈&#xff1f;今天&#xff0c;我们结合LikeBright的实战案例与《精益数…...

通俗解释Transformer在处理序列问题高效的原因(个人理解)

Transformer出现的背景 CNN 的全局关联缺陷卷积神经网络&#xff08;CNN&#xff09;通过多层堆叠扩大感受野&#xff0c;但在自然语言处理中存在本质局限&#xff1a; 局部操作的语义割裂&#xff1a;每个卷积核仅处理固定窗口&#xff08;如 3-5 词&#xff09;&#xff0c;…...

第12章 Java多线程机制

12.1 进程与线程 4种状态&#xff1a;新建、运行、中断和死亡。 &#xff08;新建、运行、中断和死亡&#xff09; 建立线程的两种方法&#xff1a;用Thread类或其子类。 线程新建后&#xff0c;必须调用 start () 方法使其进入就绪队列&#xff0c;才有机会获得 CPU 资源&a…...

区间带边权并查集,XY4060泄露的测试点

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 码蹄集 二、解题报告 1、思路分析 关于带边权并查集&#xff1a;并查集&…...

【数据结构】1-4算法的空间复杂度

数据结构知识点合集 知识点 空间复杂度的定义以及计算 空间复杂度--空间开销&#xff08;内存开销&#xff09;与问题规模 n 之间的关系 无论问题规模怎么变&#xff0c;算法运行所需的内存空间都是固定的常量&#xff0c;算法空间复杂度为S(n) O(1)&#xff0c;S 表示 “Spac…...

nt!ExRemoveHeadNBQueue 函数分析

第一部分&#xff1a; 1: kd> p nt!MmMapLockedPagesSpecifyCache0x20f: 80a98491 e8ecb00500 call nt!ExRemoveHeadNBQueue (80af3582) 1: kd> t nt!ExRemoveHeadNBQueue: 80af3582 55 push ebp 1: kd> dv Header 0x89be5008 …...

OpenAI推出Codex — ChatGPT内置的软件工程Agents

OpenAI继续让ChatGPT对开发者更加实用。 几天前,他们增加了连接GitHub仓库的支持,可以"Deep Research"并根据你自己的代码提问。 今天,该公司在ChatGPT中推出了Codex的研究预览版,这是迄今为止最强大的AI编码Agent。 它可以编写代码、修复错误、运行测试,并在…...

AI日报 · 2025年5月15日|GPT-4.1 登陆 ChatGPT

AI日报 2025年5月15日&#xff5c;GPT-4.1 登陆 ChatGPT 1、OpenAI 在 ChatGPT 全面开放 GPT-4.1 与 GPT-4.1 mini 北京时间 5 月 14 日晚&#xff0c;OpenAI 在官方 Release Notes 中宣布&#xff1a;专为复杂代码与精细指令场景打造的 GPT-4.1 正式加入 ChatGPT&#xff0…...

W5500使用ioLibrary库创建TCP客户端

1、WIZnet全硬件TCP/IP协议栈 WIZnet全硬件TCP/IP协议栈,支持TCP,UDP,IPv4,ICMP,ARP,IGMP以及PPPoE协议。 以太网&#xff1a;支持BSD和WIZCHIP&#xff08;W5500/W5300/W5200/W5100/W5100S&#xff09;的SOCKET APIs驱动程序。 互联网&#xff1a; DHCP客户端 DNS客户端 FTP客…...