Як перехресно перевірити продуктивність моделі в r
У статистиці ми часто створюємо моделі з двох причин:
- Зрозуміти взаємозв’язок між однією або декількома змінними предиктора та змінною відповіді.
- Використовуйте модель для прогнозування майбутніх спостережень.
Перехресна перевірка корисна для оцінки того, наскільки добре модель здатна передбачити майбутні спостереження.
Наприклад, ми можемо побудувати модель множинної лінійної регресії , яка використовує вік і дохід як прогностичні змінні, а статус за замовчуванням — як змінну відповіді. У цьому випадку ми можемо захотіти підібрати модель до набору даних, а потім використати цю модель, щоб спрогнозувати, виходячи з доходу та віку нового заявника, ймовірність того, що він не виплатить свою позику.
Щоб визначити, чи має модель сильну передбачувану здатність, нам потрібно використовувати її, щоб робити прогнози на основі даних, які вона ніколи раніше не бачила. Це дозволить нам оцінити похибку передбачення моделі.
Використання перехресної перевірки для оцінки помилки передбачення
Перехресна перевірка стосується різних способів оцінки помилки передбачення. Загальний підхід до перехресної перевірки:
1. Виділіть певну кількість спостережень у наборі даних – зазвичай 15-25% від усіх спостережень.
2. Підібрати (або «навчити») модель на основі спостережень, які ми зберігаємо в наборі даних.
3. Перевірте, наскільки добре модель може робити прогнози щодо спостережень, які ми не використали для навчання моделі.
Вимірювання якості моделі
Коли ми використовуємо підігнану модель для прогнозування нових спостережень, ми можемо використовувати кілька різних показників для вимірювання якості моделі, зокрема:
Множинний R-квадрат: вимірює силу лінійного зв’язку між змінними предиктора та змінною відповіді. R-квадрат, кратний 1, означає ідеальний лінійний зв’язок, тоді як R-квадрат, кратний 0, вказує на відсутність лінійного зв’язку. Чим вищий кратний R-квадрат, тим більша ймовірність, що змінні-прогнози прогнозують змінну відповіді.
Середньоквадратична помилка (RMSE): вимірює середню помилку передбачення, зроблену моделлю під час прогнозування значення нового спостереження. Це середня відстань між справжнім значенням спостереження та значенням, передбаченим моделлю. Більш низькі значення для RMSE вказують на кращу відповідність моделі.
Середня абсолютна похибка (MAE): Це середня абсолютна різниця між справжнім значенням спостереження та значенням, передбаченим моделлю. Цей показник, як правило, менш чутливий до викидів, ніж RMSE. Більш низькі значення для MAE вказують на кращу підгонку моделі.
Реалізація чотирьох різних методів перехресної перевірки в R
Потім ми пояснимо, як реалізувати наступні методи перехресної перевірки в R:
1. Підхід набору перевірки
2. k-кратна перехресна перевірка
3. Залиште перехресну перевірку осторонь
4. Повторна k-кратна перехресна перевірка
Щоб проілюструвати, як використовувати ці різні методи, ми використаємо підмножину вбудованого набору даних R mtcars :
#define dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #view first six rows of new data head(data) # mpg disp hp drat #Mazda RX4 21.0 160 110 3.90 #Mazda RX4 Wag 21.0 160 110 3.90 #Datsun 710 22.8 108 93 3.85 #Hornet 4 Drive 21.4 258 110 3.08 #Hornet Sportabout 18.7 360 175 3.15 #Valiant 18.1 225 105 2.76
Ми побудуємо модель множинної лінійної регресії, використовуючи disp , hp і drat як змінні прогностики та mpg як змінну відповіді.
Підхід набору перевірки
Підхід набору перевірки працює наступним чином:
1. Розділіть дані на два набори: один набір використовується для навчання моделі (тобто оцінки параметрів моделі), а інший набір використовується для тестування моделі. Як правило, навчальний набір генерується шляхом випадкового вибору 70-80% даних, а решта 20-30% даних використовується як тестовий набір.
2. Створіть модель за допомогою навчального набору даних.
3. Використовуйте модель для прогнозування даних тестового набору.
4. Виміряйте якість моделі за допомогою таких показників, як R-квадрат, RMSE та MAE.
приклад:
У наступному прикладі використовується набір даних, який ми визначили вище. Спочатку ми розділяємо дані на
навчальний набір і тестовий набір, використовуючи 80% даних як навчальний набір, а решта 20% даних як тестовий набір. Далі будуємо модель за допомогою навчального набору. Потім ми використовуємо модель для прогнозування тестового набору. Нарешті, ми вимірюємо якість моделі за допомогою R-квадрат, RMSE і MAE.
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #split the dataset into a training set (80%) and test set (20%). training_obs <- data$mpg %>% createDataPartition(p = 0.8, list = FALSE) train <- data[training_obs, ] test <- data[-training_obs, ] # Build the linear regression model on the training set model <- lm(mpg ~ ., data = train) # Use the model to make predictions on the test set predictions <- model %>% predict(test) #Examine R-squared, RMSE, and MAE of predictions data.frame(R_squared = R2(predictions, test$mpg), RMSE = RMSE(predictions, test$mpg), MAE = MAE(predictions, test$mpg)) #R_squared RMSE MAE #1 0.9213066 1.876038 1.66614
Під час порівняння різних моделей перевага віддається моделі, яка дає найнижчий RMSE у тестовому наборі.
Переваги та недоліки цього підходу
Перевага підходу набору перевірки полягає в тому, що він простий і обчислювально ефективний. Недоліком є те, що модель побудована з використанням лише частини загальних даних. Якщо дані, які ми залишаємо поза навчальним набором, містять цікаву або цінну інформацію, модель не враховуватиме її.
k-кратний підхід перехресної перевірки
Підхід k-кратної перехресної перевірки працює таким чином:
1. Випадково розділіть дані на k «згорток» або підмножин (наприклад, 5 або 10 підмножин).
2. Навчіть модель на всіх даних, пропускаючи лише одну підмножину.
3. Використовуйте модель, щоб зробити прогнози щодо даних із підмножини, яка була пропущена.
4. Повторюйте цей процес, доки кожна з k підмножин не буде використана як тестовий набір.
5 . Виміряйте якість моделі шляхом усереднення k помилок тесту. Це відомо
як помилку перехресної перевірки.
приклад
У цьому прикладі ми спочатку ділимо дані на 5 підмножин. Потім ми підбираємо модель, використовуючи всі дані, крім підмножини. Потім ми використовуємо модель, щоб зробити прогнози про підмножину, яка була пропущена, і записати помилку тесту (використовуючи R-квадрат, RMSE і MAE). Ми повторюємо цей процес, доки кожна підмножина не буде використана як тестова множина. Потім ми просто обчислюємо середнє значення 5 помилок тесту.
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #define the number of subsets (or "folds") to use train_control <- trainControl(method = "cv", number = 5) #train the model model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control) #Summarize the results print(model) #Linear Regression # #32 samples #3 predictor # #No pre-processing #Resampling: Cross-Validated (5 fold) #Summary of sample sizes: 26, 25, 26, 25, 26 #Resampling results: # # RMSE Rsquared MAE #3.095501 0.7661981 2.467427 # #Tuning parameter 'intercept' was held constant at a value of TRUE
Переваги та недоліки цього підходу
Перевага підходу k-кратної перехресної перевірки над підходом набору перевірки полягає в тому, що він будує модель кілька разів, використовуючи щоразу різні фрагменти даних, тому ми не повинні пропускати важливі дані під час побудови моделі.
Суб’єктивна частина цього підходу полягає у виборі значення для k, тобто кількості підмножин, на які потрібно розділити дані. Загалом, нижчі значення k призводять до більшого зміщення, але меншої варіативності, тоді як вищі значення k призводять до меншого зміщення, але більшої варіативності.
На практиці k, як правило, вибирається рівним 5 або 10, оскільки ця кількість підмножин прагне одночасно уникнути занадто сильного зміщення та занадто великої мінливості.
Підхід до перехресної перевірки (LOOCV) із залишенням одного
Підхід LOOCV працює таким чином:
1. Побудуйте модель, використовуючи всі спостереження в наборі даних, крім одного.
2. Використовуйте модель для прогнозування значення відсутнього спостереження. Запишіть помилку перевірки цього передбачення.
3. Повторіть цей процес для кожного спостереження в наборі даних.
4. Виміряйте якість моделі шляхом усереднення всіх помилок передбачення.
приклад
У наступному прикладі показано, як використовувати perform LOOCV для того самого набору даних, який використовувався в попередніх прикладах:
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #specify that we want to use LOOCV train_control <- trainControl( method = "LOOCV" ) #train the model model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control) #summarize the results print(model) #Linear Regression # #32 samples #3 predictor # #No pre-processing #Resampling: Leave-One-Out Cross-Validation #Summary of sample sizes: 31, 31, 31, 31, 31, 31, ... #Resampling results: # # RMSE Rsquared MAE #3.168763 0.7170704 2.503544 # #Tuning parameter 'intercept' was held constant at a value of TRUE
Переваги та недоліки цього підходу
Перевага LOOCV полягає в тому, що ми використовуємо всі точки даних, що загалом зменшує потенційне зміщення. Однак, оскільки ми використовуємо модель для прогнозування значення кожного спостереження, це може призвести до більшої мінливості похибки передбачення.
Іншим недоліком цього підходу є те, що він повинен відповідати такій великій кількості моделей, що може стати неефективним і обчислювальним.
Підхід повторної k-кратної перехресної перевірки
Ми можемо виконати повторну k-кратну перехресну перевірку, просто виконавши k-кратну перехресну перевірку кілька разів. Підсумкова помилка – це середня помилка кількості повторень.
У наступному прикладі виконується 5-кратна перехресна перевірка, повторена 4 рази:
#load dplyr library used for data manipulation library(dplyr) #load caret library used for partitioning data into training and test set library(caret) #make this example reproducible set.seed(0) #define the dataset data <- mtcars[, c("mpg", "disp", "hp", "drat")] #define the number of subsets to use and number of times to repeat k-fold CV train_control <- trainControl(method = "repeatedcv", number = 5, repeats = 4 ) #train the model model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control) #summarize the results print(model) #Linear Regression # #32 samples #3 predictor # #No pre-processing #Resampling: Cross-Validated (5 fold, repeated 4 times) #Summary of sample sizes: 26, 25, 26, 25, 26, 25, ... #Resampling results: # # RMSE Rsquared MAE #3.176339 0.7909337 2.559131 # #Tuning parameter 'intercept' was held constant at a value of TRUE
Переваги та недоліки цього підходу
Перевага підходу повторної k-кратної перехресної перевірки полягає в тому, що для кожного повторення дані будуть розділені на дещо різні підмножини, що має дати ще більш неупереджену оцінку похибки передбачення моделі. Недоліком цього підходу є те, що він може бути інтенсивним з точки зору обчислень, оскільки ми повинні повторювати процес підгонки моделі кілька разів.
Як вибрати кількість згорток у перехресній перевірці
Найбільш суб’єктивною частиною перехресної перевірки є прийняття рішення про те, скільки складок (тобто підмножин) використовувати. Загалом, чим менша кількість складок, тим більш упереджені оцінки похибки, але тим менше вони будуть варіативними. І навпаки, чим більша кількість складок, тим менш упереджені оцінки похибки, але тим більш мінливими вони будуть.
Також важливо пам’ятати про час розрахунку. Для кожної складки вам потрібно буде навчити новий візерунок, і хоча це повільний процес, він може зайняти багато часу, якщо ви виберете велику кількість складок.
На практиці перехресна перевірка зазвичай виконується за допомогою 5 або 10 кратностей, оскільки це забезпечує хороший баланс між мінливістю та зміщенням, а також ефективне з точки зору обчислень.
Як вибрати модель після виконання перехресної перевірки
Перехресна перевірка використовується для оцінки похибки передбачення моделі. Це може допомогти нам вибрати між двома або більше різними моделями, виділивши, яка модель має найменшу похибку передбачення (на основі RMSE, R-квадрат тощо).
Після того, як ми використали перехресну перевірку, щоб вибрати найкращу модель, ми використовуємо всі доступні дані, щоб відповідати вибраній моделі. Ми не використовуємо фактичні екземпляри моделі, які ми навчили під час перехресної перевірки для нашої остаточної моделі.
Наприклад, ми можемо використати 5-кратну перехресну перевірку, щоб визначити, яку модель краще використовувати між двома різними моделями регресії. Однак, коли ми визначили, яку модель найкраще використовувати, ми використовуємо всі дані, щоб підібрати остаточну модель. Іншими словами, ми не забуваємо про жодні згини під час створення остаточної моделі.