Удерживающая проверка против перекрестной проверки

54

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

K-кратная перекрестная проверка, кажется, дает лучшие приближения к обобщению (поскольку она обучает и проверяет каждую точку). Итак, почему мы должны использовать стандартную проверку удержания? Или даже поговорить об этом?

амеба говорит восстановить монику
источник
10
почему вы думаете, что это бесполезно? Вы можете прочитать Раздел 7 Статистической теории обучения для формального анализа ее плюсов и минусов. По статистике, k-fold лучше, но использование тестового набора не обязательно плохо. Интуитивно необходимо учитывать, что тестовый набор (при правильном использовании) действительно является набором данных, который вообще не использовался во время обучения. Так что в определенном смысле полезно оценить модель. Кроме того, k-fold является супер-дорогим, поэтому продвижение - это своего рода «приближение» к тому, что делает k-fold (но для кого-то с низкой вычислительной мощностью).
Чарли Паркер
Конечно. С теоретической точки зрения K-fold более точный, но НЕМНОГО более дорогой в вычислительном отношении. Вопрос был: почему бы ВСЕГДА не делать перекрестную проверку по K-кратной схеме?
2
Понимаю. Я бы сказал, что причина в основном всегда вычислительная. K-кратно лучше аппроксимирует ошибку обобщения, поэтому, с моей точки зрения, K-кратный метод выбора. Выдержка намного проще в реализации и не требует обучения, как многие модели. На практике обучение модели может быть довольно дорогим.
Чарли Паркер
1
Правильно - но я думаю, что аргумент «слишком дорогой в вычислительном отношении» довольно хилый. Почти все время мы стремимся разрабатывать самые точные модели. Тем не менее, существует такой парадокс, когда у многих экспериментов, проведенных в литературе, есть только один проверочный набор.
1
Вопрос - Элементы раздела «Статистическая теория обучения», раздел 7.10.1 под названием «Кросс-валидация K-кратности», по-видимому, указывают на то, что хранение данных теста, полностью отделенных от обучающих данных (как при проверке достоверности), является идеальным, а валидация K-кратности - это просто компромисс, поскольку данных много раз мало. Я все еще довольно новичок в статистике, не могли бы вы указать, как перекрестная проверка на самом деле более точна?
numX

Ответы:

21

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

В принципе это просто, но написание кода утомительно и отнимает много времени. Как сказал Линус Торвальдс: «Плохие программисты беспокоятся о коде. Хорошие программисты беспокоятся о структурах данных и их отношениях». Многие из тех, кто занимается статистикой, являются плохими программистами не по своей вине. Эффективное перекрестное подтверждение в k-кратном порядке (и под этим я подразумеваю способ, который не является ужасно неприятным для отладки и использования более одного раза) в R, требует смутного понимания структур данных, но структуры данных обычно пропускаются к статистическому программированию »учебники. Это как старик, впервые пользующийся интернетом. Это на самом деле не сложно, просто требуется полчаса или около того, чтобы разобраться в первый раз, но он совершенно новый, и это вводит в заблуждение, поэтому его легко игнорировать.

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

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

shadowtalker
источник
18
Может быть, как кто-то, кто специализировался в CS, у меня есть немного искаженное представление об этом, но если вы можете правильно реализовать проверку задержки (это уже означает разделение набора данных на 2 части и использование одной для обучения, а другую для тестирования), единственное, что вам нужно изменить, - это соотношение деления и помещения всего цикла в цикл. Просто кажется трудно поверить, что это будет большой проблемой.
Во
3
@ Voo: кроме того, здесь недостаточно умения программировать: вы должны понимать проблему достаточно хорошо, чтобы иметь возможность судить о том, какие конфликтующие стороны необходимо учитывать при процедуре разделения. Смотрите, например, stats.stackexchange.com/questions/20010/… . Я думаю, что я вижу такие проблемы чаще, чем «чистые» проблемы кодирования (хотя никто никогда не знает: кто-то, кто едва способен кодировать простое разбиение строк в матрице данных, обычно также совершает ошибку более высокого уровня - не расщепление например, на уровне пациента)
cbeleites поддерживает Монику
Также обратите внимание, что вы можете сделать правильное (например, пациент / день измерения / ...) разделение удержания без какого-либо программирования, разделив файлы, которые производит инструмент измерения ...
cbeleites поддерживает Monica
5
Для избирателей: обратите внимание, что я задал отдельный вопрос, который ставит под сомнение мою логику. stats.stackexchange.com/q/108345/36229
shadowtalker
1
Я не думаю, что ответ, объясняющий разницу между двумя методами перекрестной проверки, должен когда-либо быть человеческим временем для изучения, абсурдно предвзятым и бесполезным
rgalbo
40

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

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

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

  1. решить разделение (например, сделать случайное распределение случаев)
  2. мера
  3. Измерение и справочные данные учебных случаев => моделирование \ ни измерения, ни справочные данные тестовых примеров не передаются человеку, который моделирует.
  4. итоговая модель + измерения протяженных случаев => прогноз
  5. сравните прогнозы со справочными данными для отдаленных случаев.

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

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

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

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

OTOH, в ситуациях с небольшим размером выборки отсрочка невозможна: вам нужно выдержать достаточно тестовых случаев, чтобы результаты тестов были достаточно точными, чтобы можно было сделать нужный вывод (помните: 3 правильных из 3 тестовых случаев для классификации означают биномиальный 95% доверительный интервал, который колеблется намного ниже 50:50, догадываясь!) Фрэнк Харрелл будет указывать на правило большого пальца, которое, по крайней мере, ок. 100 (тестовых) случаев необходимы для правильного измерения пропорции [такой как доля правильно предсказанных случаев] с полезной точностью.


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

cbeleites поддерживает Монику
источник
6
Я хотел бы дать больше +1 за этот очень подробный ответ. Мне особенно понравилось, что вы упомянули свою проблему с утечкой данных, поскольку она наглядно демонстрирует, что исключать подобные проблемы далеко не тривиально, даже для экспертов. Это хорошая проверка реальности!
Марк Клазен
Вы не задаете вопрос? Да, расщепление сложно из-за мешающих факторов, но это сложно, независимо от того, проводите ли вы одиночную проверку или перекрестную проверку в k-кратном порядке, не так ли? (Спасибо за проницательный ответ независимо!)
Нильс фон Барт
1
@ NilsvonBarth: Я не вижу, как мои аргументы являются круговыми: ОП спрашивает, «почему [вообще] используется задержка проверки», и я привожу несколько практических причин. Статистически наиболее эффективное использование ограниченного числа случаев не всегда является наиболее важным свойством дизайна исследования. (Хотя, по моему опыту, это часто происходит из-за крайне ограниченного числа случаев: я гораздо чаще советую повторять / повторять k-кратное резюме вместо удержания). Для некоторых собеседников физическое разделение возможно и просто - и очень эффективный способ предотвратить предварительный просмотр. Кто знает, найдем ли мы это вдвойне ...
cbeleites поддерживает Монику
Может быть, в какой-то момент может понадобиться слепой статистический анализ данных против слишком большого количества ложноположительных статей?
cbeleites поддерживает Монику
2
@NilsvonBarth: Осторожно с удержанием, гарантирующим независимость: легко осуществить удержание таким способом (путем физического удержания случаев, т.е. тестовый образец убирается и измеряется только после завершения обучения модели), но часто термин «удержание» используется для обозначения того, что на самом деле гораздо больше похоже на одно случайное разделение данных, и тогда все возможности допустить ошибки в разделении могут быть реализованы также и с ограничением!
cbeleites поддерживает Монику
8

Может быть полезно немного прояснить терминологию. Если мы допустим, чтобы было некоторым целым числом, меньшим (или равным) где - размер выборки, и мы разделили выборку на уникальных подвыборок, то то, что вы называете проверкой удержания, на самом деле просто в 2 раза ( = 2 ) перекрестная проверка. Перекрестная проверка - это всего лишь инструмент для оценки частоты ошибок вне выборки (или обобщения) конкретной модели. Необходимость оценки частоты ошибок вне выборки является распространенной и породила целую литературу. См. Для начала главу 7 ESL .н н к кknnkk

Итак, чтобы ответить на вопросы:

  1. Зачем об этом говорить? Педагогически. Стоит рассматривать валидацию как особый - и только иногда полезный - случай весьма полезного в других отношениях метода с множеством вариантов.

  2. Зачем это использовать? Если одному из них повезло иметь колоссальный набор данных (с точки зрения наблюдений, ), то имеет смысл разделить данные пополам - обучение на одну половину и тестирование на другую - имеет смысл. Это имеет смысл в вычислительных целях, поскольку все, что требуется, - это подгонка один раз и прогнозирование один раз (а не раз). И это имеет смысл с точки зрения оценки больших выборок, поскольку у вас есть масса наблюдений, чтобы соответствовать вашей модели.кnk

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

Зоэ Кларк
источник
13
Я не думаю, что задержка - это то же самое, что двухкратная проверка, потому что в двухкратной проверке вы подгоните две модели, а затем усредните ошибки по двум наборам удерживающих.
Алекс
8

Если ваша процедура выбора и подгонки модели не может быть закодирована, потому что она субъективна или частично такова - с привлечением к просмотру графиков и т. П. - может быть лучшее, что вы можете сделать. (Я полагаю, вы могли бы использовать что-то вроде Mechanical Turk в каждом сгибе резюме, хотя я никогда не слышал о том, что это делается.)

Scortchi - Восстановить Монику
источник
6

Просто хотел добавить несколько простых рекомендаций, которые Эндрю Нг упомянул в нашем классе CS 229 в Стэнфорде относительно перекрестной проверки. Это практики, которым он следует в своей работе.

Пусть будет количеством выборок в вашем наборе данных. Если используйте перекрестную проверку Leave-one-out.м 20mm20

Если используйте перекрестную проверку в k-кратном размере с относительно большим значением учитывая вычислительные затраты.k m20<m100km

Если используйте регулярную перекрестную проверку в k-кратном порядке . Или, если вычислительной мощности недостаточно и , используйте перекрестную проверку с удержанием.( к = 5 ) м > 10 , 000100<m1,000,000(k=5)m>10,000

Если использует перекрестную проверку без удержания, но при наличии вычислительной мощности вы можете использовать перекрестную проверку в k-кратном размере если вы хотите выжать эту дополнительную производительность из вашей модели.( к = 5 )m1,000,000(k=5)

Изопикнальное колебание
источник
5

Краткий ответ:

Я бы рекомендовал всегда использовать CV как минимум с для:k=5

  • сложные модели
  • окончательные результаты, которые должны придерживаться ограничений действительности

Вы можете расслабить это для:

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

Некоторые из вас упоминали, что программирование этого на R может быть проблемой. Я рекомендую вам взглянуть на пакет "mlr" . Он объединяет различные пакеты в единый интерфейс, а также предоставляет действительно продвинутые методы повторной выборки и оценки производительности.

Посмотрите: http://mlr-org.github.io/mlr-tutorial/release/html/resample/ и: http://mlr-org.github.io/mlr-tutorial/release/html/performance/ index.htm

Еще одно объяснение - что CV делает на самом деле, так это нарушает компромиссную разницу:

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

У Holdout есть проблема с уклоном и дисперсией:

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

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

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

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

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

gcsk
источник
3

Все это полезные комментарии. Просто примите еще один во внимание. Когда у вас достаточно данных, использование Hold-Out - это способ оценки конкретной модели (конкретной модели SVM, конкретной модели CART и т. Д.), Тогда как при использовании других процедур перекрестной проверки вы оцениваете методологии (в ваших проблемных условиях). ), а не модели (методология SVM, методология CART и т. д.).

Надеюсь, это полезно!

Индо
источник
3

Моделирование со временем серьезных данных является исключением для меня. K fold не может работать в некоторых случаях, когда вам нужно предсказать будущее на основе предыдущих данных. Наборы тестов должны быть будущими данными, и вы никогда не сможете прикоснуться к ним на этапе обучения. ex прогнозирование продажи или фондового рынка. Продержаться полезно в этих случаях.

Цянь Лю
источник
Время серьезных данных?
nbro
3

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

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

Лично я предпочитаю получать данные проверки по всему набору данных, поэтому вместо того, чтобы брать один 10% -ный фрагмент из заголовка или хвоста данных, я беру 2% из 5 точек в наборе данных. Это делает данные проверки немного более представительными для данных в целом.

BigBadMe
источник
Несмотря на то, что это старый вопрос и новый ответ, я голосую за это, потому что это оспаривает беспочвенное утверждение, что «K-кратность более точна, но НЕМНОГО более затратна в вычислительном отношении», которую другие ответы игнорировали или пропускали слишком быстро.
Лаконичный
0

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

Элахе Насериан
источник
2
В этом случае вы должны сделать предварительную проверку.
Нил Г