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