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


196

Существует ли практическое правило о том, как лучше разделить данные на обучающие и проверочные наборы? Рекомендуется ли разделение на 50/50? Или есть явные преимущества наличия большего количества обучающих данных относительно проверочных данных (или наоборот)? Или этот выбор в значительной степени зависит от приложения?

Я в основном использовал 80% / 20% данных обучения и проверки, соответственно, но я выбрал это разделение без какой-либо принципиальной причины. Может ли кто-нибудь, кто более опытный в машинном обучении, посоветовать мне?


Если у вас нет слишком большого объема данных, рассмотрите en.wikipedia.org/wiki/Resampling_(statistics)#Jackknife
nair.ashvin

Ответы:


221

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

Если у вас есть в общей сложности 100 экземпляров, вы, вероятно, застряли с перекрестной проверкой, поскольку ни один отдельный сплит не даст вам удовлетворительного отклонения в ваших оценках. Если у вас 100 000 экземпляров, на самом деле не имеет значения, выберете ли вы 80:20 или 90:10 (на самом деле вы можете использовать меньше обучающих данных, если ваш метод особенно требователен к вычислительным ресурсам).

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

  1. Разделите ваши данные на обучение и тестирование (80/20 действительно хорошая отправная точка)
  2. Разделите данные обучения на обучение и валидацию (опять же, 80/20 - это справедливое разделение).
  3. Произведите выборку случайных выборок ваших тренировочных данных, обучите их этим классификаторам и запишите результативность в проверочный набор
  4. Попробуйте серию прогонов с различными объемами обучающих данных: случайным образом выберите 20% из них, скажем, 10 раз и наблюдайте за производительностью данных проверки, затем сделайте то же самое с 40%, 60%, 80%. Вы должны увидеть как более высокую производительность с большим количеством данных, так и более низкую дисперсию между различными случайными выборками
  5. Чтобы получить контроль над дисперсией из-за размера тестовых данных, выполните ту же процедуру в обратном порядке. Тренируйтесь на всех ваших тренировочных данных, затем несколько раз случайным образом отбирайте процент ваших проверочных данных и наблюдайте за производительностью. Теперь вы должны обнаружить, что средняя производительность для небольших выборок ваших данных проверки примерно равна производительности всех данных проверки, но разница значительно выше с меньшим количеством тестовых образцов.

Спасибо, это тоже очень полезно! Я дам ему попробовать. К вашему сведению, у меня есть около 6000 экземпляров данных обучения. Я использую SVM, так что производительность является своего рода проблемой.
Робиннес

1
FWIW, разница в производительности может быть рассчитана путем классификации всех экземпляров один раз, оценки решений относительно того, являются ли они правильными или нет, а затем выборки этих решений вместо тестовых экземпляров для получения результатов использования различных размеров набора тестов
Бен Аллисон

И 6000 экземпляров должно быть достаточно, чтобы разница между использованием 10% или 20% для тестирования не была бы такой большой (вы можете подтвердить это, используя метод, который я описываю)
Бен Аллисон,

1
Привет еще раз. Я немного запутался в пункте № 5. Вы сказали: «затем случайным образом отбирайте процент ваших данных проверки несколько раз». Вы хотели увидеть тестовые данные? Если я правильно понимаю, я должен сначала разделить свои данные на наборы тренировочных и тестовых данных, а затем разделить часть моего тренировочного набора данных на набор данных для проверки. Итак, на шаге 5, если я измеряю дисперсию моих тестовых данных, не должен ли я случайным образом выбирать популяции из моих тестовых данных? Или я что-то упустил?
Робиннес

2
Дело в том , что в то время как вы играете вокруг с параметрами, наблюдая результаты изменения вещей, вы должны использовать ваши проверки данных для тестирования на. Если вы начнете просматривать свои тестовые данные и выбирать стратегии на основе того, что дает вам наивысший балл, вы получите завышенное представление о производительности вашего метода. Когда все ваши параметры устанавливаются и принимаются решения, а затем работать на ваших тестовых данных. Это позволяет вам узнать, какую производительность вы получите от действительно новых ненаблюдаемых данных (что, вероятно, вас и интересует!)
Бен Аллисон,

54

Вы будете удивлены, узнав, что 80/20 - это довольно распространенное соотношение, часто называемое принципом Парето . Обычно это безопасная ставка, если вы используете это соотношение.

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

Было проведено некоторое исследование того, каково правильное соотношение между обучающим набором и проверочным набором :

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

В своем заключении они указывают формулу:

Отношение проверки (v) к обучающему набору (t), отношение размеров v / t, масштабируется как ln (N / h-max), где N - количество семейств распознавателей, а h-max - наибольшая сложность этих семейств.

Что они подразумевают под сложностью:

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

Принимая первое практическое правило (т.е. набор проверки должен быть обратно пропорционален квадратному корню из числа свободных настраиваемых параметров), вы можете сделать вывод, что если у вас есть 32 настраиваемых параметра, то квадратный корень из 32 равен ~ 5,65, дробь должна быть 1 / 5,65 или 0,177 (об / т). Примерно 17,7% должны быть зарезервированы для проверки и 82,3% для обучения.


2
Документ, предназначенный для тех, у кого могут возникнуть проблемы с его загрузкой, как у меня (не знаю почему), гласит: «Закон масштабирования для размера коэффициента обучения, установленного для валидации» (I. Guyon, 1996, неопубликованный технический отчет, AT & T Bell Laboratories ).
лесовод

3
Имеет ли эмпирическое правило смысл? Если у вас есть два настраиваемых параметра, то коэффициент равен 0,77, что означает, что вы будете использовать 77% для проверки. Имхо проблема в бесплатном определении параметров. Для линейного SVM вы можете установить параметр штрафа C для ошибки, который равен одному параметру, но сложность выше Размер + 1 для SVM.
Рид Ричардс

4
Тогда мой размер теста должен быть 1, если у меня есть нейронная сеть ..?
YellowPillow

51

В прошлом году я прошла онлайн-курс обучения машинному оборудованию профессора Эндрю Нга. Его рекомендация была:

Обучение : 60%

Перекрестная проверка : 20%

Тестирование : 20%


20
coursera.org/learn/deep-neural-network/lecture/cxG1s/… in the modern big data era, where, for example, you might have a million examples in total, then the trend is that your dev (cross validation) and test sets have been becoming a much smaller percentage of the total. Он предполагает, что это может быть 99,5: 0,25: 0,25.
Нобу

9

Ну, вы должны подумать еще об одном.

Если у вас действительно большой набор данных, например, 1 000 000 примеров, разделение 80/10/10 может оказаться ненужным, потому что 10% = 100 000 примеров не нужно, чтобы сказать, что модель работает нормально.

Возможно, достаточно 99 / 0,5 / 0,5, потому что 5000 примеров могут представлять большую часть различий в данных, и вы можете легко сказать, что модель работает хорошо, основываясь на этих 5000 примеров в test и dev.


0,5% в наборе проверки может быть достаточно, но я бы сказал, что вы берете на себя большой и ненужный риск, поскольку не знаете, достаточно это или нет. Ваша тренировка может легко пойти не так, если вы используете слишком маленький набор валидации, но практически невозможно ошибиться с помощью большого набора валидации.
Бьорн Линдквист

2

Предположим, у вас меньше данных, я предлагаю попробовать 70%, 80% и 90% и провести тест, который дает лучший результат. В случае 90% есть вероятность, что при 10% тесте вы получите плохую точность.


1

Возможно, 63,2% / 36,8% - разумный выбор. Причина в том, что если у вас был общий размер выборки n и вы хотите случайную выборку с заменой (то есть повторную выборку, как в статистической начальной загрузке) n случаев из исходного n , вероятность выбора отдельного случая в повторная выборка будет приблизительно 0,632, при условии, что n не слишком мало, как объяснено здесь: https://stats.stackexchange.com/a/88993/16263

Для выборки с n = 250 вероятность выбора отдельного случая для повторной выборки до 4 цифр составляет 0,6329. Для выборки с n = 20000 вероятность составляет 0,6321.


1

Все зависит от имеющихся данных. Если у вас есть значительное количество данных, то 80/20 является хорошим выбором, как указано выше. Но если вы не проведете перекрестную проверку с разделением 50/50, это может помочь вам гораздо больше и помешать вам создать модель, которая переопределяет ваши тренировочные данные.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.