使用Optuna进行超参数调整
模型超参数是模型外部的配置,无法从数据中估计其值。我们无法知道给定问题上模型超参数的最佳值。我们可能会使用经验法则,复制用于其他问题的值或通过反复试验来寻找最佳值。我们调整模型的超参数以发现能够进行最熟练的预测的模型参数。超参数是:
支持向量机中使用的'C'和'??'超参数
用于规范化的'??'超参数
但是为什么我们担心超参数呢?这是因为这些参数直接控制训练算法的行为。这些对模型性能有重大影响。选择超参数可以使您的算法大放异彩!
超参数优化器
现在,让我们看看超参数优化器在学习算法的整个过程中的地位。
超参数调优
从上图[1]可以看出,超参数调谐器在模型外部,并且在模型训练之前进行了调整。调整过程的结果是超参数的最佳值,然后将其输入模型训练阶段。现在让我介绍Optuna,它是Python中的优化库,可用于超参数优化。
奥图纳
Optuna是用于自动化这些超参数优化过程的软件框架。它通过使用不同的采样器(例如网格搜索,随机,贝叶斯和演化算法)自动查找最佳超参数值。让我首先简要介绍一下optuna中可用的不同采样器。
网格搜索:离散每个超参数的搜索空间。优化器针对每种超参数配置启动学习,并在最后选择最佳方法。
随机:对搜索空间进行随机采样,直到满足停止条件为止。
贝叶斯:基于概率模型的方法来寻找最佳超参数
进化算法:?元启发式方法,利用适应度函数的值来找到最佳超参数。
为什么选择奥图纳?optuna的以下功能鼓励我将其用于超参数调整,以解决我要解决的问题!
渴望的动态搜索空间
高效的采样和修剪算法
易于整合
良好的可视化
分布式优化
现在让我们讨论一个例子。
使用Optuna的随机森林超参数优化
Nw,让我们看看如何使用optuna进行优化。我正在使用虹膜数据集进行演示。首先,我们必须确定优化超参数所基于的指标。因此,该度量是优化目标。在这里,我将度量作为k = 3的交叉验证得分。因此,让我们首先创建目标函数。
导入optuna
导入sklearn
来自sklearn导入数据集
def目标(试用版):
虹膜= sklearn.datasets.load_iris()
n_estimators = trial.suggest_int('n_estimators',2,20)
max_depth = int(trial.suggest_loguniform('max_depth',1,32))
clf = sklearn.ensemble.RandomForestClassifier(n_estimators = n_estimators,max_depth = max_depth)
返回sklearn.model_selection.cross_val_score(clf,iris.data,iris.target,
n_jobs = -1,cv = 3).mean()
因此,在这种情况下,我使用随机森林进行分类。我只想优化两个-n_estimators和max_depth。因此,我为这些超参数定义了搜索空间。如图所示,n_estimators是2到20的整数,并且max_depth是从1到32的对数均匀取。这些是我指定的值。
您可以根据参数性质更改这些值以及类型。因此,此函数将一个试验对象作为其参数。试用只是优化实验的一次迭代。因此,这里我的目标是最大化交叉验证得分,并确定n_estimators和max_depth的值将最大化我的cross_val_score!
使用研究对象评估目标函数值。
研究= optuna.create_study(direction ='maximize')
study.optimize(目标,n_trials = 100)
根据目标的性质,这里的方向可以是“最大化”或“最小化”。我想最大化cross_val_score,因此我给出了“最大化”。另外,我给出的试验次数为100。我没有在此处指定要使用的采样器,默认情况下它是贝叶斯优化器。一旦我们调用了优化方法,就可以看到优化过程开始了。
超参数调优
一旦完成所有试验,就可以从研究对象中找到最佳试验以及超参数的最佳值。
试用= study.best_trial
print('Accuracy:{}'。format(trial.value))
print(“最佳超参数:{}”。format(trial.params))
因此,可以看出,最佳精度为0.98,n_estimators和max_depth的最佳超参数值分别为4和2.718。
现在,让我们探索optuna中可用的不同可视化图。从超参数优化的角度来看,主要有4种类型的图相关-历史图,切片图,轮廓图和平行坐标图。情节是不言自明的。
optuna.visualization.plot_optimization_history(研究)
超参数调优
optuna.visualization.plot_slice(研究)
超参数调优
终点
Optuna是一个非常庞大的优化库,其应用程序不仅限于超参数调整。通过这个博客,我只是尝试描绘一个使用Optuna进行超参数优化的简单示例。请亲自探索optuna,然后您将了解在哪些其他应用程序中可以找到超参数调整以及使用的optuna。
题库