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

高级优化算法之 fminunc函数 实践

说明

    在本专栏机器学习_墨@#≯的博客-CSDN博客前面几篇文章中,大多采用梯度下降法来求解。其实还有很多的高级优化算法可以用来求解回归和分类问题,本文就是在吴恩达机器学习视频课程[1]的启示下,想要简单尝试一下Matlab自带的无约束多变量函数最小值优化工具:fminunc。

    本文的内容很简单,说白了就是一个函数的介绍和使用。(本来并不想形成一篇博文的,不过csdn一天连发两篇似乎有流量券,于是凑了一下本文)。不过,本文也算是对高级优化算法起了个头,后续如果接触和使用到更具体的算法我再在本文基础上补充。

Blog

2024.10.24  博文第一次撰写

目录

说明

目录

一、有关机器学习问题中的高级优化算法

二、Matlab自带的Fminunc函数介绍与实践

2.1 fminunc函数介绍

2.2 fminunc函数实践1 --- 曲面最小值

2.3 fminunc函数实践2 --- 直线拟合

三、总结

四、参考资料

五、数据与代码链接


一、有关机器学习问题中的高级优化算法

    在本专栏机器学习_墨@#≯的博客-CSDN博客前面几篇文章中,对于机器学习的典型问题如:回归、分类的解决,我们采用的方法是梯度下降法(特别是批量梯度下降法,当然也对其变体,如小批量梯度下降法以及随机梯度下降法做了介绍)。梯度下降法有其缺点:特别是要预设合适的超参数:学习率,此外,梯度下降法的收敛速度一般(当然,也与学习率有关)。  那么,有没有更加优越的方法?(不需要设置学习率,收敛速度还能更快?)。自然是有的!计算机以及数学发展这么多年,科研工作者们发明了很多的高级优化算法:比如共轭梯度算法(Conjugate Gradient)、牛顿法及其变体(如BFGS、L-BFGS)、AdaGrad算法、Adam算法等等。这些算法可以不需要人为地设置学习率,且收敛速度比梯度下降法更快(当然,这些都是以增加计算复杂度为代价的)。

    不过前述更高级的优化算法的原理理解需要比梯度下降法更复杂繁琐的数学推导,本文不做尝试。本文只是在吴恩达机器学习视频课程[1]的启示下,想要简单尝试一下Matlab自带的无约束多变量函数最小值优化工具fminunc。Fminunc使用的应该是拟牛顿法来进行优化求解。

二、Matlab自带的Fminunc函数介绍与实践

2.1 fminunc函数介绍

    fminunc函数是一个非线性规划求解器,可用于求解无约束多变量函数的最小值。其典型的调用方式如下:

输入包括:

costfunc是一个需要定义的函数,我们要在该函数体中给出需要优化的函数。

InitilaTheta 是解的初始值(这里的解就是前述损失函数costfunc的解)。

options 是优化选项,是一个结构体,可以在其中配置包括:所使用的优化算法(支持quasi-newton和trust-region)、允许的最大迭代次数等。

输出包括:

optTheta是优化完成后的参数值(损失函数的解)。

functionval是损失函数在该优化好的参数值下的损失值。

exitFlag是给出是否已经收敛的标签,为1表示已经收敛。

    使用fminunc函数的关键在于设计损失函数costfunc,在前述介绍的基础上,我们就可以基于该函数解决一些问题。

2.2 fminunc函数实践1 --- 曲面最小值

    视频课[1]中介绍该函数时,使用的例子是:

                    (2-1)

    在实数范围内求使得该损失函数取得最小值的theta值。其实有些数学基础的就直接可以看出当theta = [5 5]时,上式取得最小值0。 其函数图像如下图所示:

图2.1 costfunc图像

    对该损失函数的优化,代码如下:

图2.2 调用fminunc函数解决式(2-1)问题的代码

    得到的结果如下:

图2.3  优化结果

    其优化得到的theta值为5和5,损失值为0,并且收敛。 结果符合预期。

2.3 fminunc函数实践2 --- 直线拟合

    在博文[2]中,我们使用梯度下降法求解了单变量(特征)下的曲线拟合问题、多变量(特征)下的房屋价格拟合问题。 这些问题也可以用高级优化算法求解,具体到fminunc函数,关键在于求解损失函数costfunc。

    为类比博文[2],我尝试过用fminunc来求一元四次函数的拟合,但是costfunc的求解太繁琐了,最终放弃了。 本章以最基本的直线拟合来实践一下该fminunc函数。

    【数据集】:待拟合的直线设置为: y = 1 + x,数据集我直接通过给该直线上的点噪声获得。

图2.4  数据集生成

    通过给y值加一个SNR =10的高斯白噪声得到如右图所示的数据集。进一步地,将数据的顺序随机打乱,并选取2/3的数据作为训练集,其余为测试集。如下图所示:

图2.5  训练集和测试集

【模型与损失函数】:我们用线性模型来做回归:

                                                        (2-2)

    其损失函数设计为均方误差和:

                                          (2-3)

    式中,m为训练集的样本数。关于这里有不了解的,可以参考博文[2]。

【调用fminunc函数】:使用该fminunc函数的关键在于计算得到costfunc,式(2-3)就是costfunc,对(2-3)式拆解(公式插入有误,我这里直接贴图片):

    我们需要把全部的训练数据集代入式(2-4)!并最终求得各θ值对应的系数。 (试想如果是一元四次函数,上面的式子要复杂几倍不止,暂时没想到更简单的解法,所以我放弃了)。求得前述θ值后,按照图2.2所示类似的方法,代入对应的数据,得到结果如下:

图2.6  fminunc函数输出结果

    截距和系数几乎都为1,与我们预设的直线很接近,结果符合预期。将拟合得到的曲线与数据集画在一起,得到:

图2.7 回归结果(与全部数据集的对比)

    图中红色为拟合得到的直线。 结果符合预期。

三、总结

    本文对适用于机器学习里的回归、分类问题的高级优化算法做了简单的介绍,随后介绍了Matlab自带的非线性规划求解器:fminunc函数,并基于该函数对曲面最小值问题、直线回归问题进行了求解尝试。

    本文的内容很基础,后续如果接触和使用到更具体的算法我再在本文基础上补充。

四、参考资料

[1] [中英字幕]吴恩达机器学习系列课程_哔哩哔哩_bilibili

[2] 回归问题探讨与实践-CSDN博客

五、数据与代码链接

本文相关的代码请参考如下链接获取:

高级优化算法之fminunc函数实践博文对应的代码资源-CSDN文库

  

 

 

相关文章:

高级优化算法之 fminunc函数 实践

说明 在本专栏机器学习_墨#≯的博客-CSDN博客前面几篇文章中,大多采用梯度下降法来求解。其实还有很多的高级优化算法可以用来求解回归和分类问题,本文就是在吴恩达机器学习视频课程[1]的启示下,想要简单尝试一下Matlab自带的无约束多变量函数…...

1.5 ROS架构

到目前为止,我们已经安装了ROS,运行了ROS中内置的小乌龟案例,并且也编写了ROS小程序,对ROS也有了一个大概的认知,当然这个认知可能还是比较模糊并不清晰的,接下来,我们要从宏观上来介绍一下ROS的…...

Redis Search系列 - 第四讲 支持中文

目录 一、支持中文二、自定义中文词典2.1 Redis Search设置FRISOINI参数2.2 friso.ini文件相关配置1)自定义friso UTF-8字典2)修改friso.ini配置文件 三、实测中文分词效果 一、支持中文 Redis Stack 从版本 0.99.0 开始支持中文文档的添加和分词。中文…...

架构师备考-架构图设计案列

本文中所涉及的架构图主要参考软考-架构设计师历年Web 架构设计案例真题,在其基础上进行补充说明。 历年软考架构师案例题-Web架构设计考点 2014 MVC 架构2015、2016 J2EE 架构2017 经典网络架构2018 SOA 架构2019 分布式架构2020 SSM 架构2021 云平台架构2022 物…...

专业级Facebook直播工具推荐:提升你的直播体验

随着社交媒体的迅速发展,直播已成为现代内容传播的重要方式。Facebook作为全球最大的社交平台之一,为用户和企业提供了丰富的直播功能,吸引了众多观众和参与者。在这个竞争激烈的环境中,如何打造高质量的直播内容显得尤为重要。本…...

【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (三):Cors的设置及.env文件的设置

本项目旨在学习如何快速使用 nodejs 开发后端api,并为以后开展其他项目的开启提供简易的后端模版。(非后端工程师) 由于文档是代码写完之后,为了记录项目中需要注意的技术点,因此文档的叙述方式并非开发顺序&#xff0…...

[python flask 数据库ORM操作]

一、链接数据库 我们选择的框架是flask-sqlAlchemy 这个框架是对pymysql的封装。 连接数据库 #导入包 from flask_sqlalchemy import SQLAlchemy #创建flask app对象 app Flask(__name__) #设置配置信息 HOSTNAME "localhost" PORT 3306; USERNAME "root&…...

【JavaScript】如何优雅的编码if判断中的一个变量多个或条件

前言 你是否写过这样代码: ...if (status 1 || status 4 || status 6)...代码场景是这样的,记录有多个状态,当状态等于1,4,6时要做相同的逻辑。今天我们就分享一下如何简化写法,让代码更好看,更优雅。 使用 switch 语句 ...…...

SaaS云诊所系统源码,基于云计算技术的SAAS模式诊所管理系统,适用于诊所、门诊、卫生服务站、卫生站

SaaS云诊所管理系统源码,门诊管理系统源码,诊所药店云平台源码 云诊所管理系统是基于云计算的SAAS模式诊所管理系统,全面适用于诊所、门诊、卫生服务站、卫生站、卫生所、中医馆、药店、私人个体诊所、中小型门诊、乡村卫生室、医务室以及社…...

字节,AI产品经理面试,拿下offer!

如果大家最近打算找ai产品经理这方面的工作,可以对照着脑图准备起来啦。 这篇文章给大家讲解两道高频问题: 1)AI产品经理和传统产品经理有什么区别 2)AI 产品经理的工作职责和能力要求是什么? 这两个问题看似简单&a…...

Postgresql pgsql 插件之postgis 安装配置

相关链接: pgsql编译安装 一、说明 postgis是pgsql最强大的几个插件之一,可以用于地理信息系统(gis)的搭建 二、插件安装启动 由于我的pgsql是编译安装的,所以插件也是编译安装,更加灵活。 1.进入到源…...

单片机STC8H8K64U开发板_RA6809开发板 驱动彩屏显示

单片机STC8H8K64U开发板,型号RT8H8K001 预留Type C接口,可供电SWD下载: RA6809开发板,型号RT6809CNN01 预留Type C接口供电,预留MCU接口、电容触摸屏接口、液晶屏接口: 双臂合一,驱动和控…...

Redis底层和缓存雪崩,击穿,穿透

一、Redis的数据结构 1.动态字符串 我们知道Redis中保存的Key是字符串,value往往hi字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。不过,Redis 没有直接使用c语言的字符串,因为c语言字符串存在许多问题: …...

[Java基础] 集合框架

往期回顾 [Java基础] 基本数据类型 [Java基础] 运算符 [Java基础] 流程控制 [Java基础] 面向对象编程 [Java基础] 集合框架 [Java基础] 输入输出流 [Java基础] 异常处理机制 [Java基础] Lambda 表达式 目录 List 接口 数据结构 最佳实践 实战代码 Set 接口 数据…...

机器学习基础:算法如何让 AI 自我学习

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 AI工具集1:大厂AI工具【共23款…...

25届字节跳动 抖音NLP算法工程师 面经

目录 一面/技术面 2024/08/30二面/技术面 2024/09/13 一面/技术面 2024/08/30 深挖实习(最近的一段实习)深挖论文(让我共享屏幕,然后对着自己的论文讲)论文做了多久完成的?主要都做了哪些工作?…...

转行网络工程师以后的就业前景如何?

就业前景如何本质上取决于你在这行业的发展状况,而发展状况又主要由你的技术水平和与人交流的能力所决定。 如果你的技术能力仅限于"安服仔"、"脚本小子"等入门级水平,那你的职业发展可能会像浮萍一样漂泊不定。但如果你能轻松编写…...

docker 和 containerd 关系

containerd 是一个开源的容器运行时,它是用来管理容器生命周期的守护进程。containerd 支持 Docker 和其他容器格式,并且是许多现代容器编排系统(如 Kubernetes)的基础组件之一。 containerd 提供了一个命令行工具 ctr&#xff0…...

算法-二叉树的最大路径和

为了找到二叉树的最大路径和,我们需要考虑所有可能的路径,包括不经过根节点的路径,所以其实如果你从整体上来一条路径一条路径的遍历,太复杂,我们可以换个思路,从每个节点出发,就把那个节点当成…...

解决url含%导致404错误

String imageUrl;// 使用WebClient下载图片WebClient webClient WebClientUtil.getWebClient();Mono<ByteArrayOutputStream> byteArrayOutputStreamMono webClient.get().uri(imageUrl).retrieve().bodyToFlux(DataBuffer.class) // 获取图片内容的DataBuffer流.reduc…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...