Нежное введение в k-кратную перекрестную проверку
Перекрестная проверка — это статистический метод, используемый для оценки качества моделей машинного обучения.
Он обычно используется в прикладном машинном обучении для сравнения и выбора модели для конкретной задачи прогнозного моделирования, поскольку его легко понять, легко реализовать, и он приводит к оценкам навыков, которые обычно имеют меньшую погрешность, чем другие методы.
В этом уроке вы познакомитесь с кратким введением в процедуру перекрестной проверки в k-кратном размере для оценки навыков моделей машинного обучения.
После завершения этого урока вы будете знать:
- Эта k-кратная перекрестная проверка — это процедура, используемая для оценки качества модели на новых данных.
- Существует распространенная тактика, которую вы можете использовать для выбора значения k для вашего набора данных.
- Существуют широко используемые варианты перекрестной проверки, такие как стратифицированная и повторная, которые доступны в scikit-learn.
Начните свой проект с моей новой книги «Статистика для машинного обучения», включающей пошаговые руководства и файлы исходного кода Python для всех. примеры.
Давайте начнем.
- Обновление в июле 2020 г.: добавлены ссылки на соответствующие типы перекрестной проверки.
Обзор руководства
Этот урок разделен на 5 частей; они есть:
- k-кратная перекрестная проверка
- Конфигурация k
- Рабочий пример
- API перекрестной проверки
- Вариации перекрестной проверки
k-кратная перекрестная проверка
Перекрестная проверка — это процедура повторной выборки, используемая для оценки моделей машинного обучения на ограниченной выборке данных.
Если у вас есть модель машинного обучения и некоторые данные, вы хотите узнать, подойдет ли ваша модель. Вы можете разделить свои данные на обучающий и тестовый наборы. Обучите свою модель с помощью обучающего набора и оцените результат с помощью тестового набора. Но вы оценивали модель только один раз и не уверены, что ваш хороший результат — это удача или нет. Вы хотите оценить модель несколько раз, чтобы быть более уверенными в ее конструкции.
Процедура имеет единственный параметр k, который указывает на количество групп, на которые должна быть разбита данная выборка данных. Поэтому эту процедуру часто называют k-кратной перекрестной проверкой. Когда выбрано конкретное значение k, его можно использовать вместо k в ссылке на модель, например, k=10 становится 10-кратной перекрестной проверкой.
Перекрестная проверка в основном используется в прикладном машинном обучении для оценки качества модели машинного обучения на невидимых данных. То есть использовать ограниченную выборку, чтобы оценить, как модель будет работать в целом, когда она используется для прогнозирования данных, не используемых во время обучения модели.
Это популярный метод, поскольку его легко понять и поскольку он обычно приводит к менее предвзятой или менее оптимистичной оценке навыков модели, чем другие методы, такие как простое разделение обучения и тестирования.
Обратите внимание, что k-кратная перекрестная проверка предназначена для оценки конструкции модели, а не конкретного обучения. Потому что вы переобучили модель той же конструкции с разными обучающими наборами.
Общая процедура следующая:
- Перетасуйте набор данных случайным образом.
- Разделить набор данных на k групп
-
Для каждой уникальной группы:
- Возьмите группу в качестве резервного или тестового набора данных.
- Возьмите оставшиеся группы в качестве набора обучающих данных.
- Установите модель на обучающем наборе и оцените ее на тестовом наборе.
- Сохраните оценку оценки и откажитесь от модели.
Важно отметить, что каждое наблюдение в выборке данных относится к отдельной группе и остается в этой группе на время процедуры. Это означает, что каждому образцу предоставляется возможность использовать его в контрольном наборе 1 раз и использовать для обучения модели k-1 раз.
Этот подход предполагает случайное разделение набора наблюдений на k групп или сгибов примерно одинакового размера. Первый сгиб рассматривается как набор проверки, и метод подходит для оставшихся k - 1 сгибов.
- Страница 181, Введение в статистическое обучение, 2013.
Также важно, чтобы любая подготовка данных перед подгонкой модели происходила на наборе обучающих данных, назначенном CV, внутри цикла, а не на более широком наборе данных. Это также относится к любой настройке гиперпараметров. Невыполнение этих операций в цикле может привести к утечке данных и оптимистической оценке навыков модели.
Несмотря на все усилия специалистов по статистической методологии, пользователи часто делают недействительными свои результаты, случайно просматривая тестовые данные.
- Страница 708, Искусственный интеллект: современный подход (3-е издание), 2009 г.
Результаты перекрестной проверки в k-кратном размере часто суммируются со средним значением показателей навыков модели. Также хорошей практикой является включение показателя дисперсии показателей навыков, например стандартного отклонения или стандартной ошибки.
Конфигурация k
Значение k необходимо тщательно выбирать для вашей выборки данных.
Плохо выбранное значение k может привести к неправильному представлению о навыках модели, например, к показателю с высокой дисперсией (который может сильно меняться в зависимости от данных, используемых для соответствия модели) или к высокой систематической ошибке. , (типа завышения мастерства модели).
Три распространенных тактики выбора значения k заключаются в следующем:
- Репрезентативный: значение k выбирается таким образом, чтобы каждая обучающая/тестовая группа выборок данных была достаточно большой, чтобы быть статистически репрезентативной для более широкого набора данных.
- k=10: значение k фиксировано и равно 10. Это значение было обнаружено экспериментально и обычно приводит к оценке навыков модели с низким смещением и умеренной дисперсией.
- k=n: значение k фиксировано равно n, где n — размер набора данных, чтобы дать каждому тестовому образцу возможность использовать его в резервном наборе данных. Этот подход называется перекрестной проверкой с исключением одного.
Выбор k обычно составляет 5 или 10, но формального правила нет. По мере увеличения k разница в размере между обучающим набором и подмножествами повторной выборки становится меньше. По мере уменьшения этой разницы смещение метода становится меньше.
- Страница 70, Прикладное прогнозное моделирование, 2013.
Значение k=10 очень распространено в области прикладного машинного обучения и рекомендуется, если вы затрудняетесь с выбором значения для своего набора данных.
Подводя итог, можно сказать, что существует компромисс между смещением и дисперсией, связанный с выбором k при k-кратной перекрестной проверке. Обычно, учитывая эти соображения, выполняется k-кратная перекрестная проверка с использованием k=5 или k=10, поскольку эмпирически было показано, что эти значения дают оценки частоты ошибок теста, которые не страдают ни от чрезмерно высокой систематической ошибки, ни от очень высокой дисперсии.
- Страница 184, Введение в статистическое обучение, 2013.
Если выбрано значение k, которое не разделяет выборку данных поровну, то одна группа будет содержать остаток примеров. Предпочтительно разделить выборку данных на k групп с одинаковым количеством выборок, чтобы выборка оценок навыков модели была эквивалентной.
Дополнительную информацию о том, как настроить перекрестную проверку в k-кратном размере, см. в руководстве:
- Как настроить перекрестную проверку k-fold
Рабочий пример
Чтобы сделать процедуру перекрестной проверки конкретной, давайте рассмотрим рабочий пример.
Представьте, что у нас есть выборка данных с 6 наблюдениями:
[0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
Первый шаг — выбрать значение k, чтобы определить количество сверток, используемых для разделения данных. Здесь мы будем использовать значение k=3. Это означает, что мы перетасуем данные, а затем разделим их на 3 группы. Поскольку у нас есть 6 наблюдений, каждая группа будет иметь равное количество по 2 наблюдения.
Например:
Fold1: [0.5, 0.2]
Fold2: [0.1, 0.3]
Fold3: [0.4, 0.6]
Затем мы можем использовать образец, например, для оценки навыков алгоритма машинного обучения.
Три модели обучаются и оцениваются, при этом каждая складка дает шанс стать выдержанным тестовым набором.
Например:
- Модель1: обучение на Fold1 + Fold2, тестирование на Fold3.
- Модель2: обучение на Fold2 + Fold3, тестирование на Fold1.
- Модель3: обучение на Fold1 + Fold3, тестирование на Fold2.
Затем модели отбрасываются после того, как они оценены, поскольку они выполнили свою задачу.
Оценки навыков собираются для каждой модели и суммируются для использования.
API перекрестной проверки
Нам не нужно вручную реализовывать перекрестную проверку в k-кратном размере. Библиотека scikit-learn предоставляет реализацию, которая разделяет заданную выборку данных.
Можно использовать класс scikit-learn KFold(). В качестве аргументов он принимает количество разбиений, перетасовывать или нет выборку, а также начальное число для генератора псевдослучайных чисел, используемого перед перетасовкой.
Например, мы можем создать экземпляр, который разбивает набор данных на 3 сгиба, перемешивает перед разделением и использует значение 1 для генератора псевдослучайных чисел.
kfold = KFold(3, True, 1)
Затем функцию split() можно вызвать в классе, где образец данных предоставляется в качестве аргумента. При многократном вызове разделение вернет каждую группу обучающих и тестовых наборов. В частности, возвращаются массивы, содержащие индексы исходной выборки данных наблюдений, которые будут использоваться для обучающих и тестовых наборов на каждой итерации.
Например, мы можем перечислить разделения индексов выборки данных, используя созданный экземпляр KFold следующим образом:
# enumerate splits
for train, test in kfold.split(data):
print('train: %s, test: %s' % (train, test))
Мы можем связать все это вместе с нашим небольшим набором данных, использованным в проработанном примере предыдущего раздела.
# scikit-learn k-fold cross-validation
from numpy import array
from sklearn.model_selection import KFold
# data sample
data = array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6])
# prepare cross validation
kfold = KFold(3, True, 1)
# enumerate splits
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-кратной перекрестной проверки в scikit-learn предоставляется как компонентная операция в рамках более широких методов, таких как гиперпараметры модели поиска по сетке и оценка модели в наборе данных.
Тем не менее, класс KFold можно использовать напрямую для разделения набора данных перед моделированием, чтобы все модели использовали одно и то же разделение данных. Это особенно полезно, если вы работаете с очень большими выборками данных. Использование одних и тех же разбиений в разных алгоритмах может иметь преимущества для статистических тестов, которые вы, возможно, захотите провести с данными позже.
Вариации перекрестной проверки
Существует несколько вариантов процедуры k-кратной перекрестной проверки.
Три наиболее часто используемых варианта:
- Разделение обучения/теста. В крайнем случае, k может быть установлено равным 2 (а не 1), так что для оценки модели создается одно разделение поезда/теста.
- LOOCV. Взяв другую крайность, k может быть установлено как общее количество наблюдений в наборе данных, так что каждому наблюдению предоставляется шанс быть исключенным из набора данных. Это называется перекрестной проверкой с исключением одного, или сокращенно LOOCV.
- Стратифицировано. Разделение данных на складки может регулироваться такими критериями, как обеспечение того, чтобы каждая складка имела одинаковую долю наблюдений с заданным категориальным значением, например значением результата класса. Это называется стратифицированной перекрестной проверкой.
- Повторяющийся: здесь процедура перекрестной проверки повторяется n раз, причем, что важно, выборка данных перемешивается перед каждым повторением, что приводит к различному разделению выборки.
- Вложенный: здесь выполняется k-кратная перекрестная проверка внутри каждого этапа перекрестной проверки, часто для настройки гиперпараметров во время оценки модели. Это называется вложенной перекрестной проверкой или двойной перекрестной проверкой.
Расширения
В этом разделе перечислены некоторые идеи по расширению руководства, которые вы, возможно, захотите изучить.
- Найдите 3 исследовательские работы по машинному обучению, в которых для k-кратной перекрестной проверки используется значение 10.
- Напишите свою собственную функцию для разделения выборки данных с помощью перекрестной проверки в k-кратном размере.
- Разработайте примеры для демонстрации каждого из основных типов перекрестной проверки, поддерживаемых scikit-learn.
Если вы изучите какое-либо из этих расширений, мне будет интересно узнать.
Дальнейшее чтение
В этом разделе представлены дополнительные ресурсы по этой теме, если вы хотите углубиться в нее.
Похожие руководства
- Как настроить перекрестную проверку k-fold
- LOOCV для оценки алгоритмов машинного обучения
- Вложенная перекрестная проверка для машинного обучения с помощью Python
- Повторная перекрестная проверка в k-кратном порядке для оценки модели в Python
- Как исправить перекрестную проверку k-крата для несбалансированной классификации
- Разделение поезд-тест для оценки алгоритмов машинного обучения
Книги
- Прикладное прогнозное моделирование, 2013.
- Введение в статистическое обучение, 2013.
- Искусственный интеллект: современный подход (3-е издание), 2009 г.
API
- sklearn.model_selection.KFold() API
sklearn.model_selection: API выбора модели
Статьи
- Повторная выборка (статистика) в Википедии
- Перекрестная проверка (статистика) в Википедии
Краткое содержание
В этом уроке вы познакомились с процедурой k-кратной перекрестной проверки для оценки навыков моделей машинного обучения.
В частности, вы узнали:
- Эта k-кратная перекрестная проверка — это процедура, используемая для оценки качества модели на новых данных.
- Существует распространенная тактика, которую вы можете использовать для выбора значения k для вашего набора данных.
- Существуют широко используемые варианты перекрестной проверки, такие как стратифицированная и повторная, которые доступны в scikit-learn.
У вас есть вопросы?
Задавайте свои вопросы в комментариях ниже, и я постараюсь ответить.