CyberKoala

XR туториалы | Разработка VR/AR приложений и игр. Создание и внедрение VR арен для бизнеса

0
Ваша корзина

Как кросс-валидация может ошибаться

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

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

Ошибочный сценарий №1

Сначала мы применяем стратегию выбора объектов для всего набора данных, чтобы выбрать k лучших объектов (где k – произвольное число) с наибольшей f-статистикой. После этого мы решаем выполнить перекрестную проверку и ввести данные с выбранными функциями в цикл CV(кросс-валидации) для оценки производительности модели.

cross-validation scenario1
Субвыборка на полном наборе данных перед CV приводит к утечке данных.

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

Ошибочный сценарий №2

Вместо того, чтобы выбирать произвольное количество объектов, мы хотим выбрать объекты, p-value f-статистики которых меньше определенного порогового значения. Мы думаете о пороге p-value как о гиперпараметре модели – подстроить p-value, чтобы получить наиболее эффективный набор функций, а значит, и наиболее эффективную модель.

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

cross-validation кросс-валидация
Сочетание настройки гиперпараметров с оценкой модели в одном и том же цикле CV приводит к оптимистически предвзятой оценке производительности модели.

При объединении настройки гиперпараметров с оценкой модели тестовые данные, используемые для оценки, больше не являются статистически чистыми, поскольку они были “замечены” моделями при настройке гиперпараметров. Настройки гиперпараметров сохраняют частичную “память” данных, которые теперь образуют тестовый раздел. Каждый раз, когда модель с различными гиперпараметрами оценивается на выборочном наборе, она предоставляет информацию о данных. Эти знания о модели в наборе данных можно использовать в процедуре настройки модели, чтобы найти наиболее эффективную конфигурацию для набора данных. Гиперпараметры могут быть настроены таким образом, чтобы использовать бессмысленные статистические особенности выборки. Другими словами, чрезмерная подгонка при настройке гиперпараметров возможна всякий раз, когда CV-оценка производительности обобщения, оцененная по конечной выборке данных, оптимизируется напрямую. Процедура CV пытается уменьшить этот эффект, но полностью устранить его невозможно, особенно когда выборка данных невелика, а количество гиперпараметров, подлежащих настройке, относительно велико. Поэтому мы должны ожидать, что в оценках производительности, полученных таким образом, будет наблюдаться оптимистический уклон.

Корректные реализации

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

В сценарии №1 выбор функции должен был выполняться внутри каждого цикла CV, дабы избежать утечки данных.
Производительность модели должна оцениваться на не виданном ранее тестовом наборе, который не был затронут во время оптимизации гиперпараметров.

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

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

Сниппеты кода для вложенной (nested) CV

В Scikit-learn есть готовые методы для поддержки вложенных CV. В частности, вы можете использовать GridSearchCV (или RandomSearchCV) для гиперпараметрического поиска во внутреннем цикле и cross_val_score для оценки ошибки обобщения во внешнем цикле.

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

Какой набор функций использовать в производственной модели, если мы применим стратегию выбора функций в цикле CV?

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

Чтобы ответить на этот вопрос, запомните:


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


По сути, мы используем CV для оценки того, насколько хорошо вся процедура построения модели будет работать с ранее невидимыми данными, включая стратегию подготовки данных, стратегию выбора признаков (например, пороговое значение p для использования для одностороннего теста ANOVA), выбор алгоритма (например, логистическая регрессия против XGBoost) и конкретная конфигурация алгоритма (например, количество деревьев в XGBoost). После того, как мы использовали CV для выбора выигрышной процедуры, мы затем выполним ту же самую наиболее эффективную процедуру для всего набора данных, чтобы получить нашу окончательную модель.

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

Если мы применим наиболее эффективную процедуру, найденную с помощью CV, ко всему набору данных, как мы узнаем, насколько хорошо будет работать этот экземпляр производственной модели?

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

Подробнее про кросс-валидацию: https://arxiv.org/abs/2104.00673

https://cyberkoalastudios.com/