препроцесс в рамках перекрестной проверки в карете - PullRequest
0 голосов
/ 11 мая 2018

У меня есть вопрос о предварительной обработке данных, который необходимо уточнить. Насколько я понимаю, когда мы настраиваем гиперпараметры и оцениваем производительность модели с помощью перекрестной проверки, а не предварительной обработки всего набора данных, мы должны делать это в рамках перекрестной проверки. Другими словами, при перекрестной проверке мы предварительно обрабатываем тренировочные сгибы, а затем используем тот же параметр предварительной обработки для обработки тестового сгиба и прогнозирования.

В приведенном ниже примере кода, когда я указываю preProcess в caret :: train, он автоматически это делает? Действительно ценю это, если кто-то может прояснить мне это.

Из некоторых онлайн-источников некоторые люди предварительно обрабатывают весь набор данных (trainset), а затем используют данные предварительной обработки для настройки гиперпараметров с помощью перекрестной проверки, кажется, что это неправильно ...

library(caret)
library(mlbench)
data(PimaIndiansDiabetes)

control <- trainControl(method="cv", 
                        number=5,
                        preProcOptions = list(pcaComp=4))
grid=expand.grid(mtry=c(1,2,3))

model <- train(diabetes~., data=PimaIndiansDiabetes, method="rf", 
               preProcess=c("scale", "center", "pca"), 
               trControl=control,
               tuneGrid=grid)

1 Ответ

0 голосов
/ 12 мая 2018

Ваши заботы на правильном месте. Так много способов внести положительный уклон.

По словам Макса Куна, создателя каретки, утечка данных отсутствует, если в train указано

Вся предварительная обработка применяется к измененной версии данных. (например, 90% в 10-кратном CV), а затем эти расчеты применяются к удержания (оставшиеся 10%) без пересчета.

источник: https://github.com/topepo/caret/issues/335

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