自动化机器学习(自动化机器学习(AutoML)之自动贝叶斯调参)之自动贝叶斯调参
一、Python实现自动贝叶斯调整超参数
【导读】机器学习中,调参是一项繁琐但至关重要的任务,因为它很大程度上影响了算法的性能。手动调参十分耗时,网格和
随机搜索不需要人力,但需要很长的运行时间。因此,诞生了许多自动调整超参数的方法。贝叶斯优化是一种用模型找到函数
最小值方法,已经应用于机器学习问题中的超参数搜索,这种方法性能好,同时比随机搜索省时。此外,现在有许多Python
库可以实现贝叶斯超参数调整。文章由贝叶斯优化方法、优化问题的四个部分、目标函数、域空间、优化过程、及结果展示几
个部分组成。
贝叶斯优化方法
贝叶斯优化通过基于目标函数的过去评估结果建立替代函数(概率模型),来找到最小化目标函数的值。贝叶斯方法与随机或
网格搜索的不同之处在于,它在尝试下一组超参数时,会参考之前的评估结果,因此可以省去很多无用功。
超参数的评估代价很大,因为它要求使用待评估的超参数训练一遍模型,而许多深度学习模型动则几个小时几天才能完成训
练,并评估模型,因此耗费巨大。贝叶斯调参发使用不断更新的概率模型,通过推断过去的结果来“集中”有希望的超参数。
Python中的选择
Python中有几个贝叶斯优化库,它们目标函数的替代函数不一样。在本文中,我们将使用Hyperopt,它使用Tree Parzen
Estimator(TPE)。其他Python库包括Spearmint(高斯过程代理)和SMAC(随机森林回归)。
优化问题的四个部分
贝叶斯优化问题有四个部分:
目标函数:我们想要最小化的内容,在这里,目标函数是机器学习模型使用该组超参数在验证集上的损失。
域空间:要搜索的超参数的取值范围
优化算法:构造替代函数并选择下一个超参数值进行评估的方法。
结果历史记录:来自目标函数评估的存储结果,包括超参数和验证集上的损失。
数据集
在本例中,我们将使用Caravan Insurance数据集,其目标是预测客户是否购买保险单。 这是一个有监督分类问题,训练集和
测试集的大小分别为5800和4000。评估性能的指标是AUC(曲线下面积)评估准则和ROC(receiver operating
characteristic,以真阳率和假阳率为坐标轴的曲线图)曲线,ROC AUC越高表示模型越好。 数据集如下所示:
为Hyperopt最小化目标函数,我们的目标函数返回1-ROC AUC,从而提高ROC AUC。
梯度提升模型
梯度提升机(GBM)是一种基于使用弱学习器(如决策树)组合成强学习器的模型。 GBM中有许多超参数控制整个集合和单
个决策树,如决策树数量,决策树深度等。简单了解了GBM,接下来我们介绍这个问题对应的优化模型的四个部分
目标函数
目标函数是需要我们最小化的。 它的输入为一组超参数,输出需要最小化的值(交叉验证损失)。Hyperopt将目标函数视为
黑盒,只考虑它的输入和输出。 在这里,目标函数定义为:
我们评估的是超参数在验证集上的表现,但我们不将数据集划分成固定的验证集和训练集,而是使用K折交叉验证。使用10倍
交叉验证和提前停止的梯度提升机的完整目标函数如下所示。
关键点是cvresults = lgb.cv(...)。为了实现提前停止的交叉验证,我们使用LightGBM函数cv,它输入为超参数,训练集,用于
交叉验证的折数等。我们将迭代次数(numboostround)设置为10000,但实际上不会达到这个数字,因为我们使用
earlystopping_rounds来停止训练,当连续100轮迭代效果都没有提升时,则提前停止,并选择模型。因此,迭代次数并不是
我们需要设置的超参数。
一旦交叉验证完成,我们就会得到最好的分数(ROC AUC),然后,因为我们最小化目标函数,所以计算1- ROC AUC,然
后返回这个值。
评论0