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

Итак, как мы можем помочь в борьбе с переоснащением? Через перекрестную проверку!

Что такое перекрестная проверка?

Перекрестная проверка (CV) — это метод, используемый при обучении нашей модели. В CV мы разделим наш набор данных на два: набор данных для тестирования и набор данных для обучения. Идея состоит в том, что мы будем обучать нашу модель, используя обучающий набор, а затем тестировать нашу модель на тестовом наборе, чтобы увидеть, насколько хорошо она работает. «Увидеть, насколько хорошо это работает» можно несколькими способами, но один из методов, который я использовал в начале, заключался в сравнении значений среднеквадратичной ошибки (MSE). Следовательно, у нас будет MSE обучающего набора и MSE тестового набора. Как правило, нас «больше» волнует MSE тестового набора, поскольку мы ожидаем, что MSE обучающего набора будет довольно низким, поскольку модель обучается на этом конкретном наборе. Обратите внимание, что очень высокая MSE тестового набора по сравнению со MSE обучающего набора может указывать на переоснащение.

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

Разделение 50–50

Давайте рассмотрим наивное разбиение данных на 50–50, то есть 50% данных используются для обучения модели (набор данных для обучения), а остальные 50% удерживаются для тестирования модели после обучения (набор данных для тестирования). ).

Хотя у нас есть 50 % для тестирования нашей модели, 50 % — это все еще довольно много, что не используется для помощи в обучении модели. Часть тестирования 50% может содержать ценную информацию, которую наша модель упустит, если мы используем это разделение. Это может привести к большей систематической ошибке, когда наши прогнозы/оценки далеки от реальных.

Полезная документация: https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

Перекрестная проверка без исключения (LOOCV)

Представьте ситуацию, когда у нас очень мало точек данных, скажем, 10. Тогда разделение 50 на 50 еще более неблагоприятно, поскольку исключение 50% — это 5 очень важных точек данных. Рассмотрим LOOCV в качестве альтернативы.

В LOOCV мы обучаем модель на всем наборе данных, исключая только одну точку данных. Мы будем перебирать весь набор данных таким образом, что каждый раз мы будем исключать другую точку данных из обучающего набора. Таким образом, тестовый набор будет содержать только ту единственную точку, которая меняется на каждой итерации. Затем мы поместим модель на тренировочный набор и повторим. По сути, если у нас есть всего n точек данных, модель будет соответствовать n-1 точкам данных на каждой итерации. Это дополнительно проиллюстрировано ниже:

Обратите внимание, что если у нас очень большой набор данных, LOOCV требует очень много времени, поскольку мы выполняем n итераций.

K-кратная перекрестная проверка

LOOCV — это особый случай (k=n, размер набора данных) K-кратной перекрестной проверки. В K-Fold Cross Validation мы разделим набор данных на k сгибов (сгиб можно рассматривать как группу/подмножество, а k — это некоторое количество групп). 1 из k сгибов не используется в качестве тестового набора, а остальные k –1 сгибы используются в качестве обучающего набора. Разделение складок показано ниже с k=2, k=3 и k=6 и набором данных с 6 точками данных:

Мы можем разбить этапы перекрестной проверки K-Fold на четыре этапа:

  1. Во-первых, мы разделим данные на k-сгибы.
  2. Затем мы воздержимся от одного раза в качестве тестового набора.
  3. Затем мы обучим модель на других k -1 сгибах.
  4. Повторяйте, перебирая складки, пока не будут проверены все складки (всего k раз). Это показано ниже с тем же набором данных из 6 точек и k=3).

Перед выполнением K-Fold Cross Validation вы должны перетасовать данные, чтобы каждая кратность представляла набор данных. Обратите внимание, что MSE усредняются по k итерациям.

На практике мы обычно используем k=5 или k=10, но вы можете выбрать любое подходящее значение k.

Кроме того, поскольку мы разбиваем на k-сгибы, используя k≠n и не выполняя LOOCV, K-сгибы CV не так затратны с точки зрения времени.

Полезная документация: https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html

Выполняя перекрестную проверку, мы пытаемся улучшить производительность нашей модели. Вышеупомянутые методы можно легко реализовать, написав свои собственные функции для практики или с помощью Scikit-Learn (Python). При рассмотрении правильных моделей для определенных наборов данных нам, скорее всего, придется пойти на компромисс, чтобы получить наиболее подходящую модель. В конечном счете, перекрестная проверка — отличный инструмент для достижения нашей цели выбора наиболее подходящей модели.