mlr3-将预处理应用于新数据

问题描述

在此处使用lmr3verse软件包。假设我对用于训练Learner的训练集进行了以下预处理:

preprocess <- po("scale",param_vals = list(center = TRUE,scale = TRUE)) %>>%
              po("encode",param_vals = list(method = "one-hot"))

我想使用命令pred来预测数据帧(包含原始变量)predict(Learner,newdata = pred,predict_type="prob")中包含的新观测值的标签。由于Learner经过集中,缩放和一键编码的变量训练,因此无法使用。

为了进行预测,如何将训练集上使用的相同预处理应用于新数据(仅功能而不是响应)?

解决方法

我不确定100%,但是您似乎可以将新数据提供给新任务并将其提供给predictThis page shows an example of combining mlr_pipeops and learner objects.

library(dplyr)
library(mlr3verse)
df_iris <- iris
df_iris$Petal.Width = df_iris$Petal.Width %>% cut( breaks = c(0,0.5,1,1.5,2,Inf))

task = TaskClassif$new(id = "my_iris",backend = df_iris,target = "Species")

train_set = sample(task$nrow,0.8 * task$nrow)
test_set = setdiff(seq_len(task$nrow),train_set)

task_train = TaskClassif$new(id = "my_iris",backend = df_iris[train_set,],# use train_set
                       target = "Species")

graph = po("scale",param_vals = list(center = TRUE,scale = TRUE)) %>>%
  po("encode",param_vals = list(method = "one-hot")) %>>%
  mlr_pipeops$get("learner",learner = mlr_learners$get("classif.rpart"))

graph$train(task_train)
graph$pipeops$encode$state$outtasklayout # inspect model input types

graph$pipeops$classif.rpart$predict_type = "prob" 

task_test = TaskClassif$new(id = "my_iris_test",backend = df_iris[test_set,# use test_set
                       target = "Species")
pred = graph$predict(task_test)
pred$classif.rpart.output$prob

# when you don't have a target variable,just make up one
df_test2 <- df_iris[test_set,]
df_test2$Species = sample(df_iris$Species,length(test_set)) # made-up target

task_test2 = TaskClassif$new(id = "my_iris_test",backend = df_test2,# use test_set
                            target = "Species")

pred2= graph$predict(task_test2)
pred2$classif.rpart.output$prob
,

如@missuse所建议,通过使用(1),[1],[2],(2),[3],[4],(3),[5],[6],(4),[7],[8],... 然后使用graph <- preprocess %>>% Learner命令,我可以使用原始graph_learner <- GraphLearner$new(graph)来预测--- predict(TunedLearner,newdata = pred,predict_type="prob")-。 >

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...