欢迎光临散文网 会员登陆 & 注册

【R机器学习:mlr3verse技术手册】II 图学习器

2022-11-28 20:07 作者:张敬信老师  | 我要投稿

2 图学习器


mlr3pipelines包提供了强大的机器学习管道技术。

一个管道运算(PipeOp),表示机器学习管道中的一个计算步骤。一系列的PipeOps通过边连接(%>>%)构成图(Graph),图可以是简单的线性图,也可以是复杂的非线性图。

这让我们可以像搭建积木一样,搭建出复杂的图Graph,数据将沿着搭建好的图流动,完成从预处理到机器学习算法构成的整个过程。

搭建图学习器非常简单:

  • po()获取PipeOp

        - 通过连接符%>>%连接GraphsPipeOps

图片
  • 通过gunion()GraphsPipeOps并起来:

ppl("replicate", graph, n)GraphPipeOps复制 n 份并起来:


  • Graph$plot()绘制图的结构关系;

  • as_learner(Graph)将图转化为学习器,即可跟普通学习器一样使用。

管道、图学习器的主要用于:

  • 特征工程:缺失值插补、特征提取、特征选择、处理不均衡数据……

  • 集成学习:装袋法、堆叠法

  • 分支训练、分块训练

2.1 线性图

图6 线性图学习器


  • 搭建图

  • 可视化图


  • 转化为图学习器

  • 训练任务

图7 线性图学习器训练预测过程


  • 调试图

- 取出或设置图学习器超参数:

- 获取单独PipeOp$state(经过$train()后)




- 查看图的中间结果:$.result(需提前设置$keep_results = TRUE



2.2 非线性图

非线性图,可以类似下图这样自由搭建:

图片
图8 非线性图(节点是PipeOp,边是数据流)

搭建非线性图,需要用到多输入多输出的PipeOps

图片
图9 多输入多输出PipeOps

2.2.1 分支

集成学习的装袋法、堆叠法都是非线性图(见下节),另一种非线性图是分支:即只执行若干条备选路径中的一条:

图10 分支



2.2.2 分块训练

在数据太大,无法载入内存的情况下,一个常用的技术是将数据分成几块,然后分别对各块数据进行训练,之后再用PipeOpClassifAvgPipeOpRegrAvg将模型按加权平均汇总。

例如,用PipeOpChunk将数据分成 4 块,然后复制 4 个决策树学习器, 在每个分块的数据上进行训练,再用PipeOpClassifAvg将 4 个不同模型的预测结果汇总成一个结果:


转化为图学习器,与学习器一样使用:

2.3 集成学习

集成学习,是通过构建多个基学习器,并按一定策略结合成强学习器来完成学习任务,即所谓“博采众长”,最终效果是优于任何一个原学习器。集成学习可用于分类/回归集成、特征选择集成、异常值检测集成等。

这多个基学习器可以是同质的,比如都用决策树或都用神经网络,以BaggingBoosting模式为代表;也可以是异质的,即采用不同的算法,以Stacking模式为代表。

2.3.1 装袋法(Bagging)

Bagging采用的是并行机制,即基学习器的训练之间没有前后顺序可以同时进行。

Bagging是用“有放回”抽样(Bootstrap法)的方式抽取训练集,对于包含 mm 个样本的训练集,进行 m 次有放回的随机抽样操作,得到样本子集(有重复)中有接近 36.8% 的样本没有被抽到。

按照同样的方式重复进行,就可以采集到 T 个包含 m 个样本的数据副本,从而训练出 T 个基学习器。

最终对这 T 个基学习器的输出进行结合,分类问题就采用“多数决”,回归问题就采用“取平均”。

图11 Bagging 法管道示意图


以手工搭建一个简易的随机(装袋)森林模型为例:

可视化结构关系:


转化为图学习器,即可与普通学习器一样使用:

2.3.2 提升法(Boosting)

Boosting采用的是串行机制,即基学习器的训练存在依赖关系,按次序一一进行训练(实现上可以做到并行)。

基本思想:基模型的训练集按照某种策略每次都进行一定的转化,对所有基模型预测的结果进行线性合成产生最终的预测结果。

图片
图12 Boosting 法示意图(引自黄海广)

从偏差-方差分解来看,Boosting算法主要关注于降低偏差,每轮的迭代都关注于训练过程中预测错误的样本,将弱学习器提升为强学习器。

Boosting法是一些现成的机器学习算法为代表,如AdaBoost, GBDT, XGboost, LightGBM, catBoost等。

2.3.3 堆叠法(Stacking)

Stacking法,采用的是分阶段机制,将若干基模型的输出作为输入,再接一层主学习器,得到最终的预测。

将训练好的所有基模型对训练集进行预测,第 j 个基模型对第 i 个训练样本的预测值将作为新的训练集中第 i 个样本的第 j 个特征值,最后基于新的训练集进行训练。同理,预测的过程也要先经过所有基模型的预测形成新的测试集,最后再对测试集进行预测。

图片
图13 Stacking 法管道示意图

用于堆叠的基模型通常采用不同的模型,作用在相同的训练集上。

为了充分利用数据,Stacking通常采用 k 折交叉训练法(类似 k 折交叉验证):每个基学习器分别在各个 k-1 折数据上训练,在其剩下的 1 折数据上预测,就可以得到对任意 1 折数据的预测结果,进而用于训练主模型。

例如,训练线性回归和支持向量机模型,并将其预测结果特征与原始特征结合起来,再在其上训练一个主模型随机森林。

为了防止过拟合,不是用基学习器对原数据整体上的进行预测,而是用交叉法对折外数据进行预测:PipeOpLearnerCV对训练数据进行嵌套交叉训练,对每折拟合一个模型。然后,每个模型都用来预测其折外的数据。因此,获得了对输入数据中所有数据点的预测。

首先创建一个“0级”学习器,用来提取较低级别的预测特征。任务通过"nop" 管道,相当于原始特征不做改变直接发送到下一级,与线性回归、支持向量机学习器的预测结果特征通过featureunion管道相结合,之后再接上主学习器随机森林。

可视化结构关系:

转化为图学习器,即可与普通学习器一样使用:

一个更复杂的图学习器嵌套重抽样超参数调参的实例见 5.4。

参考文献

  1. Marc Becker et al. mlr3book. 2022.

  2. Marc Becker et al. mlr3 Gallery. 2021.

  3. Bernd Bischl et al. Machine Learning Pipelines in R. 2021.

  4. Martin Binder et al. mlr3pipelines: Preprocessing Operators and Pipelines for mlr3. 2022.


我正在写一本《R机器学习:基于mlr3verse》的书,其中的mlr3verse技术篇草稿,欢迎您的阅读品鉴和转发扩散(但禁止用于任何出版)!

想提前学习本书内容,也可以关注我的 2023年寒假“R机器学习(基于mlr3verse)”培训班,邀请函链接:提取码:xxul

https://pan.baidu.com/s/1_SaYPebqhnXoxDT8W9tjJA?pwd=xxul

另外,我在第15届中国R会上做的报告,相当于是 mlr3verse技术手册 的整体略讲:

张敬信 第15届R会报告-R机器学习:mlr3verse核心工作流https://www.zhihu.com/zvideo/1579758441576534016
讲座 PPT 以及 R机器学习:mlr3verse技术手册,可到我的 Gitee/Github下载:

https://gitee.com/zhjx19/rconf15

https://github.com/zhjx19/RConf15


【R机器学习:mlr3verse技术手册】II 图学习器的评论 (共 条)

分享到微博请遵守国家法律