mlr: определить собственную оболочку для предварительной обработки для обнаружения выбросов - PullRequest
0 голосов
/ 16 ноября 2018

Я изо всех сил пытаюсь определить новый упаковщик предварительной обработки для обнаружения выбросов на основе приведенного примера в учебнике 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? Более того, я думаю, что, должно быть, я допустил несколько ошибок в своих функциях обучения и прогнозирования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...