我有几个关于使用 mlr3-pipelines 的问题。事实上,我的目标是创建一个结合三个 3 图的管道:
1 - 处理分类变量的图表:水平插补 => 标准化
imp_cat = po("imputenewlvl", param_vals =list(affect_columns = selector_name(my_cat_variables)))
encode = po("encode", param_vals =list(affect_columns = selector_name(my_cat_variables)))
cat = imp_cat %>>% encode
2 - 处理数值变量子集的图表: 均值插补 => 标准化
imp_mean = po("imputemean", param_vals = list(affect_columns =selector_name(my_first_set_of_numeric_variables)))
scale = po("scale", param_vals = list(affect_columns = selector_name(my_first_set_of_numeric_variables)))
num_mean = imp_mean %>>% scale
处理另一个数字变量子集的第三个图:中值估算 => 最小最大缩放
imp_median = po("imputemedian", param_vals = list(affect_columns =selector_name(my_second_set_of_numeric_variables)))
min_max = po("scalerange", param_vals = list(affect_columns = selector_name(my_second_set_of_numeric_variables)))
num_median = imp_median %>>% min_max
通过featureUnion Ops组合这些图表:
graph = po("copy", 3) %>>%
gunion(list(cat, num_mean, num_median )) %>>%
po("featureunion")
最后在 GraphLearner 中添加学习者:
g1 = GraphLearner$new(graph %>>% po(lrn("classif.ranger")))
我的数据中有一些缺失值,因此在每个图中都使用了插补器,并且我有一个二进制分类任务。
my_task = TaskClassif$new(id="classif", backend = data, target = "my_target")
从理论上讲,当我开始学习时,我不应该出现缺失值错误。
g1$train(my_task)
但根据我选择的学习者,我有几个错误。如果我使用例如游侠作为学习者:我有这个错误
Error: Missing data in columns: ....
如果我使用 svm、glmnet 或 xgvoost:由于存在分类变量,我遇到了问题。
Error : has the following unsupported feature types: factor...
使用我的管道,我不应该有分类变量,也不应该有缺失值。所以我不知道如何克服这个问题。
1 - 我在每个图中都使用了一个插补器,为什么有些算法告诉我总是有缺失值?
2 - 如何删除分类变量,一旦编码?一些算法不支持这种类型的变量
更新
我认为在管道期间所做的所有修改都不会保留。换句话说,算法(svm,ranger,...),使火车在原始任务上,而不是在由管道更新的任务上