Я изо всех сил пытаюсь определить новый упаковщик предварительной обработки для обнаружения выбросов на основе приведенного примера в учебнике mlr:
[https://mlr.mlr -org.com / статьи / учебник / preproc.html # предобработки-с-makepreprocwrappercaret] [1]
Что я конкретно пытаюсь сделать, так это интегрировать обнаружение выброса на основе медианного абсолютного отклонения (MAD) в качестве надежной меры выброса. Я написал функцию DoubleMADsFromMedian (), которую я использую в цикле for, чтобы идентифицировать выбросы в каждом столбце функции и установить идентифицированные ячейки выброса в «NA».
Я начал со следующих функций поезда и прогнозирования:
trainfun = function(data, target, args = crit) {
for (element in data){
vec_temp <- as.numeric(data$element)
outlier <- DoubleMADsFromMedian(vec_temp)>crit
outlier <- as.data.frame(outlier)
df <- cbind(vec_temp,outlier)
df <- df %>% mutate(vec_temp = replace(vec_temp, outlier==TRUE, NA)) %>% data.frame()%>% select(.data$vec_temp )
}
# Store the outlier parameter in control
# These are needed to preprocess the data before prediction
control = args
if (is.logical(control$crit) && control$crit)
control$crit = attr(x, "outlier:crit")
data = as.data.frame(df)
return(list(data = data, control = control))
}
predictfun = function(data, target, args, control) {
data = crit(data, outlier = control$crit)
data = as.data.frame(data)
return(data)
}
После этого я определил обёртку предварительной обработки следующим образом:
lrn = makePreprocWrapper(lrn, train = trainfun, predict = predictfun, par.set=makeParamSet(makeIntegerParam("crit")), par.vals =list("crit"=4))
Однако я получаю следующую ошибку:
Error in .learner$train(data = getTaskData(.task, .subset, functionals.as = "matrix"), :
object 'crit' not found
Поскольку я не хочу настраивать основанный на MAD критерий выброса, мне интересно, как определить аргументы "args" и "control" для функции train- /вести-предиката в пакете mlr?
Более того, я думаю, что, должно быть, я допустил несколько ошибок в своих функциях обучения и прогнозирования?