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