Машинное обучение

Введение в кросс-валидацию k-fold

Введение в кросс-валидацию k-fold
В: Машинное обучение

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

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

В этом уроке мы рассмотрим процедуру кросс-валидации k-fold для оценки качества моделей машинного обучения.

После завершения этого урока, вы будете знать:

  • Как использовать k-fold кросс-валидацию для оценки квалификации модели на новых данных.
  • общие тактики, которые можно использовать, чтобы выбрать значение k для набора данных.
  • широко используемые вариации на перекрестной проверки, такие как стратифицированы (stratified) и repeated, которые доступны в библиотеки scikit-learn.

Урок состоит из 5 частей:

  • k-Fold Кросс-Валидация
  • Конфигурация k
  • Рабочий пример
  • Работы с API кросс-валидации
  • Вариации на кросс-валидации

k-Fold кросс-Валидация


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

Процедура имеет один параметр, называемый k, который относится к числу групп, на которые должна быть разделена данная выборка данных. Таким образом, процедура часто называется перекрестной проверкой (кросс-валидацией) k-fold. При выборе определенного значения для k, оно может быть использовано вместо k в ссылке на модель, например, при k=10,  становится 10-кратной перекрестной проверкой.

Перекрестная проверка в основном используется в прикладном машинном обучении для оценки квалификации модели машинного обучения на не используемых данных. То есть использовать ограниченную выборку (test sample) для оценки того, как модель будет работать в целом при использовании ее при прогнозирования на данных, не используемых во время обучения модели.

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

Общая процедура заключается в следующем:

1. Перемешайте датасет случайным образом

2. Разделите датасет на k-групп

3. Для каждой уникальной выборки:

  • Возьмите группу в качестве тестирования датасета
  • Возьмите остальные группы в качестве выборки учебных данных
  • Приготовьте модель на обучаемых выборках и оцените ее на тестовой выборке
  • Сохраняйте оценку модели и отбросьте модель

4. Обобщите параметры качества модели с помощью выборки оценки моделей

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

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

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

Конфигурация параметра k


Значение k должно быть тщательно выбрано для выборки данных.

Плохо выбранное значение для k может привести к неправильному представлению о качестве модели, например, к оценке с высокой дисперсией (которая может сильно измениться на основе данных, используемых в соответствии с моделью), или к высокой предвзятости (например, переоценка качества модели).

Существуют три подхода для выбора значения параметра k:

  • Представитель: Значение для k выбрано таким образом, что каждая группа подборка/тестовая группа данных достаточно велика, чтобы быть статистически репрезентативной для более широкого набора данных.
  • k=10: Значение для k фиксируется до 10. Данное число было найдено в ходе экспериментов и обычно приводит к оценке качества модели с низкой предвзятостью небольшую дисперсии.
  • k = n: Значение для k фиксируется на n, где n является размером набора данных, чтобы дать каждому тестовой группе возможность быть использованной в наборе данных.

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

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

Рабочий пример


Чтобы сделать процедуру перекрестной проверки конкретной, давайте посмотрим на пример спроработанных.

Представьте, что у нас есть выборка данных с 6 наблюдениями:

[0.1, 0.2, 0.3, 0.4, 0.5, 0.6]

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

Например:

subset1: [0,5, 0,2]
subset2: [0,1, 0,3]
subset3: [0,4, 0,6]

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

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

Например:

  • Модель1: обучаем на subset1 и subset2, тестируем на subset3
  • Модель2: обучаем на subset2 и subset3, тестируем на subset1
  • Модель3: обучаем на subset1 и subset3, тестируем на subset2

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

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

API кросс-валидации

Мы не должны осуществлять k-fold проверки вручную. Библиотека scikit-learn предоставляет реализацию, которая поможет разделить датасет .

Метод KFold() из библиотеки scikit-learn может быть использован. Он принимает в качестве аргументов количество выборок на которое надо разбить датасет, следует ли перетасовывать датасет, и числовую затравку для псевдослучайного генератора чисел, используемого до перетасовки датасета.

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

kfold = KFold(3, True, 1)

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

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

Перечисление выборок

#перечисление выборок датасета
for train, test in kfold.split(data):
	print('train: %s, test: %s' % (train, test))

Мы можем связать все это вместе с нашим датасетом, используемым в примере из предыдущего раздела.

# scikit-learn k-fold кросс-валидация
from numpy import arrayfrom
sklearn.model_selection import KFold

# датасет
data = array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6])

# подготовьте кросс валидацию
kfold = KFold(3, True, 1)

# перечисление выборок датасета
for train, test in kfold.split(data):
	print('train: %s, test: %s' % (data[train], data[test]))

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

train: [0.1 0.4 0.5 0.6], test: [0.2 0.3]
train: [0.2 0.3 0.4 0.6], test: [0.1 0.5]
train: [0.1 0.2 0.3 0.5], test: [0.4 0.6]

Реализация перекрестной проверки k-fold в scikit-learn предоставляется в качестве компонентной операции в рамках более широких методов, таких как гиперпараметры модели поиска сетки и оценка модели на наборе данных.

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

Вариации на кросс-валидацию


Существует ряд вариаций процедуры перекрестной проверки k-fold.

Три часто используемых варианта:

  • Обучение / Тест выборка: Самая крайность, это когда k = 2 (не 1) так, что одна выборка идет на обучение и одна и тест для оценки модели.
  • LOOCV: Другая крайность, когда k равен общему размеру наблюдений в датасете. По-английски это называется leave-one-out cross-validation, или LOOCV для краткости.
  • Стратифицированная выборка (stratified): разделение данных на складки может регулироваться такими критериями, чтобы каждая выборка имела одинаковую пропорцию наблюдений с заданным категоричным значением, например значением класса. Это называется стратифицированной перекрестной проверкой.
  • Повторяющаяся выборка (repeated): k-fold перекрестная валидация повторяется n раз, и датасет перетасовывается на каждой итерации, что приводит к иной выборки данных.

Библиотека scikit-learn предоставляет набор реализации перекрестной проверки

Подведем итог


В этом уроке вы узнали про процедуру перекрестной проверки k-fold для оценки качества моделей машинного обучения.

В частности, вы узнали:

  • Что k-fold кросс валидация это процедура, используемая для оценки квалификации модели на новых данных.
  • общие тактики, которые можно использовать, чтобы выбрать значение k для набора данных.
  • широко используемые вариации кросс-валидации, такие как стратифицированные и повторяющиеся, которые доступны в scikit-learn.

Полезные ссылки:

Еще от кодкамп
Введение в кросс-валидацию k-fold
Машинное обучение

Введение в кросс-валидацию k-fold

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