Перекрестная проверка с исключением одного в python (с примерами)


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

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

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

2. Создайте модель, используя только данные из обучающего набора.

3. Используйте модель, чтобы спрогнозировать значение отклика наблюдения, исключенного из модели, и вычислить среднеквадратическую ошибку (MSE).

4. Повторите этот процесс n раз. Рассчитайте тестовую MSE как среднее значение всех тестовых MSE.

В этом руководстве представлен пошаговый пример запуска LOOCV для заданной модели на Python.

Шаг 1. Загрузите необходимые библиотеки

Сначала мы загрузим функции и библиотеки, необходимые для этого примера:

 from sklearn. model_selection import train_test_split
from sklearn. model_selection import LeaveOneOut
from sklearn. model_selection import cross_val_score
from sklearn. linear_model import LinearRegression
from numpy import means
from numpy import absolute
from numpy import sqrt
import pandas as pd

Шаг 2. Создайте данные

Далее мы создадим DataFrame pandas, который содержит две переменные-предикторы, x1 и x2 , и одну переменную ответа y.

 df = pd.DataFrame({' y ': [6, 8, 12, 14, 14, 15, 17, 22, 24, 23],
                   ' x1 ': [2, 5, 4, 3, 4, 6, 7, 5, 8, 9],
                   ' x2 ': [14, 12, 12, 13, 7, 8, 7, 4, 6, 5]})

Шаг 3. Выполните перекрестную проверку с исключением одного

Далее мы адаптируем модель множественной линейной регрессии к набору данных и выполним LOOCV, чтобы оценить производительность модели.

 #define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']

#define cross-validation method to use
cv = LeaveOneOut()

#build multiple linear regression model
model = LinearRegression()

#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_absolute_error ',
                         cv=cv, n_jobs=-1)

#view mean absolute error
mean(absolute(scores))

3.1461548083469726

Из результата мы видим, что средняя абсолютная ошибка (MAE) составила 3,146 . То есть средняя абсолютная ошибка между предсказанием модели и фактически наблюдаемыми данными составляет 3,146.

В общем, чем ниже MAE, тем лучше модель способна предсказать фактические наблюдения.

Еще одним часто используемым показателем для оценки эффективности модели является среднеквадратическая ошибка (RMSE). Следующий код показывает, как вычислить эту метрику с помощью LOOCV:

 #define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']

#define cross-validation method to use
cv = LeaveOneOut()

#build multiple linear regression model
model = LinearRegression()

#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_squared_error ',
                         cv=cv, n_jobs=-1)

#view RMSE
sqrt(mean(absolute(scores)))

3.619456476385567

Из результата мы видим, что среднеквадратическая ошибка (RMSE) составила 3,619 . Чем ниже RMSE, тем лучше модель способна предсказать фактические наблюдения.

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

Дополнительные ресурсы

Краткое введение в перекрестную проверку с исключением одного (LOOCV)
Полное руководство по линейной регрессии в Python

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

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