24/9/24 算法笔记 超参数优化算法

在机器学习中,优化超参数的算法是至关重要的,因为它们可以帮助我们找到最佳的模型配置,从而提高模型的性能。以下是一些常用的超参数优化算法:

  1. 网格搜索(Grid Search):这是一种穷举搜索的方法,它会系统地遍历多种超参数的组合,通过交叉验证来确定每种组合的性能,并选择最佳的参数组合。这种方法的缺点是计算成本很高,特别是当参数数量和数据集大小增加时。

  2. 随机搜索(Random Search):与网格搜索不同,随机搜索不会尝试所有的参数组合,而是在参数空间中随机选择参数组合。这种方法通常比网格搜索快,并且在大型数据集中表现更好,因为它不需要遍历所有可能的参数组合。

  3. 贝叶斯优化(Bayesian Optimization):贝叶斯优化是一种更智能的搜索方法,它使用概率模型来预测哪些参数可能会带来更好的性能,并据此来选择新的参数组合进行尝试。这种方法特别适合于优化成本高昂的模型,因为它可以在较少的迭代次数内找到较优的参数组合。

  4. 遗传算法(Genetic Algorithms):遗传算法是一种启发式搜索算法,它模仿自然选择的过程。它通过选择、交叉、变异和遗传等操作来迭代地改进参数组合。

  5. Hyperband:这是一种基于多臂老虎机的算法,它在不同的预算下频繁执行连续减半的方法,以找到最佳配置。Hyperband算法在资源有限的情况下,能够快速有效地找到较好的超参数组合。

  6. BOHB(Bayesian Optimization and Hyperband):BOHB结合了贝叶斯优化和Hyperband算法的优势,它是一种多保真优化方法,可以根据预算进行调整。BOHB在保持高效的同时,也能够在更广泛的应用中找到更好的超参数组合。

  7. Successive Halving:这是一种逐步减少候选集大小的方法,它在每一轮中都会淘汰掉一半表现最差的超参数组合,直到找到最佳组合。

  8. TPE(Tree-structured Parzen Estimator):这是一种基于概率模型的优化算法,它通过构建一个概率模型来预测参数的好坏,并据此来选择新的参数进行尝试。

 网格搜索(Grid Search)

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 定义模型
model = RandomForestClassifier()# 定义参数网格
param_grid = {'n_estimators': [100, 200, 300],'max_depth': [10, 20, 30, None],'min_samples_split': [2, 5, 10]
}# 创建网格搜索对象
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=5, scoring='accuracy')# 执行网格搜索
grid_search.fit(X, y)# 输出最佳参数
print(grid_search.best_params_)

param_grid 是一个字典,它定义了你想要在网格搜索中探索的参数及其可能的值。GridSearchCV 会遍历这个网格中的所有参数组合,通过交叉验证来评估每一组参数的表现,并最终选择最佳的参数组合。

具体来说,param_grid 中的每个键值对代表一个超参数和它的候选值列表。在这个例子中,有三个超参数:

  1. n_estimators:决策树的数量。这里提供了三个候选值 [100, 200, 300]。
  2. max_depth:树的最大深度。这里提供了四个候选值 [10, 20, 30, None],None 表示树的深度没有限制。
  3. min_samples_split:分裂内部节点所需的最小样本数。这里提供了三个候选值 [2, 5, 10]。

GridSearchCV 会创建一个参数的所有可能组合的网格,并针对每一组参数训练模型,然后评估模型的性能。例如,如果 n_estimators 有三个候选值,max_depth 有四个候选值,min_samples_split 有三个候选值,那么总共会有 3 * 4 * 3 = 36 种不同的参数组合。

随机搜索(Random Search)

from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from scipy.stats import randint as sp_randint# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 定义模型
model = RandomForestClassifier()# 定义参数分布
param_dist = {'n_estimators': sp_randint(100, 301),'max_depth': [10, 20, 30, None],'min_samples_split': sp_randint(2, 11)
}# 创建随机搜索对象
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_dist, n_iter=100, cv=5, scoring='accuracy', random_state=42)# 执行随机搜索
random_search.fit(X, y)# 输出最佳参数
print(random_search.best_params_)

贝叶斯优化(Bayesian Optimization)

from skopt import BayesSearchCV
from skopt.space import Real, Integer, Categorical
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 定义模型
model = RandomForestClassifier()# 定义参数空间
search_spaces = {'n_estimators': Integer(100, 300),'max_depth': Integer(10, 30),'min_samples_split': Integer(2, 10)
}# 创建贝叶斯优化对象
bayes_search = BayesSearchCV(estimator=model, search_spaces=search_spaces, n_iter=32, cv=5, scoring='accuracy', n_jobs=-1, random_state=42)# 执行贝叶斯优化
bayes_search.fit(X, y)# 输出最佳参数
print(bayes_search.best_params_)

Hyperband

from hpbandster.optimizers.bayes import BOHB
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加载数据集
iris = load_iris()
X, y = load_iris(return_X_y=True)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)# 定义目标函数
def objective(params):model = RandomForestClassifier(**params)model.fit(X_train, y_train)accuracy = model.score(X_test, y_test)return {'loss': -accuracy, 'status': 'ok'}# 定义参数空间
params_space = {'n_estimators': (100, 300),'max_depth': (10, 30),'min_samples_split': (2, 10)
}# 创建Hyperband优化器对象
optimizer = BOHB(objective, params_space, num_iterations=81, random_state=42, min_budget=1, max_budget=27)# 执行Hyperband优化
optimizer.run()# 输出最佳参数
print(optimizer.result['best_config'])

每种算法都有其适用场景,选择哪种算法通常取决于具体问题、数据集的大小、模型的复杂度以及计算资源的可用性。

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

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

相关文章

分布式系统实战经验

分布式系统是现代软件架构的核心部分,它通过多个计算节点协同工作来处理大规模数据和请求,提供高可用性、可扩展性和容错能力。在实际开发和运维中,构建分布式系统需要考虑多方面的挑战。以下是一些在分布式系统中的实战经验: 1.…

springboot文件上传+拦截器

springboot文件上传拦截器 文章目录 springboot文件上传拦截器1.静态资源访问静态目录: 2.文件上传文件上传配置文件书写文件上传代码 3.拦截器1.初始化拦截器2.初始化配置文件 1.静态资源访问 静态目录: 这里的static就是spring boot默认存放静态资源的…

ZYNQ FPGA自学笔记~操作PLL

一 时钟缓冲器、管理和路由 垂直时钟中心(clock backbone)将设备分为相邻的左侧和右侧区域,水平中心线将设备分为顶部和底部两侧。clock backbone中的资源镜像到水平相邻区域的两侧,从而将某些时钟资源扩展到水平相邻区域。BUFG不…

考研数据结构——C语言实现小顶堆

数组初始化: 首先,我们有一个整数数组arr,里面包含了一系列需要排序的数字。数组的长度n是通过对数组arr的总字节大小除以单个元素的字节大小得到的。 小顶堆调整函数: adjustHeapMin函数的作用是将数组中的元素从某个节点向下调整…

[001-02-001].第2节:java开发环境搭建

4.1.书籍推荐: 4.2.人机交互方式 1.图形化界面(Graphical User Interface GUI)这种方式简单直观,使用者易于接受,容易上手操作2.命令行方式(Command Line Interface CLI):需要有一个控制台,输入特定的指令&#xff0c…

好用的工具网址

代码类: 1,json解析:JSON在线解析及格式化验证 - JSON.cn 2.传参转化编码 在线url网址编码、解码器-BeJSON.com 日常: 1.莆田医院查询:滚蛋吧!莆田系

[数据结构]无头单向非循环链表的实现与应用

文章目录 一、引言二、线性表的基本概念1、线性表是什么2、链表与顺序表的区别3、无头单向非循环链表 三、无头单向非循环链表的实现1、结构体定义2、初始化3、销毁4、显示5、增删查改 四、分析无头单向非循环链表1、存储方式2、优点3、缺点 五、总结1、练习题2、源代码 一、引…

插入、更新与删除MySQL记录

在现代应用开发中,数据库操作是非常重要的一环。作为程序员,熟练掌握数据库的增删改功能,能够更有效地管理数据并提高开发效率。 本课程将围绕插入、更新与删除记录这三个操作展开,涵盖SQL中的常见语句:INSERT INTO、UPDATE 和 DELETE,并结合实际应用中的常见问题讨论如…

Scikit-learn 识别手写数字

Scikit-learn 识别手写数字的完整教程(包含各模型预测结果和准确率) 本教程将使用 Scikit-learn 提供的手写数字数据集,分别使用支持向量机 (SVM)、随机森林和逻辑回归三种模型进行训练,并展示它们的预测结果和准确率。 1. Scik…

Frontiers出版社系列SCISSCI合集

【SciencePub学术】本期,小编根据WOS数据库,整理了一下Frontiers出版社系列的SCI&SSCI合集,以供各位学者投稿参考! 来源:WOS数据库 Frontiers系列期刊中,Frontiers in Immunology以其5.7分的影响因子位…

第十四届蓝桥杯嵌入式国赛

一. 前言 本篇博客主要讲述十四届蓝桥杯嵌入式的国赛题目,包括STM32CubeMx的相关配置以及相关功能实现代码以及我在做题过程中所遇到的一些问题和总结收获。如果有兴趣的伙伴还可以去做做其它届的真题,可去 蓝桥云课 上搜索历届真题即可。 二. 题目概述 …

每日一练:二叉树的层序遍历

102. 二叉树的层序遍历 - 力扣(LeetCode) 一、题目要求 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,n…

合宙LuatOS应用,与时间相关那些事

合宙嵌入式操作系统LuatOS——在蜂窝物联网模组上推出开源二次开发框架,功能齐全性能稳定,可大幅度降低用户的研发成本和研发周期。 在LuatOS中,获取时间函数用得最多的就是os.time()函数了。接下来,我会讲一些与这个函数以及其他…

c++924

2 #include <iostream> #include <cstring>using namespace std;class MyString { private:char *str; // 记录C风格的字符串int size; // 记录字符串的实际长度public:// 定义无参构造MyString() : size(0) {str new char[1];str[0] \0;cou…

中秋节特别游戏:给玉兔投喂月饼

&#x1f5bc;️ 效果展示 &#x1f4dc; 游戏背景 在中秋这个充满诗意的节日里&#xff0c;玉兔因为贪玩被赶下人间。在这个温柔的夜晚&#xff0c;我们希望通过一个小游戏&#xff0c;让玉兔感受到人间的温暖和关怀。&#x1f430;&#x1f319; &#x1f3ae; 游戏设计 人…

Oracle数据库的比较运算符Comparison Operators

Comparison operators compare one expression to another. The result is always either TRUE, FALSE, or NULL. If the value of one expression is NULL, then the result of the comparison is also NULL. 如果一个表达式的值为NULL&#xff0c;那么比较的结果也是NULL。 …

5、论文阅读:深水下的图像增强

深水下的图像增强 前言介绍贡献UWCNN介绍网络架构残差Residuals块 Blocks网络层密集串联网络深度减少边界伪影网络损失Loss后处理前言 水下场景中,与波长相关的光吸收和散射会降低图像的可见度,导致对比度低和色偏失真。为了解决这个问题,我们提出了一种基于卷积神经网络的…

Rust调用tree-sitter解析C语言

文章目录 一、Rust 调用 tree-sitter 解析 C 语言代码1. 设置 Rust 项目2. 添加 tree-sitter 依赖3. 编写 Rust 代码4. 运行程序5. 编译出错 二、解决步骤1. 添加 tree-sitter 构建依赖2. 添加 tree-sitter-c 源代码3. 修改 build.rs 以编译 tree-sitter-c 库4. 修改 Cargo.tom…

Ubuntu中常用的操作指令

ubuntu中常通过在命令行中输入各种指令完成操作。 文件操作指令 ls&#xff1a;列出目录内容 ls cd&#xff1a;改变当前目录 # 进入指定目录 cd /path/to/directory # 返回上一级目录 cd .. # 返回用户主目录 cd ~ cp&#xff1a;复制文件或目录 # 复制文件 …

伊犁云计算22-1 apache 安装rhel8

1 局域网网络必须通 2 yum 必须搭建成功 3 apache 必须安装 开干 要用su 用户来访问 一看httpd 组件安装完毕 到这里就是测试成功了 如何修改主页的目录 网站目录默认保存在/var/WWW/HTML 我希望改变/home/www 122 127 167 行要改