Как выполнить перекрестную проверку производительности модели в 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

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

Плюсы и минусы этого подхода

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

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

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

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

Подход с перекрестной проверкой исключений (LOOCV)

Подход LOOCV работает следующим образом:

1. Постройте модель, используя все наблюдения в наборе данных, кроме одного.
2. Используйте модель, чтобы предсказать значение пропущенного наблюдения. Запишите тестовую ошибку этого прогноза.
3. Повторите этот процесс для каждого наблюдения в наборе данных.
4. Измерьте качество модели, рассчитав среднее значение всех ошибок предсказания.

Пример

В следующем примере показано, как использовать выполнение 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-кратную перекрестную проверку, чтобы определить, какую модель лучше всего использовать между двумя разными моделями регрессии. Однако, как только мы определяем, какую модель лучше всего использовать, мы используем все данные, чтобы соответствовать окончательной модели. Другими словами, мы не упускаем из виду ни одну из складок при построении окончательной модели.

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