Перекрестная проверка с исключением одного в 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 mean
from numpy import absolute
from numpy import sqrt
import pandas as pd

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

Далее мы создадим кадр данных pandas, содержащий две переменные-предикторы, x 1 и x 2 , и одну переменную ответа 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

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