В этой статье мы постараемся разобраться, что такое кросс-валидация, зачем она нужна и принцип работы. Наконец, мы сделаем простое приложение, используя библиотеку Sklearn.

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

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

Второе использование перекрестной проверки - оптимизация гиперпараметра в модели. Но я планирую затронуть этот вопрос в другой статье, а не здесь.

2. Почему предпочтительна перекрестная проверка?

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

Предположим, что мы участвовали в конкурсе по науке о данных в Kaggle, провели анализ, построили нашу модель, измерили ее успех и отправили результаты в Kaggle. И у нас был шок нашей жизни. А именно, мы измерили успешность нашей модели как точность 90%, но Kaggle сказал нам, что наша оценка точности составила 80%. Причина этого, конечно, в переобучении, и перекрестная проверка тут ни при чем. Но если бы мы применили k-кратную перекрестную проверку вместо измерения успеха нашей модели с помощью единого подхода к разделению поездов и тестов, мы бы увидели, что получили разные оценки точности для разных разделений, и эти оценки, как правило, были меньше 90% и в среднем около 85%. Вместо того, чтобы испытать такой большой шок, мы попытаемся оптимизировать нашу модель и повысить ее производительность.

В подходе разделения поезд-тест набор данных, который будет использоваться в модели, делится на два: поезд и тест. Модель создается с набором поездов, и производительность модели оценивается по набору тестов. При таком подходе мы не можем сказать, что можем объективно оценить производительность модели, поскольку разные значения точности получаются в результате разных разделений на поезд-тест. Давайте посмотрим на эту ситуацию с небольшим приложением, которое мы создадим для набора данных «вино» в библиотеке Sklearn:

  • random_state = 49
  • random_state = 1234

В выходных данных кода выше мы заметили, что оценки точности для различных разбиений (random_states) изменились, поэтому оценка производительности модели по одному набору данных может вводить в заблуждение. Поскольку наша цель - оценить производительность нашей модели как можно более объективно и точно, на данном этапе отсутствует метод разделения поездов и тестов, и поэтому необходим метод перекрестной проверки.

3. Как работает перекрестная проверка?

Давайте посмотрим на логику работы с методом K-Fold CV, который является одним из самых основных методов перекрестной проверки:

  1. Набор данных перемешивается случайным образом. (По желанию)
  2. Набор данных разделен на k групп.
  3. К каждой группе применяются следующие шаги:
  • Выбранная группа используется в качестве набора для проверки.
  • Все остальные группы (группа k-1) используются как составы поездов.
  • Модель создается с использованием набора поездов и оценивается с помощью набора для проверки.
  • Оценка модели сохраняется в списке.

4. Проверяется статистическая сводка оценочных баллов. (например, среднее, стандартное отклонение, максимум, минимум ..)

ПРИМЕЧАНИЕ: Невозможность выбрать значение K в соответствии с количеством наблюдений может привести к неправильной оценке производительности модели. Хотя нет строгого правила для выбора значения K, обычно его можно установить на 5 или 10. Его можно посмотреть здесь, чтобы изучить различные подходы и получить дополнительную информацию.

4. Применение перекрестной проверки с помощью Sklearn

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

Теперь, используя функцию cross_val_score, которую мы импортируем из модуля model_selection библиотеки Sklearn, давайте разделим набор данных «вино» на 10 частей и вычислим среднее значение точности.

Вы можете получить доступ ко всем кодам здесь.

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