Как вменять данные с помощью млр3 и прогнозировать с помощью значений NA?

Я следил за документацией mlr3 относительно вменения данных с конвейерами. Однако режим, который я обучил, не позволяет делать прогнозы, если один столбец - NA.

Ты хоть представляешь, почему это не работает?

шаг поезда

library(mlr3)
library(mlr3learners)
library(mlr3pipelines)


data("mtcars", package = "datasets")
data = mtcars[, 1:3]
str(data)
task_mtcars = TaskRegr$new(id="cars", backend = data, target = "mpg")


imp_missind = po("missind")
imp_num     = po("imputehist", param_vals =list(affect_columns = selector_type("numeric")))
scale = po("scale")
learner = lrn('regr.ranger')

graph = po("copy", 2) %>>% 
  gunion(list(imp_num %>>% scale,imp_missind)) %>>%
  po("featureunion") %>>%
  po(learner)
graph$plot()

graphlearner = GraphLearner$new(graph)

предсказать шаг

data = task_mtcars$data()[12:12,]
data[1:1, cyl:=NA]
predict(graphlearner, data)

Ошибка

Error: Missing data in columns: cyl.

1 ответ

Решение

Пример в mlr3gallery, кажется, работает для вашего случая, поэтому вам в основном нужно изменить порядокimputehist а также missind.

Другой подход - установить ошибку which гиперпараметр на "все", чтобы принудительно создавать индикатор для каждого столбца.

На самом деле это ошибка, когда missindвозвращает полную задачу при обучении на данных без пропусков (что, в свою очередь, перезаписывает вмененные значения). Большое спасибо, что заметили это. Пытаюсь исправить здесь PR

Другие вопросы по тегам