请选择 进入手机版 | 继续访问电脑版
楼主: 时光人
1762 0

机器学习模型的超参数调整 [推广有奖]

  • 3关注
  • 34粉丝

院士

23%

还不是VIP/贵宾

-

威望
1
论坛币
26907 个
通用积分
428.8060
学术水平
95 点
热心指数
109 点
信用等级
91 点
经验
39960 点
帖子
1629
精华
3
在线时间
579 小时
注册时间
2019-2-25
最后登录
2023-4-26

时光人 学生认证  发表于 2020-9-18 10:51:18 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
创建机器学习模型时,将为您提供有关如何定义模型体系结构的设计选择。通常,我们不立即知道给定模型的最佳模型架构,因此,我们希望能够探索各种可能性。以真正的机器学习方式,理想情况下,我们将要求机器执行此探索并自动选择最佳模型架构。定义模型架构的参数称为超参数,因此,搜索理想模型架构的过程称为超参数调整。

这些超参数可能会解决模型设计问题,例如:

我的线性模型应使用什么程度的多项式特征?
我的决策树允许的最大深度应该是多少?
我的决策树中的叶节点上最少需要多少个样本?
我的随机森林中应包括几棵树?
我的神经网络层应该有多少个神经元?
我的神经网络应该有几层?
对于梯度下降,应该将学习率设置为多少?
我想绝对清楚,超参数不是模型参数,不能直接从数据中训练它们。模型的参数时,我们优化使用类似损失函数在训练期间学习的梯度下降学习的参数值.The过程一般如下所示。
Screen-Shot-2017-11-02-at-1.28.26-PM.png

模型参数指定如何将输入数据转换为所需的输出,而超参数定义模型的实际构造方式。不幸的是,无法计算“应该更新超参数以减少损耗的那一种方法?” (即梯度)以找到最佳模型架构;因此,我们通常会通过实验找出最有效的方法。

通常,此过程包括:

定义模型
定义所有超参数的可能值范围
定义一种对超参数值进行采样的方法
定义评估标准以判断模型
定义交叉验证方法
具体来说,我将在本文中讨论的各种超参数调整方法为步骤3提供了各种方法。

模型验证
在讨论这些各种调整方法之前,我想快速回顾一下将数据分为训练,验证和测试数据的目的。任何机器学习模型的最终目标都是以这样的方式从示例中学习,即该模型能够将学习推广到尚未看到的新实例。在最基本的层次上,您应该训练整个数据集的一个子集,保留其余数据以进行评估,以评估模型的概括能力-换句话说,“我的模型将如何处理尚未处理的数据直接从培训中学习到的?”
Screen-Shot-2017-10-31-at-7.42.50-PM.png


当您开始探索各种模型架构(即不同的超参数值)时,您还需要一种方法来评估每个模型对未见数据进行概括的能力。但是,如果将测试数据用于此评估,最终将使模型体系结构“适合”测试数据-失去了真正评估模型如何处理看不见数据的能力。有时将其称为“数据泄漏”。

为了减轻这种情况,我们最终将整个数据集分为三个子集:训练数据,验证数据和测试数据。验证数据集的引入使我们能够根据与训练不同的数据评估模型,并选择最佳的模型体系结构,同时仍保留数据的子集以在模型开发结束时进行最终评估。

Screen-Shot-2017-10-31-at-7.43.02-PM.png

您还可以利用更高级的技术(例如K折交叉验证),以便实质上组合训练和验证数据以学习模型参数和评估模型,而不会引起数据泄漏。

超参数调整方法
回想一下,我之前提到过,超参数调整方法与我们如何从可能的超参数值空间中采样可能的模型体系结构候选有关。这通常被称为“搜索”超参数空间以获得最佳值。在以下可视化中,X 和 ÿ 维表示两个超参数,并且 ž 维表示由以下各项定义的架构的模型评分(由某些评估指标定义) X 和 ÿ。

注意:忽略轴值,我照着借用了此图像,并且轴值与超参数的逻辑值不对应。
hyperparameter_space.png

如果我们可以访问这样的图,那么选择理想的超参数组合将是微不足道的。但是,以上述可视化的粒度来计算这样的图将非常昂贵。因此,我们不得不盲目地探索超参数空间,希望找到导致最大得分的超参数值。

对于每种方法,我将讨论如何搜索随机森林分类器的最佳结构。随机森林是一个由决策树集合组成的整体模型; 在构建这样的模型时,需要考虑两个重要的超参数:

我应该使用多少个估计量(即决策树)?
每个决策树的最大允许深度应该是多少?
网格搜索
网格搜索可以说是最基本的超参数调整方法。使用这种技术,我们只需为提供的所有超参数值的每种可能组合建立模型,评估每个模型,然后选择产生最佳结果的体系结构。

例如,我们将定义一个值列表以尝试两者n_estimators,max_depth而网格搜索将为每种可能的组合建立一个模型。

在定义的超参数空间上执行网格搜索

  1. n_estimators = [10, 50, 100, 200]
  2. max_depth = [3, 10, 20, 40]
复制代码
将产生以下模型。
  1. RandomForestClassifier(n_estimators=10, max_depth=3)
  2. RandomForestClassifier(n_estimators=10, max_depth=10)
  3. RandomForestClassifier(n_estimators=10, max_depth=20)
  4. RandomForestClassifier(n_estimators=10, max_depth=40)

  5. RandomForestClassifier(n_estimators=50, max_depth=3)
  6. RandomForestClassifier(n_estimators=50, max_depth=10)
  7. RandomForestClassifier(n_estimators=50, max_depth=20)
  8. RandomForestClassifier(n_estimators=50, max_depth=40)

  9. RandomForestClassifier(n_estimators=100, max_depth=3)
  10. RandomForestClassifier(n_estimators=100, max_depth=10)
  11. RandomForestClassifier(n_estimators=100, max_depth=20)
  12. RandomForestClassifier(n_estimators=100, max_depth=40)

  13. RandomForestClassifier(n_estimators=200, max_depth=3)
  14. RandomForestClassifier(n_estimators=200, max_depth=10)
  15. RandomForestClassifier(n_estimators=200, max_depth=20)
  16. RandomForestClassifier(n_estimators=200, max_depth=40)
复制代码
每个模型将适合训练数据并在验证数据上进行评估。如您所见,这是对超参数空间的详尽采样,效率可能非常低。
grid_search.gif

随机搜寻
随机搜索与网格搜索的不同之处在于,我们不再为每个超参数提供一组离散的值来进行探索。相反,我们为每个超参数提供了统计分布,可以从中随机采样值。

我们将为每个超参数定义一个采样分布。
  1. from scipy.stats import expon as sp_expon
  2. from scipy.stats import randint as sp_randint

  3. n_estimators = sp_expon(scale=100)
  4. max_depth = sp_randint(1, 40)
复制代码
我们还可以定义搜索最佳模型时要构建的迭代次数。对于每次迭代,将通过对上面定义的分布进行采样来设置模型的超参数值。scipy上面的发行版可以通过rvs()函数进行采样-请随时在Python中进行探索!

其中一个主要的理论背衬到位网格搜索的激励采用随机搜索的是,在大多数情况下,超参数不是同样重要。

从超参数到验证集性能的函数的高斯过程分析表明,对于大多数数据集而言,只有少数超参数确实很重要,但是不同的超参数对不同的数据集很重要。这种现象使网格搜索成为配置新数据集算法的不佳选择。- Bergstra,2012

在以下示例中,我们在一个超参数空间上进行搜索,在该空间中,一个超参数对优化模型得分的影响更大-每个轴上显示的分布表示模型的得分。在每种情况下,我们都在评估九种不同的模型。网格搜索策略公然错过了最佳模型,并花了很多时间探索不重要的参数。在此网格搜索期间,我们隔离了每个超参数,并在使所有其他超参数保持不变的同时搜索了最佳值。对于正在研究的超参数对所得模型分数影响很小的情况,这会浪费精力。相反,随机搜索的探究能力大大提高,并且可以专注于为重要的超参数找到最佳值。
grid_vs_random.png


如您所见,在并非所有超参数都同样重要的假设下,这种搜索方法最有效。尽管并非总是如此,但该假设对大多数数据集均成立。
random_search.gif

贝叶斯优化
前两种方法进行了单独的实验,以建立具有各种超参数值的模型并记录每种模型的性能。由于每个实验都是独立进行的,因此并行化此过程非常容易。但是,由于每个实验都是独立进行的,因此我们无法使用一个实验的信息来改善下一个实验。贝叶斯优化属于一类基于序列模型的优化(SMBO)算法,该算法允许使用我们先前迭代的结果来改进我们下一实验的采样方法。

我们首先将定义一个使用超参数构造的模型 λ 经过训练后,将其评分 v根据一些评估指标。接下来,我们使用先前评估的超参数值来计算超参数空间的后验期望。然后,我们可以根据该后验期望选择最佳超参数值作为我们的下一个模型候选。我们反复重复此过程,直到收敛到最佳状态。

我们将使用高斯过程对超参数空间中模型得分的先验概率进行建模。该模型将本质上用于使用超参数值λ1 ,。。。一世 和相应的分数 v1 ,。。。一世到目前为止,我们已经观察到在超参数空间上近似连续得分函数。此近似函数还包括我们估计的确定性程度,我们可以使用它来确定候选超参数值,该值将在当前分数上产生最大的预期改进。预期改善机制的公式称为我们的获取函数,它表示我们的得分函数在超参数空间中的后验分布。

Bayesian_optimization.gif


注意:这些可视化由提供贝叶斯优化产品的公司SigOpt提供。可视化的超参数空间不会使贝叶斯优化效果最佳,这并非巧合。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:机器学习 超参数 randomForest Estimators classifier

grid_search.gif
您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-28 17:06