Перекрестная проверка k-fold в r (шаг за шагом)


Чтобы оценить эффективность модели на наборе данных, нам необходимо измерить, насколько хорошо прогнозы, сделанные моделью, соответствуют наблюдаемым данным.

Обычно используемый метод для этого известен как k-кратная перекрестная проверка , в которой используется следующий подход:

1. Случайным образом разделите набор данных на k групп или «складок» примерно одинакового размера.

2. Выберите одну из складок в качестве ограничительного набора. Подгоните шаблон под оставшиеся k-1 складок. Рассчитайте тест MSE на основе наблюдений в слое, который был натянут.

3. Повторите этот процесс k раз, каждый раз используя другой набор в качестве набора исключений.

4. Рассчитайте общую MSE теста как среднее значение MSE k теста.

Самый простой способ выполнить k-кратную перекрестную проверку в R — использовать функцию trainControl() из библиотеки курсоров в R.

В этом руководстве представлен краткий пример того, как использовать эту функцию для выполнения k-кратной перекрестной проверки для данной модели в R.

Пример: перекрестная проверка K-фолда в R

Предположим, у нас есть следующий набор данных в R:

 #create data frame
df <- data.frame(y=c(6, 8, 12, 14, 14, 15, 17, 22, 24, 23),
                 x1=c(2, 5, 4, 3, 4, 6, 7, 5, 8, 9),
                 x2=c(14, 12, 12, 13, 7, 8, 7, 4, 6, 5))

#view data frame
df

y x1 x2
6 2 14
8 5 12
12 4 12
14 3 13
14 4 7
15 6 8
17 7 7
22 5 4
24 8 6
23 9 5

Следующий код показывает, как подогнать модель множественной линейной регрессии к этому набору данных в R и выполнить k-кратную перекрестную проверку с k = 5 раз, чтобы оценить производительность модели:

 library (caret)

#specify the cross-validation method
ctrl <- trainControl(method = " cv ", number = 5)

#fit a regression model and use k-fold CV to evaluate performance
model <- train(y ~ x1 + x2, data = df, method = " lm ", trControl = ctrl)

#view summary of k-fold CV               
print(model)

Linear Regression 

10 samples
 2 predictors

No pre-processing
Resampling: Cross-Validated (5 fold) 
Summary of sample sizes: 8, 8, 8, 8, 8 
Resampling results:

  RMSE Rsquared MAE     
  3.018979 1 2.882348

Tuning parameter 'intercept' was held constant at a value of TRUE

Вот как интерпретировать результат:

  • Никакой предварительной обработки не было. То есть мы никак не масштабировали данные перед подгонкой моделей.
  • Метод повторной выборки, который мы использовали для оценки модели, представлял собой 5-кратную перекрестную проверку.
  • Размер выборки для каждого обучающего набора составлял 8 человек.
  • RMSE: среднеквадратическая ошибка. Это измеряет среднюю разницу между предсказаниями модели и фактическими наблюдениями. Чем ниже RMSE, тем точнее модель может предсказать фактические наблюдения.
  • Rsquared: это мера корреляции между предсказаниями модели и фактическими наблюдениями. Чем выше R-квадрат, тем точнее модель может предсказать фактические наблюдения.
  • МАЭ: Средняя абсолютная ошибка. Это средняя абсолютная разница между предсказаниями модели и фактическими наблюдениями. Чем ниже MAE, тем точнее модель может предсказать фактические наблюдения.

Каждое из трех измерений, представленных в результате (RMSE, R-квадрат и MAE), дает нам представление о производительности модели на неопубликованных данных.

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

Мы можем использовать следующий код для проверки окончательного соответствия модели:

 #view final model
model$finalModel

Call:
lm(formula = .outcome ~ ., data = dat)

Coefficients:
(Intercept) x1 x2  
    21.2672 0.7803 -1.1253  

Итоговая модель получается:

у = 21,2672 + 0,7803*(х 1 ) – 1,12538(х 2 )

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

 #view predictions for each fold
model$resample

      RMSE Rsquared MAE Resample
1 4.808773 1 3.544494 Fold1
2 3.464675 1 3.366812 Fold2
3 6.281255 1 6.280702 Fold3
4 3.759222 1 3.573883 Fold4
5 1.741127 1 1.679767 Fold5

Обратите внимание, что в этом примере мы решили использовать k = 5 сгибов, но вы можете выбрать любое количество сгибов. На практике мы обычно выбираем от 5 до 10 слоев, поскольку это оптимальное количество слоев, обеспечивающее надежный уровень ошибок при тестировании.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *