Насколько я знаю, это невозможно с помощью карета. Это может быть возможно при использовании recipes . Однако я не использую рецепты, но я использую mlr3 , поэтому я покажу, как это сделать с этим пакетом:
library(mlr3)
library(mlr3pipelines)
library(mlr3learners)
library(paradox)
library(mlr3tuning)
library(mlbench)
создать задачу из данных:
data("PimaIndiansDiabetes")
pima_tsk <- TaskClassif$new(id = "Pima",
backend = PimaIndiansDiabetes,
target = "diabetes")
определить предварительный селектор процесса с именем «slct1»:
pos1 <- po("select", id = "slct1")
и определить функцию селектора внутри него:
pos1$param_set$values$selector <- selector_name(colnames(PimaIndiansDiabetes[, 4:6]))
теперь определить, что должно происходить с выбранными функциями: масштабирование -> pca с выбранным 1-м P C (param_vals = list(rank. = 1)
)
pos1 %>>%
po("scale", id = "scale1") %>>%
po("pca", id = "pca1", param_vals = list(rank. = 1)) -> pr1
Теперь определите инвертирующий селектор:
pos2 <- po("select", id = "slct2")
pos2$param_set$values$selector <- selector_invert(pos1$param_set$values$selector)
Определите ученика:
rf_lrn <- po("learner", lrn("classif.ranger")) #ranger is a faster version of rf
объедините их:
gunion(list(pr1, pos2)) %>>%
po("featureunion") %>>%
rf_lrn -> graph
проверьте, выглядит ли это нормально:
graph$plot(html = TRUE)
конвертируйте график в ученика :
glrn <- GraphLearner$new(graph)
определить параметры, которые вы хотите настроить:
ps <- ParamSet$new(list(
ParamInt$new("classif.ranger.mtry", lower = 1, upper = 6),
ParamInt$new("classif.ranger.num.trees", lower = 100, upper = 1000)))
определить повторную выборку:
cv10 <- rsmp("cv", folds = 10)
определить настройку:
instance <- TuningInstance$new(
task = pima_tsk,
learner = glrn,
resampling = cv10,
measures = msr("classif.ce"),
param_set = ps,
terminator = term("evals", n_evals = 20)
)
set.seed(1)
tuner <- TunerRandomSearch$new()
tuner$tune(instance)
instance$result
Для дополнительные сведения о том, как настроить количество компонентов P C, чтобы продолжить, проверьте этот ответ: R каретка: Как применить отдельный pca к различным кадрам данных перед тренировкой?
Если вы И вот этот интересный тест: mlr3book
Также
cor(PimaIndiansDiabetes[, 4:6])
triceps insulin mass
triceps 1.0000000 0.4367826 0.3925732
insulin 0.4367826 1.0000000 0.1978591
mass 0.3925732 0.1978591 1.0000000
не дает того, что вы упоминаете в вопросе.