У меня есть несколько вопросов относительно использования mlr3-конвейеров. В самом деле, моя цель - создать конвейер, объединяющий три 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 - График для обработки подмножества числительных c переменных: среднее вменение => стандартизация
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
Третий график для обработки другого подмножества числительных c переменных: медианное вменение => минимальное максимальное масштабирование
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, gl mnet или xgvoost: у меня есть проблема из-за существования категорических переменные. Error : has the following unsupported feature types: factor...
С моим конвейером у меня не должно быть категориальной переменной и у меня не должно быть пропущенных значений. поэтому я не вижу, как решить эту проблему.
1 - Я использовал импутер в каждом графе, почему некоторые алгоритмы говорят мне, что всегда есть пропущенные значения?
2 - Как удалить категориальные переменные после их кодирования? некоторые алгоритмы не поддерживают переменные этого типа
Обновлено
Я думаю, что все изменения, сделанные во время конвейера, не сохраняются. Другими словами, алгоритмы (svm, ranger, ...) делают поезд на исходном задании, а не на обновленном конвейером