Я хочу объединить рекурсивное удаление признаков с rfe()
и настройку вместе с выбором модели с помощью trainControl()
с использованием метода rf
(случайный лес). Вместо стандартной сводной статистики я хотел бы иметь MAPE (средняя абсолютная ошибка в процентах). Поэтому я попробовал следующий код, используя набор данных ChickWeight
:
library(caret)
library(randomForest)
library(MLmetrics)
# Compute MAPE instead of other metrics
mape <- function(data, lev = NULL, model = NULL){
mape <- MAPE(y_pred = data$pred, y_true = data$obs)
c(MAPE = mape)
}
# specify trainControl
trc <- trainControl(method="repeatedcv", number=10, repeats=3, search="grid", savePred =T,
summaryFunction = mape)
# set up grid
tunegrid <- expand.grid(.mtry=c(1:3))
# specify rfeControl
rfec <- rfeControl(functions=rfFuncs, method="cv", number=10, saveDetails = TRUE)
set.seed(42)
results <- rfe(weight ~ Time + Chick + Diet,
sizes=c(1:3), # number of predictors from which should algorithm chose the best predictor
data = ChickWeight,
method="rf",
ntree = 250,
metric= "RMSE",
tuneGrid=tunegrid,
rfeControl=rfec,
trControl = trc)
Код работает без ошибок. Но где я могу найти MAPE, который я определил как summaryFunction
в trainControl
? trainControl
выполняется или игнорируется?
Как можно переписать код, чтобы выполнить рекурсивное удаление признаков с помощью rfe
, а затем настроить гиперпараметр mtry
с помощью trainControl
в rfe
и одновременно рассчитать дополнительную меру ошибки (MAPE)?