Перекрестная проверка k-fold в python (шаг за шагом)
Чтобы оценить эффективность модели на наборе данных, нам необходимо измерить, насколько хорошо прогнозы, сделанные моделью, соответствуют наблюдаемым данным.
Обычно используемый метод для этого известен как k-кратная перекрестная проверка , в которой используется следующий подход:
1. Случайным образом разделите набор данных на k групп или «складок» примерно одинакового размера.
2. Выберите одну из складок в качестве ограничительного набора. Подгоните шаблон под оставшиеся k-1 складок. Рассчитайте тест MSE на основе наблюдений в слое, который был натянут.
3. Повторите этот процесс k раз, каждый раз используя другой набор в качестве набора исключений.
4. Рассчитайте общую MSE теста как среднее значение MSE k теста.
В этом руководстве представлен пошаговый пример того, как выполнить перекрестную проверку в k-кратном размере для заданной модели в 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 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. Выполните перекрестную проверку K-Fold
Далее мы адаптируем модель множественной линейной регрессии к набору данных и выполним 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