复现SMO算法:序列最小优化的启发式方法【三、算法原理揭秘-2】

接下来的内容将转向SMO算法的第二个核心组成部分——选择要优化的乘数的启发式方法。在这篇博客中,我们将探讨算法如何通过启发式选择策略高效地识别更新拉格朗日乘数。通过对比直接优化的分析方法和启发式方法的策略选择,我们能够更全面地理解SMO算法在解决支持向量机(SVM)优化问题中的独特优势。

二、选择要优化的乘数的启发式方法

SMO算法包含两个主要步骤:选择需要优化的拉格朗日乘数对和优化这些乘数。算法采用启发式方法选择乘数对,加快收敛速度并确保选择的对最可能迅速改善模型性能。

1.外层循环 - 选择 α 1 \alpha_1 α1

  • 遍历所有训练样本,识别违反KKT条件最严重的样本作为 α 1 \alpha_1 α1
  • 如果某个样本不满足以下条件之一,它就被认为违反了KKT条件:
    • 如果 α i = 0 \alpha_i = 0 αi=0,则要求 y i u i ≥ 1 y_i u_i \geq 1 yiui1
    • 如果 0 < α i < C 0 < \alpha_i < C 0<αi<C,则要求 y i u i = 1 y_i u_i = 1 yiui=1
    • 如果 α i = C \alpha_i = C αi=C,则要求 y i u i ≤ 1 y_i u_i \leq 1 yiui1
  • 如果所有在边界上的支持向量满足KKT条件,则扩展搜索至整个训练集。

2.内层循环 - 选择 α 2 \alpha_2 α2

  • 选择使得 ∣ E 1 − E 2 ∣ |E_1 - E_2| E1E2 最大的 α 2 \alpha_2 α2,其中 E i = u i − y i E_i = u_i - y_i Ei=uiyi 是样本 i i i 的预测误差,这有助于实现 α 2 \alpha_2 α2 的最大变化。

3. 计算和更新 α 1 \alpha_1 α1 α 2 \alpha_2 α2

推导过程,请见博客:复现SMO算法:深入探索序列最小优化的分析方法【三、算法原理揭秘-1】

在SMO算法中, α 1 \alpha_1 α1 α 2 \alpha_2 α2 的优化是算法的核心。这两个乘数的更新是通过解析方法完成的,目的是最大化SVM的目标函数。这一过程可以分为几个步骤:

  1. 计算误差差值
    E 1 = u 1 − y 1 , E 2 = u 2 − y 2 E_1 = u_1 - y_1, \quad E_2 = u_2 - y_2 E1=u1y1,E2=u2y2
    其中, u i u_i ui 是模型对第 i i i 个样本的预测输出, y i y_i yi 是实际标签。

  2. 计算二乘数的上下界
    为了满足约束条件 0 ≤ α i ≤ C 0 \leq \alpha_i \leq C 0αiC ∑ i = 1 N α i y i = 0 \sum_{i=1}^{N} \alpha_i y_i = 0 i=1Nαiyi=0,我们需要计算 α 2 \alpha_2 α2 的上下界(L 和 H)。

    • 如果 y 1 ≠ y 2 y_1 \neq y_2 y1=y2
      L = max ⁡ ( 0 , α 2 o l d − α 1 o l d ) , H = min ⁡ ( C , C + α 2 o l d − α 1 o l d ) L = \max(0, \alpha_2^{old} - \alpha_1^{old}), \quad H = \min(C, C + \alpha_2^{old} - \alpha_1^{old}) L=max(0,α2oldα1old),H=min(C,C+α2oldα1old)
    • 如果 y 1 = y 2 y_1 = y_2 y1=y2
      L = max ⁡ ( 0 , α 1 o l d + α 2 o l d − C ) , H = min ⁡ ( C , α 1 o l d + α 2 o l d ) L = \max(0, \alpha_1^{old} + \alpha_2^{old} - C), \quad H = \min(C, \alpha_1^{old} + \alpha_2^{old}) L=max(0,α1old+α2oldC),H=min(C,α1old+α2old)
  3. 计算 α 2 \alpha_2 α2 的新值
    α 2 \alpha_2 α2 的新值由下式给出:
    α 2 n e w = α 2 o l d + y 2 ( E 1 − E 2 ) η \alpha_2^{new} = \alpha_2^{old} + \frac{y_2 (E_1 - E_2)}{\eta} α2new=α2old+ηy2(E1E2)
    其中, η \eta η 是核函数 K ( x 1 , x 2 ) K(x_1, x_2) K(x1,x2) 的二阶导数,可以理解为对问题的“曲率”或调整步幅的影响因子。

  4. 剪辑 α 2 \alpha_2 α2
    α 2 n e w \alpha_2^{new} α2new 需要在其界限 L 和 H 之间被剪辑:
    α 2 n e w , c l i p p e d = min ⁡ ( max ⁡ ( α 2 n e w , L ) , H ) \alpha_2^{new, clipped} = \min(\max(\alpha_2^{new}, L), H) α2new,clipped=min(max(α2new,L),H)

  5. 更新 α 1 \alpha_1 α1
    根据 α 2 \alpha_2 α2 的变化更新 α 1 \alpha_1 α1
    α 1 n e w = α 1 o l d + y 1 y 2 ( α 2 o l d − α 2 n e w , c l i p p e d ) \alpha_1^{new} = \alpha_1^{old} + y_1 y_2 (\alpha_2^{old} - \alpha_2^{new, clipped}) α1new=α1old+y1y2(α2oldα2new,clipped)

更新偏置 b b b 和误差 E i E_i Ei

  • 根据新的乘数值重新计算偏置 b b b
    b n e w = b o l d − Δ b b_{new} = b_{old} - \Delta b bnew=boldΔb
  • Δ b \Delta b Δb 根据 α 1 \alpha_1 α1 α 2 \alpha_2 α2 的变化量及其对应样本的 y i y_i yi E i E_i Ei 值计算得出。
  • 重新计算所有样本的误差 E i E_i Ei
    E i = ( w T x i + b ) − y i E_i = (\mathbf{w}^T \mathbf{x}_i + b) - y_i Ei=(wTxi+b)yi
  • 更新权重向量 w \mathbf{w} w
    w = ∑ j = 1 m α j y j x j \mathbf{w} = \sum_{j=1}^m \alpha_j y_j \mathbf{x}_j w=j=1mαjyjxj

关键问题解析

问题一:如何判定违反KKT条件最严重?

违反KKT条件的程度是通过样本的乘数 α i \alpha_i αi 和它们的函数间隔 y i u i y_i u_i yiui 的关系来判定的。具体方法如下:

  • α i = 0 \alpha_i = 0 αi=0 的样本:理论上应满足 y i u i ≥ 1 y_i u_i \geq 1 yiui1。如果 y i u i < 1 − ϵ y_i u_i < 1 - \epsilon yiui<1ϵ,这种违反被视为严重。
  • 0 < α i < C 0 < \alpha_i < C 0<αi<C 的样本:应精确满足 y i u i = 1 y_i u_i = 1 yiui=1。偏

离1超过 ϵ \epsilon ϵ 的情况被认为违反严重。

  • α i = C \alpha_i = C αi=C 的样本:应满足 y i u i ≤ 1 y_i u_i \leq 1 yiui1。如果 y i u i > 1 + ϵ y_i u_i > 1 + \epsilon yiui>1+ϵ,同样视为严重违反。
问题二:计算 ∣ E 1 − E 2 ∣ |E_1 - E_2| E1E2 最大的 α 2 \alpha_2 α2
  • 误差 E i E_i Ei 的计算公式为:
    E i = ( ∑ j = 1 m α j y j K ( x j , x i ) + b ) − y i E_i = (\sum_{j=1}^m \alpha_j y_j K(x_j, x_i) + b) - y_i Ei=(j=1mαjyjK(xj,xi)+b)yi
  • 选择 α 2 \alpha_2 α2 通过寻找最大化 ∣ E 1 − E 2 ∣ |E_1 - E_2| E1E2 α j \alpha_j αj 实现,即:
    j = arg ⁡ max ⁡ j ∣ E 1 − E j ∣ j = \arg\max_j |E_1 - E_j| j=argjmaxE1Ej

伪代码实现

初始化所有乘数 alpha_i = 0
为所有 i 初始化误差 E_i
k = 0重复直至收敛:// 外部循环选择 alpha_1对每个样本 i:计算 u_i = sum(alpha_j * y_j * K(x_j, x_i)) + b检查KKT条件如果违反:alpha_1 = alpha_iE_1 = E_i// 内部循环选择 alpha_2找到最大化 |E_1 - E_j| 的 jalpha_2 = alpha_jE_2 = E_j// 优化 alpha_1 和 alpha_2更新 alpha_1 和 alpha_2更新 b 重新计算误差k += 1检查收敛条件

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

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

相关文章

2024洞悉AI人群新范式:AI机会人群社媒研究报告暨人群工厂系列白皮书

来源&#xff1a;蓝色光标 背景&#xff1a;AI生态初步成型&#xff0c;但仍需寻找清晰的商业化场景和机会 • 大模型厂商、核心零部件厂商&#xff08;NVIDIA、Intel&#xff09;、装配商&#xff08;​AIPC、AI手机&#xff09;、AI应用厂商共存&#xff0c;生态系统已经重构…

Windows如何通过wsl2迅速启动Docker desktop的PHP的Hyperf项目容器?

一、安装WSL 什么是WSL&#xff1f; 官网&#xff1a;什么是WSL&#xff1f; Windows Subsystem for Linux (WSL) 是一个在Windows 10和Windows 11上运行原生Linux二进制可执行文件的兼容性层。 换句话说&#xff0c;WSL让你可以在Windows系统上运行Linux环境&#xff0c;而无需…

实验8-13:补全代码,删除字符数组中多个字符

实验8-13&#xff1a;补全代码&#xff0c;删除字符数组中多个字符 【问题描述】 输入字符串存在数组char c[30]中&#xff0c;输入m,n&#xff0c;删除下标m开始的n个字符。输出删除后的结果。 说明&#xff1a;请只提供需要补全的代码部分&#xff0c;不需要提供完整程序。…

【学习vue 3.x】(五)VueRouter路由与Vuex状态管理

文章目录 章节介绍本章学习目标 路由的基本搭建与嵌套路由模式vue路由的搭建嵌套路由模式 动态路由模式与编程式路由模式动态路由模式编程式路由 命名路由与命名视图与路由元信息命名路由命名视图路由元信息 路由传递参数的多种方式及应用场景路由传参 详解route对象与router对…

代码审计之SAST自动化

前言: 很久没写文章了&#xff0c;有点忙&#xff0c;落个笔&#xff0c;分享一些捣鼓或说适配好的一些好玩的东西。 脚本工具不开源&#xff0c;给一些思路&#xff0c;希望能给大家带来一些收获。 笔者能力有限&#xff0c;如有错误&#xff0c;欢迎斧正。 正文&#xff1a…

使用docker创建rocketMQ主从结构,使用

1、 创建目录 mkdir -p /docker/rocketmq/logs/nameserver-a mkdir -p /docker/rocketmq/logs/nameserver-b mkdir -p /docker/rocketmq/logs/broker-a mkdir -p /docker/rocketmq/logs/broker-b mkdir -p /docker/rocketmq/store/broker-a mkdir -p /docker/rocketmq/store/b…

渗透测试类面试非技术问题

1、此时你负责等保测评几台服务器设备&#xff0c;没有相关权限&#xff0c;客户不愿意提供&#xff0c;你如何处理 答&#xff1a; 梳理相关服务器的测评流程&#xff0c;让客户按测评流程走一遍&#xff0c;你看着他们操作&#xff0c;或者录屏等方式&#xff0c;如果这…

卫星通信现状与展望二 -- 星链

美国星链通信系统(StarLink) 1. 基本情况 星链通信系统是由美国太空探索技术公司(SpaceX)于2014年提出的低轨互联网星座计划,目标是建设一个全球覆盖、大容量、低时延的天基通信系统,在全球范围内提供高速互联网服务。 星链计划经过多轮方案变更调整,共规划了3期系统…

Maven解决找不到依赖项

报错如图 方案一&#xff1a;Maven的Setting文件中添加albaba的镜像文件 1.下载maven &#xff1a;Maven – Download Apache Maven 2. 配置镜像 更改成这个&#xff1a; <mirror> <id>alimaven</id> <name>aliyun maven</name> <url&g…

Python量化炒股的财务因子选股

Python量化炒股的财务因子选股-财务因子选股 选股是股市投资的第一步&#xff0c;是最基础的一步&#xff0c;也是最重要的一步。 初识财务因子选股 量化选股是利用数量化的方法选择股票组合&#xff0c;期望该股票组合能够获得超越基准收益率的投资行为。总的来说&#xff…

PDF 正确指定页码后,挂载的书签页码对不上

这个问题与我的另一篇中方法一样 如何让一个大几千页的打开巨慢的 PDF 秒开-CSDN博客 https://blog.csdn.net/u013669912/article/details/138166922 另作一篇的原因 一篇文章附带一个与该文章主题不相关的问题时&#xff0c;不利于被遇到该问题的人快速搜索发现以解决其遇到…

数据结构学习/复习1--时间复杂度计算/异或的几个实际用途

一、什么是数据结构和算法 1注&#xff1a;在内存中的存储管理数据 2注&#xff1a;解决问题的方法 二、时间复杂度 1.算法的效率 2.时间复杂度的概念 计算时间复杂度案例1&#xff1a; 计算时间复杂度案例2&#xff1a; 计算时间复杂度案例3&#xff1a; 计算…

问题(十五)性能分析组件类加载问题

一、引言 最近作者在做性能分析服务的agent&#xff0c;有个功能是在代理启动的时候加载配置中心&#xff0c;拿到具体哪些目录下的类需要增强&#xff0c;这里碰到了类加载失败的问题。 二、类加载 1、问题 这里使用了pom的设置&#xff0c;在class文件被拉进去&#xff0c;…

Fastadmin 日常项目常见用法整理

ps&#xff1a;自己使用笔记备用&#xff0c;不间断更新&#xff0c;常见功能点 一&#xff0c;数据库后缀 结尾字符示例类型要求字段说明timerefreshtimebigint/datetime识别为日期时间型数据&#xff0c;自动创建选择时间的组件imagesmallimagevarchar识别为图片文件&#…

HTML5(1)

目录 一.HTML5(超文本&#xff08;链接&#xff09;标记&#xff08;标签<>&#xff09;语言) 1.开发环境&#xff08;写代码&#xff0c;看效果&#xff09; 2.vscode 使用 3.谷歌浏览器使用 4.标签语法 5.HTML基本骨架&#xff08;网页模板&#xff09; 6.标签的…

vue钩子函数、生命周期

Vue.js的生命周期主要分为四个阶段&#xff1a;创建阶段、编译阶段、挂载阶段、更新与销毁阶段。每个阶段都有对应的生命周期钩子函数。 创建阶段&#xff1a;包含生命周期钩子&#xff1a;beforeCreate 和 created beforeCreate: 在实例初始化之后&#xff0c;数据观测&#x…

Jetson Orin NX L4T35.5.0平台LT6911芯片 调试记录(2)vi discarding frame问题调试

基于上篇调试记录 Jetson Orin NX L4T35.5.0平台LT6911芯片 调试记录(1)MIPI问题调试-CSDN博客 1.前言 当通过gstreamer持续捕获视频设备时,帧数会下降,并且I输入越高,丢失的帧数越多。 当达到4k30hz时,它完全无法使用,系统会在几秒钟的收集后崩溃并重新启动 4k30hz …

【C++】:类和对象(下)

目录 一&#xff0c;再谈构造函数1.初始化列表2. 隐式类型转换的过程及其优化3. 隐式类型转换的使用4. explcit关键字5. 单参数和多参数构造函数的隐式类型转换 二&#xff0c;static成员1.静态成员变量2.静态成员函数 三&#xff0c;友元3.1 友元函数3.2 友元类 四&#xff0c…

Ansys Speos|进行智能手机镜头杂散光分析

本例的目的是研究智能手机Camera系统的杂散光。杂散光是指光向相机传感器不需要的散光光或镜面光&#xff0c;是在光学设计中无意产生的&#xff0c;会降低相机系统的光学性能。 在本例中&#xff0c;光学透镜系统使用Ansys Zemax OpticStudio (ZOS)进行设计&#xff0c;并使用…

LangChain入门2 RAG详解

RAG概述 一个典型的RAG应用程序,它有两个主要组件&#xff1a; 索引&#xff1a;从源中获取数据并对其进行索引的管道。这通常在脱机情况下发生。检索和生成&#xff1a;在运行时接受用户查询&#xff0c;并从索引中检索相关数据&#xff0c;然后将其传递给模型。 从原始数据…