在mlr3中,如何根据指标列和批量训练预测对任务进行子集? 背景
我正在用R中的mlr3包进行建模和预测。我正在使用一个由测试集和训练集组成的大数据集。测试和列车组由指示器列指示(代码:Test_或Test_train) 目标在mlr3中,如何根据指标列和批量训练预测对任务进行子集? 背景,r,machine-learning,batch-processing,mlr3,R,Machine Learning,Batch Processing,Mlr3,我正在用R中的mlr3包进行建模和预测。我正在使用一个由测试集和训练集组成的大数据集。测试和列车组由指示器列指示(代码:Test_或Test_train) 目标 使用数据集中的“训练”或“测试”列指示的训练行对所有学习者进行批量训练 与各自的受训学员一起,批量预测“测试”或“训练”列中“测试”指定的行 代码 带有测试列指示器列的支架数据集。(在实际数据中,列车测试拆分不是人工的) 两个任务(在实际代码中,任务是不同的,而且还有更多) 库(readr) 图书馆(mlr3) 图书馆(MLR3学习者)
库(readr)
图书馆(mlr3)
图书馆(MLR3学习者)
库(MLR3管道)
图书馆(reprex)
图书馆(插入符号)
#资料
urlfile=https://raw.githubusercontent.com/shudras/office_data/master/office_data.csv'
数据=读取csv(url(url文件))[-1]
##创建人工分区以测试和训练集合
art_part=createDataPartition(数据$imdb_评级,列表=FALSE)
列车=数据[艺术部分]
测试=数据[-艺术部分,]
##添加测试列指示器
列车$test\u或列车=‘列车’
测试$test\u或列车='test'
##我想使用/正在使用的数据集
数据=rbind(测试,列车)
#创建两个任务(此处任务相同,但在我的数据集中任务不同。)
任务1=
TaskRegr$新(
id='office1',
后端=数据,
目标='imdb_评级'
)
任务2=
TaskRegr$新(
id='office2',
后端=数据,
目标='imdb_评级'
)
#型号规格
图=
采购订单(‘比例’)%%>%
lrn('regr.cv_glmnet',
id='rp',
α=1,
族='高斯'
)
#学习者创造
学习者=图形学习者$new(图形)
#目标
## 1. 使用数据集中的“训练”或“测试”列指示的训练行对所有学习者进行批量训练
## 2. 与相应的受训学员一起,批量预测“测试”或“训练”列中“测试”指定的行
由(v0.3.0)于2020年6月22日创建
注
我尝试使用带有行ID的基准网格来只训练学习者使用列行,但这不起作用,而且使用列指示符也不可能比使用行索引容易得多。使用列测试序列指示符,可以使用一条规则(用于拆分),而使用行索引仅在任务包含相同行时有效
基准网格(
任务=列表(任务1、任务2),
学习者=学习者,
row_id=train_rows#不是参数,也不利于使用索引
)
您可以将
基准测试
与自定义设计一起使用
下面应该做这项工作(注意,我分别为每个任务
实例化了一个自定义重采样
)
library(data.table)
design = data.table(
task = list(task1, task2),
learner = list(learner)
)
library(mlr3misc)
design$resampling = map(design$task, function(x) {
# get train/test split
split = x$data()[["test_or_train"]]
# remove train-test split column from the task
x$select(setdiff(x$feature_names, "test_or_train"))
# instantiate a custom resampling with the given split
rsmp("custom")$instantiate(x,
train_sets = list(which(split == "train")),
test_sets = list(which(split == "test"))
)
})
benchmark(design)
您能否更清楚地说明批处理的含义,或者这是否回答了您的问题