Введение

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

Чтобы понять перекрестную проверку, нам нужно знать пару вещей, связанных с созданием модели. Предположим, у нас есть набор данных с 10 тыс. записей. Основываясь на приведенном выше алгоритме, мы должны выполнить Train Test Split. Набор для обучения и проверки будет составлять около 70 % или более или менее в зависимости от требований. Остальные данные будут набором для тестирования.

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

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

Но ждать!! Звучит неплохо, но у такого подхода есть более серьезный недостаток — случайный выбор записей для обучения и тестирования.

Предположим, мы передаем значение для случайного состояния =50 и получаем точность 90%. Теперь, если я снова запущу код, передав случайное состояние = 100, мы не сможем получить тот же результат, что и раньше. Это колебание точности усложнит задачу, пока мы пытаемся передать наши результаты.

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

Давайте проверим, какие существуют различные типы перекрестной проверки:

1. Оставьте один вариант перекрестной проверки

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

Заштрихованная синим область — это тестовый набор, а коричневая заштрихованная область — обучающий набор.

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

Недостатки

Этот подход кажется довольно простым, однако у него есть несколько серьезных недостатков:

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

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

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

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

Чтобы предотвратить эти колебания точности, мы будем использовать метод перекрестной проверки K-кратности.

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

Теперь давайте разберемся с этим на примере.

Предположим, у нас есть 10 тысяч записей в нашем наборе данных, и значение K, которое мы здесь выбираем, равно 10. На рисунке ниже показано, как эти данные разбиваются как Train Test Split для 10 итераций. поскольку наше значение K равно 10.

So, K = 10000/10 => 1000

Это означает, что в каждом тестовом разделении будет 1000 записей.

Давайте попробуем понять, как работает перекрестная проверка K Fold.

В первой итерации первый набор из 1000 записей будет считаться тестовым разделением. Остальные будут обучающим разделением. Аналогично для второго эксперимента/итерации следующий блок из 1000 записей будет считаться тестовым сплитом.

1-й блок и оставшиеся блоки после 2-го блока тестовых записей будут рассматриваться как разделение обучения. Этот процесс будет продолжаться до конца 10-го эксперимента/итерации. Для каждого эксперимента/итерации мы будем получать точность модели, пока не достигнем конца эксперимента/итерации.

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

Недостатки

Теперь давайте рассмотрим несколько недостатков перекрестной проверки K-кратности:

Чтобы предотвратить эту ситуацию, мы используем другой метод перекрестной проверки, который называется Стратифицированная перекрестная проверка.

3. Стратифицированная перекрестная проверка

Стратифицированная перекрестная проверка аналогична перекрестной проверке K-Fold. В этом случае мы также использовали бы значение K, а затем разделили набор для тестирования и обучения на его основе, как мы сделали в K Folds.

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

Возьмем пример двоичной классификации, где данные имеют только 2 экземпляра — 0/1. При применении стратифицированной перекрестной проверкинабор поезда и теста будет разделен таким образом, что значения каждого экземпляра (0/1 ) будет присутствовать как в наборе train, так и в наборе test. Вот как мы справляемся с недостатком перекрестной проверки K-кратности.

Теперь последний метод, который нам нужно знать, — это перекрестная проверка временных рядов.

4. Перекрестная проверка временных рядов

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

Чтобы понять это, давайте возьмем пример ежедневных продаж магазина. Допустим, у нас есть данные о продажах за 5 дней, и мы хотим спрогнозировать продажи с 6-го по 10-й день.

Чтобы предсказать продажи с 6-го по 10-й день, мы должны использовать данные о продажах за первые 5 дней.

Как вы можете видеть на изображении ниже, мы используем 5 дней продаж, чтобы предсказать продажу 6-го дня.

Затем мы снова используем уже заданные продажи и прогнозируемые продажи на 6-й день, чтобы предсказать продажи на 7-й день.

Этот процесс продолжается до тех пор, пока мы не прогнозируем продажу до 10-го дня.

Теперь давайте реализуем все, что мы обсуждали до сих пор, в коде и посмотрим, как это работает!

Вы можете скачать набор данных с Kaggle. Также код выложен на github.

  1. https://scikit-learn.org/stable/modules/cross_validation.html
  2. https://www.cs.cmu.edu/~schneide/tut5/node42.html

Первоначально опубликовано на https://ai-ml-analytics.com 2 июля 2020 г.