K-кратная перекрестная проверка в Python (шаг за шагом)


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

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

1. Произвольно разделите набор данных на k групп или «складок» примерно одинакового размера.

2. Выберите одну из складок в качестве набора удерживающих. Соедините модель с оставшимися k-1 складками. Рассчитайте тестовую MSE по наблюдениям в протянутой кратности.

3. Повторите этот процесс k раз, используя каждый раз другой набор в качестве набора удержания.

4. Рассчитайте общую тестовую MSE как среднее значение k тестовых MSE.

В этом руководстве представлен пошаговый пример того, как выполнить перекрестную проверку k-fold для заданной модели в Python.

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

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

from sklearn. model_selection import train_test_split
from sklearn. model_selection import KFold
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: Выполните перекрестную проверку в K-кратном порядке

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

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

#define cross-validation method to use
cv = KFold ( n_splits = 10 , random_state = 1 , shuffle = True )

#build multiple linear regression model
model = LinearRegression()

#use k-fold CV 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.6141267491803646

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

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

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

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

#define cross-validation method to use
cv = KFold ( n_splits = 5 , random_state = 1 , shuffle = True ) 

#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)))

4.284373111711816

Из вывода мы видим, что среднеквадратическая ошибка (RMSE) составила 4,284 .

Чем ниже RMSE, тем точнее модель способна предсказать фактические наблюдения.

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

Также обратите внимание, что в этом примере мы решили использовать k=5 сгибов, но вы можете выбрать любое количество сгибов.

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

Вы можете найти полную документацию по функции KFold() от sklearn здесь .

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

Введение в перекрестную проверку K-Fold
Полное руководство по линейной регрессии в Python
Перекрестная проверка с исключением одного в Python

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