【超参数研究02】使用随机搜索优化超参数

 一、说明

        在神经网络训练中,超参数也是需要优化的,然而在超参数较多(大于3个)后,如果用穷举的,或是通过经验约摸实现就显得费时费力,无论如何,这是需要研究、规范、整合的要点,本文对超参的随机性搜索展开研究。

二、超参数研究

       我在之前的超参数调优文章中提到了网格搜索。让我们从上次中断的地方继续。

        虽然网格搜索是用于超参数优化的强大工具,但它的计算成本可能很高,并且用于高维超参数空间不切实际。因为它使用参数网格的所有组合子集。

        随机搜索解决了这个问题。在随机搜索CV中,用户为模型的每个超参数定义值的分布。然后,该算法从这些分布中随机采样超参数,以创建一组超参数组合。例如,如果有三个范围为 [0.1、1.0]、[10, 100] 和 [1, 10] 的超参数,则算法可能会分别随机采样 0.4、75 和 5 的值,以创建超参数组合。

        当超参数的数量很大时,随机搜索比网格搜索更有效,因为它不需要评估超参数值的所有可能组合。通过随机采样超参数组合,随机搜索可以覆盖超参数空间的更广泛区域,有可能在比网格搜索更少的迭代中找到更好的超参数值。

        在下一节中,我将使用网格搜索示例中使用的相同笔记本电脑价格数据集。我不会再次讨论预处理代码,但您可以参考上一篇文章以获取更多信息。一旦数据集经过了一些预处理,我们最终得到了两个数组,X 和 y,我们将使用它来构建我们的模型。

from sklearn.model_selection import RandomizedSearchCV

三、随机搜索原理应用 

        现在,让我们仔细看看课堂。它接受的参数如下:RandomizedSearchCV

  • estimator是将用于训练的模型(或管道对象)。
  • param_distributions是一个字典或字典列表,用于指定要从中采样超参数的分布。列表中的每个字典对应于一个超参数,其中键是超参数的名称,值是要从中采样的分布。rvs分布必须提供一种采样方法(例如来自scipy.stats.distributions的采样方法)。
  • n_iter是随机组合的数量。
  • cv指定交叉验证拆分策略。它可以是用于指定折叠数的整数值,也可以是交叉验证生成器,可用于定义更高级的交叉验证策略。
  • scoring是用于评估模型性能的指标。它可以采用许多不同的形式,包括字符串、可调用函数和多个指标的字典。分类指标:准确性、精度、召回率、f1。回归指标:neg_mean_squared_error,r2。聚类指标:adjusted_rand_score、silhoutte_score。这些是最受欢迎的,请访问此处查看整个列表。
  • refit指定是否使用搜索期间找到的最佳超参数重新调整整个数据集上的最佳估计器。默认情况下,设置为 ,这意味着在随机搜索完成后,对象将使用找到的最佳超参数自动重新调整整个数据集上的最佳估计器。refitTrueRandomizedSearchCV
  • verbose控制搜索期间输出的详细程度。
  • pre_dispatch用于控制网格搜索期间并行启动的作业数。它采用一个整数值,该值指定在任何给定时间可以启动的最大作业数。例如,如果 ,则在任何给定时间并行启动的作业都不会超过 2 个。pre_dispatch=2
  • random_state是种子。
  • error_score用于指定在超参数组合无法完成拟合过程时应为其分配的分数。在网格搜索过程中,该算法会针对每个超参数组合训练和评估模型。但是,有时由于内存不足或数值不稳定等原因,模型可能无法拟合或评分。在这种情况下,算法需要为失败的超参数组合分配分数,以便它可以继续搜索。RandomizedSearchCVRandomizedSearchCV
  • return_train_score指定是否在输出中包含训练分数。
import xgboost as xgb
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform, randintparam_distributions = {'learning_rate': uniform(0.01, 0.5),'n_estimators': randint(100, 1000),'max_depth': randint(1, 10),'colsample_bytree': uniform(0.1, 0.9),'gamma': uniform(0, 1),'reg_alpha': uniform(0, 1),'reg_lambda': uniform(0, 1)
}model = xgb.XGBRegressor(random_state=1)# run the search
random_search = RandomizedSearchCV(estimator=model,param_distributions=param_distributions,n_iter=100,cv=5,random_state=42,verbose=1,scoring="neg_root_mean_squared_error"
)
random_search.fit(X_train, y_train)"""
Fitting 5 folds for each of 100 candidates, totalling 500 fits
"""

        在此示例中,我们使用库和从库中定义一组超参数分布。uniformrandintscipy.stats

        该对象正在执行 5 倍交叉验证(即,将数据集分成 5 个相等的部分,并依次对这些部分中的每一个进行训练和评估)。对于 100 个随机生成的超参数组合中的每一个,模型将被训练和评估 5 次(数据的每一折一次)。因此,总共将有 500 个模型拟合(即,100 个超参数组合 x 每个组合 5 个折叠 = 500 个拟合)。RandomizedSearchCV

该对象与我在上一篇文章中解释的对象共享相同的属性。因此,我不会在这里再次讨论它们。您可以参考我之前的帖子以获取有关这些属性的更多信息。RandomizedSearchCVGridSearchCV

print("Best estimator: ", random_search.best_estimator_)"""
Best estimator:  XGBRegressor(base_score=0.5, booster='gbtree', callbacks=None,colsample_bylevel=1, colsample_bynode=1,colsample_bytree=0.36664615513367416, early_stopping_rounds=None,enable_categorical=False, eval_metric=None,gamma=0.1652669390630025, gpu_id=-1, grow_policy='depthwise',importance_type=None, interaction_constraints='',learning_rate=0.017818203370596968, max_bin=256,max_cat_to_onehot=4, max_delta_step=0, max_depth=9, max_leaves=0,min_child_weight=1, missing=nan, monotone_constraints='()',n_estimators=443, n_jobs=0, num_parallel_tree=1, predictor='auto',random_state=1, reg_alpha=0.3948815181755697,reg_lambda=0.2934881747180381, ...)
"""
print("Best score: ", random_search.best_score_)
print("Best hyperparameters: ", random_search.best_params_)"""
Best score:  -21681.389784324936
Best hyperparameters:  {'colsample_bytree': 0.36664615513367416, 'gamma': 0.1652669390630025, 'learning_rate': 0.017818203370596968, 'max_depth': 9, 'n_estimators': 443, 'reg_alpha': 0.3948815181755697, 'reg_lambda': 0.2934881747180381}
"""
results_df = pd.DataFrame(random_search.cv_results_)
results_df.head()

        第一排result_df。图片由作者提供。

print("Best index: ", random_search.best_index_)
print("Best scorer: ", random_search.scorer_)
print("Best n splits: ", random_search.n_splits_)
print("Best refit time: ", random_search.refit_time_)
print("Best multi metric: ", random_search.multimetric_)
print("Best n features: ", random_search.n_features_in_)"""
Best index:  10
Best scorer:  make_scorer(mean_squared_error, greater_is_better=False, squared=False)
Best n splits:  5
Best refit time:  0.45199108123779297
Best multi metric:  False
Best n features:  51
"""
best_model = random_search.best_estimator_
best_model.fit(X_train, y_train)
y_pred = best_model.predict(X_test)
rmse_train = np.sqrt(mean_squared_error(y_train, best_model.predict(X_train)))
rmse_test = np.sqrt(mean_squared_error(y_test, y_pred))
print(f"Train RMSE: {rmse_train}, Test RMSE: {rmse_test}")"""
Train RMSE: 3604.8162519843863, Test RMSE: 17321.86440339491
"""

        我们得到的结果或多或少与.GridSearchCV

  • 当超参数的搜索空间较大,且不同超参数的值之间没有明显的相关性时,随机搜索效果最好。另一方面,网格搜索在搜索空间较小且具有清晰结构或网格状结构时效果最佳。
  • 当要搜索的超参数数量很大时,随机搜索可能比网格搜索更快,因为它只需要评估超参数的随机子集,而网格搜索评估超参数的每个组合。但是,如果搜索空间较小或要搜索的超参数数量相对较少,则网格搜索可能会更快。
  • 如果您对哪些超参数对您的模型更重要有先验知识或直觉,则网格搜索可以更有效,因为它会评估超参数的每个组合。在这种情况下,随机搜索可能不那么有效,因为它只是随机采样超参数的子集。
  • 如果计算资源有限,随机搜索可能是更好的选择,因为与网格搜索相比,它需要的资源更少。

四、

本系列教程研究。包含:【超参数研究01】使用网格搜索优化超参数-CSDN博客

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

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

相关文章

Banana Pi BPI-M4 Berry 采用全志H618芯片,板载2G RAM和8G eMMC

BPI-M4 Berry 开发板作为一款强大的单板计算机(SBC),充分挖掘了全志 H618 系统级芯片(SoC)的功能,为开发人员提供了令人印象深刻的性能和丰富的特性。与树莓派 4b 类似,BPI-M4 Berry 能够展现与…

网站页脚展示备案号并在新标签页中打开超链接

备案时,我们就注意到,备案成功后需要在网站首页底部展示“备案号”,并将备案号链接至https://beian.miit.gov.cn。 这里我使用了WrodPress中的主题,主题自定义中有提供对页脚文本的编辑,支持用css标签定义样式。若是自…

MySQL MVCC机制探秘:数据一致性与并发处理的完美结合,助你成为数据库高手

一、前言 在分析 MVCC 的原理之前,我们先回顾一下 MySQL 的一些内容以及关于 MVCC 的一些简单介绍。(注:下面没有特别说明默认 MySQL 的引擎为 InnoDB ) 1.1 数据库的并发场景 数据库并发场景有三种,分别是: 读-读…

基于springboot实现广场舞团平台系统项目【项目源码+论文说明】计算机毕业设计

基于SPRINGBOOT实现广场舞团平台系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生&am…

算法通关村第十一关青铜挑战——移位运算详解

大家好,我是怒码少年小码。 计算机到底是怎么处理数字的? 数字在计算机中的表示 机器数 一个数在计算机中的二进制表示形式,叫做这个数的机器数。 机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0&am…

Unity之ShaderGraph如何实现全息投影效果

前言 今天我们来实现一个全息投影的效果,如下所示: 主要节点 Position:提供对网格顶点或片段的Position 的访问,具体取决于节点所属图形部分的有效着色器阶段。使用Space下拉参数选择输出值的坐标空间。 Time:提…

C++入门(3):引用,内联函数

一、引用 1.1 引用特性 引用必须初始化 一个变量可以有多个引用 引用一旦引用一个实体,就不能引用其他实体 int main() {int a 10, C 20;int& b a;b c; // 赋值?还是b变成c的别名?return 0; }1.2 常引用 引用权限可以平移或缩小…

ubuntu双系统安装以及启动时卡死解决办法

目录 一.简介 二.安装 如何安装Ubuntu20.04(详细图文教程-CSDN博客 Ubuntu22.04(非虚拟机)安装教程(2023最新最详细)-CSDN博客 三.ubuntu双系统启动时卡死解决办法(在ubuntu16.04和18.04测试无误) 问题…

vue实现响应式改变scss样式

需求:侧边导航栏点击收起,再次点击展开,但是我这个项目的位置是在左侧菜单栏所以需要自定义 效果图: 实现步骤: 1:定义一个变量(因为我这里会存储菜单栏的状态所以需要存储状态,一…

09、Python 字典入门 及 高级用法

目录 字典创建字典通过key访问value添加key-value对删除key-value对替换key-value对 判断是否包含指定keydict与列表字典的常用方法演示: 用字典格式化字符串 创建字典 操作字典key-value对 理解dict与list的关系 字典常用方法 使用字典格式化字符串 字典 字典用于…

2023/10/23 mysql学习

数据库修改 show databases; 展示所有数据库 create database 数据库名; 创建数据库 create database if not exists 数据库名; 如果未创建过当前数据库名则创建 drop database 数据库名; drop database if exists 数据库名;用法和创建类似 删除数据库 use 数据库名; 跳…

分享一下商城小程序怎么设置分销功能

随着互联网的快速发展,传统的营销方式已经无法满足企业的需求。在这个时代,拥有一个高效的分销系统已经成为了企业成功的关键之一。而商城小程序作为近年来火爆的电商新模式,其中的分销功能更是备受关注。本文将以分销功能为主要主题&#xf…

Rockchip RK3399 - DRM crtc基础知识

一、LCD硬件原理 1.1 CRT介绍 CRT是阴极射线管(Cathode Ray Tube)的缩写,它是一种使用电子束在荧光屏上创建图像的显示设备。CRT显示器在过去很长一段时间内是主流的显示技术,现已被液晶显示屏或其他新兴技术所替代。 在CRT显示器中,扫描电子…

分享一下微信小程序的文章中怎么添加营销活动

在数字化时代,小程序已经成为企业营销的重要工具。通过小程序,企业可以提供更加便捷、高效的服务,吸引更多的用户和客户。本文将以小程序营销活动为主题,介绍如何在小程序文章中加入营销活动,提高品牌知名度和销售额。…

C/C++数据结构——队列

个人主页:仍有未知等待探索_C语言疑难,数据结构,小项目-CSDN博客 专题分栏:数据结构_仍有未知等待探索的博客-CSDN博客 目录 一、前言 二、队列的基本操作(循环队) 1、循环队的数据类型 2、循环队的名词解释 3、循环队的创建及…

Windows与Linux服务器互传文件

使用winscp实现图形化拖动的方式互传文件. 1.下载winscp软件并安装,官方地址: https://winscp.net/eng/index.php 2.打开软件: 文件协议选择scp,输入linux服务器的IP和端口号,然后输入你的用户名和密码就可以登陆了。…

基于Java的校园餐厅订餐管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

Linux 进程切换与命令行参数

假设进程1现在要切走了,切入进程2.那进程1就要先保存数据,方便以后恢复, 然后进程2再切走,进程1再把数据还原: 操作系统又分为实时操作系统和分时操作系统。 实时操作系统是是给操作系统一个进程,操作系统…

【漏洞复现】panalog日志审计系统任意用户创建漏洞和后台命令执行

漏洞描述 panalog为北京派网软件有限公司,一款流量分析,日志分析管理的一款软件。存在任意用户创建漏洞和后台命令执行漏洞,可先通过任意用户创建,然后进行后台命令执行,获取服务器权限。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公…

Vue单文件组件

一、.vue文件 我们使用Vue的单文件组件的时候&#xff0c;一个.vue文件就是一个组件。 例如我们创建一个School组件&#xff1a; 二、组件的结构 我们编写网页代码的时候有HTML结构、CSS样式、JS交互。 组件里也是同样存在这三种结构的&#xff1a; <template><d…