微信号:weixin888
磐创AI分享
作者 | Sion
编译 | Flin
来源 | analyticsvidhya
介绍
Optuna 是一个最先进的自动超参数调整框架,完全用 Python 编写。在过去的 2 年里,Kaggle社区一直在广泛使用它,具有巨大的竞争力。在本文中,我们将有一个实际操作的方法,并了解它的工作原理。
什么是Optuna?
Optuna 是一个自动超参数调优软件框架,专为机器学习而设计,可以与 PyTorch、TensorFlow、Keras、SKlearn 等其他框架一起使用。
Optuna 使用一种称为运行定义 API 的东西,它帮助用户编写高度模块化的代码并动态构建超参数的搜索空间,我们将在本文后面学习。
使用网格搜索、随机、贝叶斯和进化算法等不同的采样器来自动找到最佳参数。让我们简要讨论一下 Optuna 中可用的不同采样器。
但是是什么让它在 Kaggler 中如此受欢迎呢?
以下是他们在网站上提到的主要功能:
1) 轻量级和多功能:需要一个简单的安装,然后你就可以开始了。可以处理广泛的任务并找到最佳的替代方案。
2) 渴望搜索空间:使用熟悉的 Pythonic 语法(如条件和循环)来自动搜索最佳超参数。
3)最先进的算法:快速搜索大空间,并更快地剪枝没有希望的试验,以获得更好、更快的结果。
4) 轻松并行化:可以轻松地并行化超参数搜索,而对原始代码几乎没有更改。
5)快速可视化:各种可视化功能也可用于可视化分析优化结果。
在开始本教程之前,我们必须了解一些 Optuna 术语和约定。
Optuna 术语
在 Optuna 中,有两个主要术语,即:
1) Study:整个优化过程基于一个目标函数,即研究需要一个可以优化的函数。
2) Trial:优化函数的单次执行称为trial。因此,这项研究(Study)是一系列试验(trial)。
将使用 Optuna 的数据集
在本文中,我们将使用来自ASHRAE – Great Energy Predictor III的数据集,这是一项 Kaggle 竞赛,用于预测建筑物消耗的能源量。数据集的大小为 2.5 Gb,因此非常大。
为了便于使用,数据被分成几个文件。为了训练我们的模型,我们提供了train.csv、weather_train.csv和building_metadata.csv。
除此之外,我们还有一些 trs.csv 文件。以下是文件的简要说明以及显示的列。
加载库
读取数据
数据预处理
我们本次比赛的目标是预测建筑物的能源消耗。我们必须预测的 4 种能量类型是:
标签 | 能量类型 |
---|---|
0 | 电 |
1 | 冷冻水 |
2 | 蒸汽 |
3 | 热水 |
电和水的消耗量可能会有所不同,并且具有不同的预测因素。所以我分别训练和预测了模型。
删除奇怪的数据
如你所见,2016 年 5 月中旬之前的数据看起来很奇怪,因为它位于图表的底部。这样做的原因是直到 5 月 20 日,对于site_id==0 的所有电表读数都是0。一位与会者指出了这一点。因此,合乎逻辑的做法是删除该数据段。
因此我们可以看到所有带有site_id==0的条目都有building_id <=104。现在我们删除它们:
添加时间功能
我们可以使用时间戳特性来获得更好的特征。
(注意:以上代码段中未包含所有列)
填充 NaN 值
天气数据有很多NaN 值,所以我们不能直接去掉条目。我们将尝试通过插入数据来填充这些值。
(注意:以上代码段中未包含所有列)
现在,我们数据集中的 NaN 值数量已显着减少。
添加滞后
现在,加入滞后,我们将对primary_use列进行分类,以减少合并时的内存:
使用 Optuna 进行模型训练
在本节中,我们将学习如何使用 Optuna。但首先,让我们将列分为分类值和数字特征。
定义 “目标”函数
使用 Optuna 完成的每个超参数调整项目都从一个目标函数开始,我们必须在其中决定优化所依据的指标。
一个试验对象是一个目标函数的输入,并返回一个分数。
现在我们将为电表训练 LightGBM 模型,获得最佳验证分数并将该分数作为最终分数返回。让我们开始!
该fit_lgbm函数具有核心训练码,并定义了超参数。
接下来,我们将熟悉“trial” 模块的内部工作原理。
使用“trial”模块动态定义超参数
这是使用 Optuna 代码与传统定义并运行代码之间的比较:
这是Define-by-run 的优势。这使得用户更容易编写直观的代码来获取超参数,而不是预先定义整个搜索空间。
你可以使用这些方法来获取超参数:
现在让我们创建一个简单的 Lightgbm 模型:
现在是优化的时候了!
做“学习”,优化!
在使用“trial”模块定义目标函数并找到超参数后,我们都准备好进行调整了。
只需 2 行代码,所有的超参数调优就可以完成了!
由于 n_trials 的值为 10,因此输出相当大。因此,在下面的屏幕截图中,我将只包括最后一次试验:
就是这样!!你的超参数已调整!!
Trial通过指定超参数的一次试验来管理模型训练、评估和获得分数的所有单次执行。
Study管理并记录所有已执行的试验。该记录帮助我们了解最佳超参数并建议下一个要搜索的参数空间。
剪枝以加快搜索
optuna 中,有一种先进而有用的技术是对那些没有希望的试验进行剪枝。
对于那些不熟悉什么是剪枝的人来说,它是一种在 ML 搜索算法中压缩数据的技术,它通过消除冗余和不重要的数据来对实例进行分类来减小决策树的大小。
因此剪枝可以提高最终分类器的复杂性并防止过度拟合。Optuna 中提供了对多个流行 ML 框架的集成,用户可以使用它在超参数训练期间尝试剪枝。例子:
你可以在此处详细了解这些集成:https://optuna.readthedocs.io/en/stable/reference/integration.html
这是一个使用剪枝创建目标函数的简单示例:
使用 Optuna 进行可视化
Optuna 为我们提供了可视化训练和研究历史的选项,以确定具有最佳性能的超参数。最棒的是,所有这些可视化只需要 1 行代码!
所有不同的颜色都显示了每次试验的损失曲线。
以目标值作为轮廓绘制参数对。
尾注
本文只是熟悉Optuna的开始,涵盖了有关如何调整 ML 模型的超参数的大部分基础知识。我们学习了 Optuna 库中使用的术语,如trial和Study。我们还学习了如何定义使用 Optuna 调整所必需的目标函数。
接下来,我们讨论并研究了一些高级概念,例如剪枝,这也是 Optuna 的最佳功能之一。然后我们学习了如何使用 Optuna 的可视化并使用它们来评估和选择最佳超参数。
参考
数据集 – https://www.kaggle.com/c/ashrae-energy-prediction/overview