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

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

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

  • Реальные эффекты: именно к этим эффектам мы хотели бы приспособить нашу модель. Они показывают образец, который мы можем воспроизвести / оценить с помощью нашей модели.
  • Случайные эффекты: как вы уже догадались, они случаются случайно. Мы можем с уверенностью предположить, что каждый набор данных реального мира будет иметь эти эффекты, поэтому подгонка модели к 99% всех точек данных приведет к проблеме, заключающейся в том, что модель будет плохо работать на неизвестной 1% части, тестовых данных.

Если вы хотите узнать больше об этой теме, подпишитесь на меня здесь:



Соображения, связанные с перекрестной проверкой

Итак, что такое перекрестная проверка? Вспоминая мою публикацию о выборе модели, в которой мы увидели, что может потребоваться разделить данные на три разных части: одна для обучения, другая для проверки (для выбора между моделей) и в конечном итоге измерить истинную точность с помощью части тестовых данных. Эта процедура - более стабильный (и предпочтительный) способ выбрать лучшую из нескольких моделей. Перекрестная проверка не слишком отличается от этой идеи, но имеет дело с обучением / проверкой модели более разумным и более эффективным с вычислительной точки зрения способом:

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

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

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

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

Замечания по усреднению результатов. Как описано, если мы построили 5 моделей, то есть k равно 5, какой показатель точности следует учитывать? Одна из идей - выбрать лучший или худший результат из всех подмоделей, но это не даст надежного показателя, если будет слишком оптимистично или пессимистично. Простой ответ: мы определяем точность модели как среднее значение всех k моделей. Важно понимать, что мы НЕ усредняем параметры (под) моделей (например, коэффициенты). Если лучшая модель выбрана в разделе CV, мы подбираем модель ко всему набору данных и используем эту модель для дальнейших исследований.

При случайной выборке (при сравнении нескольких моделей) мы обычно откладываем набор данных для проверки. Конечно, это также можно сделать для CV: например, мы могли бы использовать случайное подмножество из 90% данных для построения наших моделей с использованием CV и проверки лучшей модели с наименьшей CV-ошибкой с помощью набора данных проверки - я бы не стал Однако не слишком удивляйтесь, если результаты будут аналогичны метрике ошибки CV.

Оставьте одно-кратное резюме

CV с исключением одного (LOOCV) - это частный случай CV, вместо того, чтобы выбирать количество складок (например, k = 10), мы используем k = N. Это означает, что мы создаем N моделей (по одной для каждой строки в нашем наборе данных), но всегда удаляем i-ю строку из обучения модели и используем ее для тестирования. Имейте в виду, что это, вероятно, невозможно для очень больших наборов данных - и в целом менее эффективно с точки зрения вычислений, чем k-кратное CV.

Перекрестная проверка Монте-Карло (MCCV)

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

MCCV требует больших вычислительных ресурсов, поэтому обязательно применяйте его только в том случае, если набор данных не слишком велик: инициализируйте пустой массив, в котором хранится ошибка CV для каждого прогона, затем запустите циклы B (например, 100) и для каждого цикла вычислите соответствующую оценку ошибки. . После всех запусков рассчитайте среднюю метрику ошибки. Псевдокод выглядит следующим образом:

results = array([  ])
for loop in 100:
    train, test = data.split # split data randomly, e.g. 80/20
    error = model(train).get_CV_error()
    results.append(error)
mean(results) # gets us the average error score of all 100 runs

Смещение-дисперсия-компромисс

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

Ансамблевые методы на основе дерева

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

Как отмечают Hastie, Tibshirani и Friedman в своей книге «Элементы статистического обучения» (2009 p. 593), ошибка «вне сумки» почти идентична ошибке Ошибка CV, что означает, что нет необходимости реализовывать другой уровень CV для методов ансамбля, таких как случайный лес.

Преимущество перед тестовыми тренировками

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

На вопрос, нужно ли вам самому писать функцию резюме? Нет, обычно нет - и вы всегда можете запустить MCCV. Ссылаясь на язык программирования R, вы часто найдете функции, которые звучат как модель, которую вы собираетесь использовать, но в названии которой есть «cv». Если вы намеревались создать простую линейную модель (lm), cv.lm делает именно то, что мы рассматривали выше. Подобные функции можно найти для Python и Julia. В итоге, используйте поисковую систему, чтобы просмотреть ваши варианты - их много.

Другие функции предоставляют возможность CV в качестве параметра, как в этом примере с использованием 10-кратного CV:

Вывод

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

{Увидимся в следующий раз}