Пакет R Caret: разделение данных на обучающие / тестовые наборы перед trainControl? - PullRequest
0 голосов
/ 26 июня 2018

Я вижу много кодов R, в которых полный набор данных сначала разбивается на обучающий набор и тестовый набор:

library(caret)
library(klaR)

# load the iris dataset
data(iris)

# define a 80%/20% train/test split of the dataset
trainIndex <- createDataPartition(iris$Species, p=0.8, list=FALSE)
data_train <- iris[trainIndex,]
data_test <- iris[-trainIndex,]

Во второй раз определяется метод разбиения, такой как повторная перекрестная проверка в k-кратном размере:

train_control <- trainControl(method="repeatedcv", number=10, repeats=3)

Затем модель обучается с использованием учебного набора:

my_model <- train(Species~., data=data_train, trControl=train_control, method="nb")

Наконец, на тестовом наборе выполняются прогнозы:

pred_results <- predict(my_model, newdata=data_test)

При использовании, в частности, (повторного) метода перекрестной проверки в k-кратном порядке, мне кажется, что обучающий (n = k-1 сгиб) и тестовый (n = 1-кратный) наборы уже изначально определены.

В таком случае, зачем добавлять дополнительный слой раздела, разбивая сначала полный набор данных на 80% обучающих и 20% тестовых наборов? Это необходимо?

1 Ответ

0 голосов
/ 26 июня 2018

В главе 2.2 из раздела Введение в статистическое обучение, доступно здесь

В общем, нам все равно, насколько хорошо работает метод обучения на тренировочных данных. Скорее нас интересует точность предсказания, которые мы получаем, когда мы применяем наш метод к ранее невидимые данные испытаний

Прочтите всю главу, включая компромисс смещения / дисперсии.

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

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