HyperGBM学习笔记之元学习器
一、什么是元学习器?
元学习器,又可以称为学习[学习本身],是一种在大量的学习任务中,系统的观察机器学习方法表现的不同的一门学科,然后通过学习这个过程(元数据), 我们就可以更快的去学习掌握到新的任务,简单的说,通过元学习我们可以将以往经验用在新的未知的任务上,从而加速我们在新任务上的执行效率。
这里有一句话,简单的阐述了元学习器诞生的理由<当我们在学习一个新技能的时候,我们鲜有的会从零开始学习,我们用基于以往类似的经验,进而直接尝试在过往任务中表现较好的一些工作,方法,即我们会将重心放在一些更值得尝试的方法上,这样一来,大大的减少了我们试错的机会成本>
参考论文,请点击 Meta-Learning: A Survey
二、如何将元学习器和autoML结合
既然元学习器是将过往的经验用到新任务上,以此来提升算法在新任务上的执行效率(降低试错成本), 在结合到autoML的一个核心任务就是在搜索空间中不断的搜索出最优子样例,或者在HPO领域中搜索出最优的超参数集合。那么这个问题就变成了如何将过去的搜索历史给合理利用起来,让我们在接下来的搜索中,更加高效,当然这里的高效就表现为通过元学习器指导我们的搜索算法往最有可能的方向上进行搜索。
1. 前篇
在HyperGBM如何定义搜索空间一文中,大体介绍了HyperGBM会将搜索空间变成一个向量的形式,比如:
[2,0,3,1,4,5]
实际代表了
[使用mean方式填充缺失值→使用standardscaler进行数据归一化→
选用lightgbm算法→设置n_estimator=100→设置学习率为0.1→
…]
的一个执行操作,且通过这样一系列的操作后,将预处理后的数据和选出的算法模型及对应超参数组合做训练,将模型的预测结果作为本次搜索的一个reward反馈。
2. 中篇
现在的问题就是如何将搜索历史给利用起来,既然搜索空间的一个子空间可以使用一个向量来表示,且每一次搜索都会有一个reward反馈,那么我们就可以把向量的每一个元素作为一个特征,将reward作为label,进而构建出一个供元学习器学习的数据集,当然这里的元学习器可以很简单的联想到就是一个回归任务分类器。
数据集就可以表征为如下形式:
样本no. | 特征1 | 特征2 | 特征3 | 特征4 | 特征5 | 特征6 | 特征… | reward |
---|---|---|---|---|---|---|---|---|
1 | 0 | 1 | 3 | 0 | 2 | 1 | … | 0.95 |
2 | 0 | 1 | 3 | 0 | 2 | 1 | … | 0.91 |
3 | 0 | 1 | 3 | 0 | 2 | 1 | … | 0.88 |
4 | 0 | 1 | 3 | 0 | 2 | 1 | … | 0.99 |
5 | 0 | 1 | 3 | 0 | 2 | 1 | … | 0.63 |
2. 后篇
这样我们就可以很简单的构建一个元学习器,用于优化搜索算法的搜索方向
import lightgbm as lgb
meta_learner = lgb.LGBMRegressor()
meta_learner.fit(X,y)
总结
在我们实际调参的时候,我们大体可以根据数据规模,数据特征类型,特征分布信息等维度进而选择合适的数据预处理方法,建模算法,算法对应的一个合理超参数范围。不过这个需要基于丰富的项目经验和调参经验,那么对于元学习器来说,通过fit不同的搜索子例数据集,也可以大体确定数据预处理方法,算法的学习率大小,树的深度,迭代次数等参数的一个较好组合方向,进而提升搜索算法的性能。