K-кратная перекрестная проверка в R (шаг за шагом)


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

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

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

2. Выберите одну из складок в качестве набора удерживающих. Соедините модель с оставшимися k-1 складками. Рассчитайте тестовую MSE по наблюдениям в протянутой кратности.

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

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

Самый простой способ выполнить 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 predictor

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: Средняя абсолютная ошибка. Это средняя абсолютная разница между прогнозами, сделанными моделью, и фактическими наблюдениями. Чем ниже 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 кратностей, потому что это оказывается оптимальным числом кратностей, обеспечивающим надежные коэффициенты ошибок теста.

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.