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

R语言机器学习-基于mlr-1.mlr中的机器学习一般流程

2023-04-27 22:48 作者:宽屏巴洛克  | 我要投稿

在先前,r语言构建机器学习流程基于每个独立的机器学习包,如e1071,rpart等,其语法、训练流程各不相同,学习不同的算法需要重新学习对应的语法和流程。类似于python中的scikit-learn框架,mlr包填补了r语言在机器学习框架的空白。mlr包构建了一个统一的构建机器学习的流程,使其可以快速应用于不同类型的机器学习模型。

mlr中的机器学习一般流程

机器学习的流程一般由构建学习器-构建任务-训练模型-预测数据-评估模型构成。

机器学习的一般流程

下面以构建knn预测模型为例,介绍在mlr包中如何构建机器学习的一般流程

先决条件

本文的数据预处理基于tidyverse

需要注意的是,mlr包默认仅安装mlr包及其基础环境,不会安装其关联的机器学习包,建议在安装包时添加dependencies = TRUE参数安装其关联机器学习包。

载入目标数据集与构建分类任务

mlr支持分类、回归、聚类等多种类型任务

以下以iris数据集为例,构建一个基于叶片数据对鸢尾花进行分类的knn分类器

载入数据集

注意,在构建分类任务前,需要把分类的标签类转化为因子型

构建分类任务

mlr包构建任务的函数通常以make***Task为名,如makeClusterTask,makeRegrTask等,使用data 参数指定需要执行任务的数据集,target参数用于指定需要进行回归|聚类任务的列。

划分训练集与测试集

makeResampleInstance函数用于对任务划分训练集和测试集,desc参数用于指定重抽样方式,mlr支持的重抽样方式有LOO(留一法交叉验证)、CV(k折交叉验证)、RepCV(重复k折交叉验证)、Holdout(留出法)、Bootstrap等。执行函数后,返回R6类对象,使用$符号访问对象,holdout$train.ids为从目标任务中抽取用于构建训练集的行序列号,holdout$test.ids为从目标任务中抽取用于构建测试集的行序列号。

这里以留出法为例,比例设为70%训练集,30%测试集。

subsetTask函数用于从主任务抽取子任务集,task参数用于指定从何处抽取子任务,subset参数用于指定行序号抽取数据集。注意:subset参数仅支持向量类数据。

构建学习器与超参数调参

可以使用listLearners函数列出所有mlr包支持的学习器,结果是一个R6对象,建议将结果赋值给变量用于辅助查询,使用$class查看支持的所有学习器。

构建学习器

makeLearner是mlr包中用于构建学习器的函数,learner参数用于指定需要构建的学习器。par.vals参数用于指定学习器的初始参数集,par.vals参数仅支持列表类型数据输入,建议若需要指定学习器的多个初始参数,将其打包成一个列表数据并传入。

超参数调参

makeParamSet用于指定超参数调参的参数搜索空间,可支持多类型的超参数调参,调参参数指定格式为make*数据类型*Param,如makeDiscreteParam

在超参数调参中,我们需要对调参的搜索方式进行指定,mlr支持网格搜索,随机搜素等,使用makeTuneControl*搜索方式*()函数进行指定,以下是指定为网格搜索方式的一个示例

在指定参数搜索空间,搜索方式后,我们需要调用自动调参器函数对学习器参数进行自动调参,在mlr中,自动调参器的函数为tuneParams(),如下例所示

learner参数用于指定需要进行调参的学习器,task参数用于指定从何任务收集数据评估调参性能,par.set用于指定调参的参数搜索空间,resampling参数用于指定重抽样方式,其传入的参数makeResampleDesc函数用于指定重抽样的参数描述(类似于makeResampleInstance函数),control参数用于指定参数的搜索方式。

自动调参器的结果以R6对象返回,使用$符号访问对象元素,$x为调参结果,将调参结果赋给setHyperPars函数用于更新学习器参数,下面是该函数的使用示例

训练、预测、评估模型与重抽样

在上述的流程结束后,我们可以开始对模型真正的训练,mlr中训练模型的函数为train()

learner参数用于需要训练的学习器,task参数则用于指定从何任务/何数据集训练模型。

结束训练后,使用predict函数对训练结果进行预测和评估

predict中第一个参数用于指定从何训练后的模型进行预测,task参数用于指定该模型从何数据集中预测数据,此外predict函数也支持对新数据的预测,使用 newdata参数用于指定需要应用预测的数据,此处数据不需要转化为任务。

使用performance函数对训练模型进行评估

重抽样

为寻找最佳训练模型,我们可以使用重抽样函数对学习器进行多轮训练与评估

使用resample函数对任务进行重抽样和训练学习器

需要注意的是,如需要保存resample函数中每一轮重抽样的模型,需要指定models参数为TRUE。

调用重抽样获得的模型并使用其进行预测

其后续步骤和普通的训练-预测流程相似,具体实例如下

本文的全部代码

推荐阅读

[1]机器学习实战-使用R、Tidyverse和mlr -- 赫芬·I.里斯

[2]R手册(Machine Learning)--mlr(Part 1)R手册(Machine Learning)--mlr(Part 1)_WilenWu的博客-CSDN博客


R语言机器学习-基于mlr-1.mlr中的机器学习一般流程的评论 (共 条)

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