机器学习和深度学习·贝叶斯优化和optuna

news2024/11/24 12:06:09

贝叶斯优化

贝叶斯优化的思想

先验:取点
似然:假设分布
取了n个点之后…
后验:近似取得极值

贝叶斯优化的数学过程

在贝叶斯优化的数学过程当中,我们主要执行以下几个步骤:

  • 1 定义需要估计的 f ( x ) f(x) f(x)以及 x x x的定义域

  • 2 取出有限的n个 x x x上的值,求解出这些 x x x对应的 f ( x ) f(x) f(x)(求解观测值)

  • 3 根据有限的观测值,对函数分布进行假设(该假设被称为贝叶斯优化中的先验知识),得出该假设分布上的目标值

  • 4 定义某种规则,确定下一个需要计算的观测点

并持续在2-4步骤中进行循环,直到假设分布上的目标值达到我们的标准,或者所有计算资源被用完为止。以上流程又被称为序贯模型优化(SMBO),是最为经典的贝叶斯优化方法。

在实际的运算过程当中,尤其是超参数优化的过程当中:

  • 需要定义的 f ( x ) f(x) f(x)一般是交叉验证的结果/损失函数的结果,而 x x x就是超参数空间, x x x的定义域中是超参数的各种组合

  • 有限的观测值数量是贝叶斯优化的超参数之一,该观测数量也决定了整个贝叶斯优化的迭代次数

  • 在第3步根据有限的观测值、对函数分布进行假设的工具被称为概率代理模型,概率代理模型往往是一些强大的算法,最常见的比如高斯过程、随机森林等等。传统数学推导中往往使用高斯过程,但现在最先进、最普及的优化库中默认是使用基于随机森林的TPE过程。

  • 在第4步中用来确定下一个观测点的规则被称为采集函数,最常见的主要是概率增量(依据概率密度函数的极值)、期望增量、信息熵等等,其中大部分优化库中默认使用期望增量,具体表达式如下:

optuna

一个流行的自动调超参数的工具,拥有简单的API和实用的功能。
在这里插入图片描述

使用流程

先定义objective函数,params传入字典,按照正常训练流程fit和predict
创建学习对象study,调用optimize

def objective(trial):
    params = {
        'objective': 'binary:logistic',  # 使用二分类任务的目标函数
        'random_state':1412,
        'min_samples_split':trial.suggest_int('min_samples_split', 2, 10),
        'n_estimators': trial.suggest_int('n_estimators', 1, 200),
        'max_depth': trial.suggest_int('max_depth', 3, 10),
        'subsample': trial.suggest_uniform('subsample', 0.1, 1.0),
        'colsample_bytree': trial.suggest_uniform('colsample_bytree', 0.1, 1.0),
        'learning_rate': trial.suggest_loguniform('learning_rate', 0.001, 0.1),
        'eval_metric': 'logloss',  # 使用logloss作为评价指标
        'booster': trial.suggest_categorical('booster', ['gbtree', 'gblinear', 'dart']),
    }
    xgb_model = XGBClassifier(**params)
    xgb_model.fit(X_train, Y_train)
    y_pred = xgb_model.predict_proba(X_cv)[:, 1]  # 获取正类的概率
    loss = log_loss(Y_cv, y_pred)  # 使用验证集计算log_loss
    return loss

study = optuna.create_study(direction='minimize')
study.optimize(objective, n_trials=100, show_progress_bar=False) 
study.best_params

trial.suggest

这个是用于搜索可能参数值的函数
trial.suggest_int:返回整型
trial.suggest_uniform:返回浮点数
trial.suggest_loguniform:这个返回一个更大范围的浮点数
trial.suggest_categorical('booster', ['gbtree', 'gblinear', 'dart'])离散型变量,例如SVM中kernel函数的类型
trial.suggest_normal:返回正态分布,特点是会返回正数

study的属性值

study.best_params最佳参数,是一个字典,可以直接传入训练器中
study.best_value最优目标值
study.trials实验次数

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

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

相关文章

零基础学习Python(七)

1. 字符串常用方法 lower()、upper():转换为小写字符串、大写字符串 split(str):按照指定字符串str进行分割,结果为列表: email "123qq.com" print(email.split("")) [123, qq.com] count(str)&#xf…

MySQL 系统库

文章目录 一. 概念二. performance_schema1. 概念 2. 检查当前数据库版本是否支持3. performance_schema表分类5. 配置与使用6. 查看执行失败的SQL语句7. 查看最近事务执行信息8. 小结 三. sys系统库1. 使用须知2. 使用3. 查看慢SQL语句慢在哪4. 小结 四. Information_schema1.…

中国城市经济韧性数据集(2007-2022年)

数据来源:数据来自历年《中国城市统计NJ》、各省市《统计NJ》及《中国区域经济统计NJ》 时间范围:2007-2022年 数据范围:中国地级市样例数据: 包含内容: 全部内容下载链接(原始数据计算代码最终数据&…

Spring Boot DevTools:简化开发,实现热部署

Spring Boot DevTools:简化开发,实现热部署 1、如何集成?MavenGradle 2、主要特性3、注意事项 💖The Begin💖点点关注,收藏不迷路💖 Spring Boot DevTools是开发者的得力助手,它通过…

AR 眼镜之-系统通知定制(通知弹窗)-实现方案

目录 📂 前言 AR 眼镜系统版本 系统通知定制 1. 🔱 技术方案 1.1 技术方案概述 1.2 实现方案 1)实现系统通知的监听 2)系统通知显示:通知弹窗 2. 💠 实现系统通知的监听 2.1 继承 NotificationLi…

全场景——(六)Moubus 功能码详解

文章目录 一、功能码概要二、(0x01)读取线圈2.1 功能说明2.2 查询报文2.3 响应报文 三、 (0x02) 读取离散量输入值3.1 功能说明3.2 查询报文3.3 响应报文 三、(0x03)读取保持寄存器值3.1 功能说明3.2 查询报文3.3 响应报文 五、 (…

LabVIEW项目中硬件选型与长期需求沟通

在LabVIEW项目中,选择合适的硬件和有效的需求沟通是成功的关键。大品牌硬件通常具备更高的稳定性和完善的售后服务,而小品牌虽然看似便宜,却可能带来通讯不稳定、技术支持不足等问题,增加开发难度。同时,在科研类项目中…

光性能 -- OSNR Loss均衡

什么是OSNR? OSNR(Optical Signal Noise Ratio )即光信噪比。它是指传输链路中的信号光功率与噪声光功率的比值,OSNR计算公式如下所示: OSNR是决定波分系统性能的最主要因素之一。它决定了传输性能的最高值&#xff0c…

ZaKi:Ingonyama的Prover market基础设施

1. 引言 Ingonyama团队预计在不久的将来会出现大量去中心化证明市场(Prover market)。这些市场的独特之处在于高可用性和高性能的基础设施,以及强大的安全性和透明度保障。 2. 证明市场的出现 零知识 (ZK) Rollups,如 Starknet…

望繁信科技亮相2024数博会:以流程智能引领数字化转型新未来

在全球瞩目的2024中国国际大数据产业博览会(以下简称“数博会”)上,上海望繁信科技有限公司(简称“望繁信科技”)作为大数据流程智能领域的领军企业,隆重亮相并展示了其在数字化转型与人工智能领域的最新科…

如何使用WebSafeCompiler进行网站优化和知识产权保护

关于WebSafeCompiler WebSafeCompiler是一款功能强大的Web安全与优化工具,该工具基于Node.js开发,可以帮助广大研究人员编译静态网站以进行优化或知识产权保护。 WebSafeCompiler(WSC)是一款高级Node.js实用程序,旨在…

Python 处理 PDF 文件(PyPDF2, ReportLab)

Python 是一门强大的编程语言,在处理PDF文件方面有着丰富的库支持,其中最常用的两个库是 PyPDF2 和 ReportLab。PyPDF2 主要用于读取、拆分、合并和修改已有的PDF文件,而 ReportLab 则擅长生成新的PDF文件。 一、PyPDF2 1. PyPDF2 概述 Py…

Mysql剖析(四)----Mysql的行锁、表锁、间隙锁详解

目录 一丶Mysql的锁分类 二丶乐观锁和悲观锁 三丶共享锁和排它锁 四丶表锁页锁和行锁 五丶Mysql锁超时 简介:编程中的锁是一种同步机制,用于控制对共享资源的访问,确保同一时间只有一个线程可以访问共享资源,从而避免竞态条件…

通信协议——Modbus 讲明白了

目 录 Modbus通信协议一、说明1.1 描述1.2 查询1.3 响应 二、异常三、功能码 Modbus通信协议 Modbus由Modicon公司(也是现在的施耐德电气)于1979年开发,是一种工业现场总线协议标准。最初是为使用PLC(可编程逻辑控制器&#xff0…

[激光原理与应用-126]:傅里叶变化与频域分析

目录 一、什么是傅里叶变换 1.1 基本概念 (1)首先,先看时域图像: (2)接下来,频域波形 (3)傅里叶变换 1.2 应用 (1)离散傅里叶变换在图像处…

Shell脚本格式化打印信息样例

以下是一个基于Centos7安装docker的脚本 logging.sh [rootbogon ~]# cat logging.sh #!/bin/bashNC\033[0m RED\033[31m GREEN\033[32m YELLOW\033[33m BLUE\033[34mlog::err() {printf "[$(date %Y-%m-%dT%H:%M:%S.%2N%z)][${RED}ERROR${NC}] %b\n" "$"…

美团2024年春招第一场笔试【前端移动端方向】编程题题解Java

1、小美的平衡矩阵 前缀和,时间复杂度为O(n^3) 对于每个矩形,已知边长k,只用每次遍历矩形的左上顶点,就可以确定整个矩形范围。然后统计该矩形中01的具体数量,判断是否相等。而这一步可以使用前缀和,建立数…

PN结--

文章目录 准备知识P型 N型半导体多子 少子(相关性质受温度影响程度的关键点) PN结的形成势垒 PN结的单向导通性正向偏置反向偏置 PN结的电流方程正向特性反向特性反向击穿反向击穿会把二极管搞坏吗 掺杂浓度与其宽度的关系 准备知识 P型 N型半导体 P型…

无人机之使用技巧篇

无人机使用技巧涉及多个方面,从起飞前的准备到飞行中的操控,再到降落后的维护,都需要掌握一定的技巧。以下是一些关键的无人机使用技巧: 一、起飞前准备 检查无人机:确保无人机完好无损,各部件连接牢固&a…

Adobe DC 2022提示无法识别的错误 - 解决方案

Adobe DC 2022提示无法识别的错误 - 解决方案 问题解决方案更改安装(推荐)重新安装(推荐)降级安装(不推荐) 问题 使用Adobe DC 2022合并图片创建PDF时,会提示无法识别的错误,这是因…