【问题标题】:How to impute data with mlr3 and predict with NA values?如何使用 mlr3 估算数据并使用 NA 值进行预测?
【发布时间】:2020-06-16 03:16:23
【问题描述】:

我遵循了 mlr3 的documentation 关于使用管道进行数据插补的内容。但是,如果一列是 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.

【问题讨论】:

    标签: r imputation mlr3


    【解决方案1】:

    mlr3gallery 中的示例似乎适用于您的情况,所以您基本上 必须切换imputehistmissind的顺序。

    另一种方法是将missind 的which 超参数设置为“all”,以强制为每一列创建一个指标。

    这实际上是一个错误,missind 在数据训练后返回完整任务 没有遗漏(这反过来又会覆盖推算值)。 非常感谢您发现它。我正在尝试在这里修复它PR

    【讨论】:

    • 好的,我会试试你的解决方案。但是,我对仅处理几个变量的可能性有疑问。假设我有一个包含 2 个分类变量和 3 个数值变量的数据集。我想分别以并行方式预处理分类变量和数值变量。是否有可能有一个“po”允许我为特定处理选择一些变量?
    • 是的,看看PipeOpImpute 中的affect_columns 超参数并使用适当的Selector。许多PipeOps 都支持这个超参数。以下示例仅选择单个列:po("imputehist", param_vals = list(affect_columns =selector_name("Sepal.Length")))
    • 如何在po('encode') 结束后删除原始因子列?
    • po(select) 允许选择/取消选择列。但是po('encode') 应该自己删除原始因子列。
    猜你喜欢
    • 1970-01-01
    • 2020-02-26
    • 2020-08-20
    • 2019-05-22
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2021-05-20
    相关资源
    最近更新 更多