K-fold перехресна перевірка в 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 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: Середня абсолютна похибка. Це середня абсолютна різниця між прогнозами, зробленими моделлю, і фактичними спостереженнями. Чим нижчий 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  

Остаточна модель виходить такою:

y = 21,2672 + 0,7803*(x 1 ) – 1,12538 (x 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 шарів, оскільки це оптимальна кількість шарів, яка забезпечує надійний рівень помилок тесту.

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *