Чи існує правило про те, як розділити набір даних на набори для навчання та перевірки?


194

Чи існує чітке правило, як найкраще розділити дані на набори для навчання та перевірки? Чи доцільний рівний 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. Щоб отримати ручку на дисперсію через розмір тестових даних, виконайте ту саму процедуру в зворотному порядку. Тренуйтеся за всіма вашими даними про навчання, а потім випадково вибирайте відсоток ваших даних про валідизацію кілька разів та спостерігайте за результатами. Тепер вам слід встановити, що середня ефективність на малих зразках ваших даних перевірки приблизно така ж, як і ефективність для всіх даних перевірки, але дисперсія набагато вища при меншій кількості тестових зразків

Дякую, це теж дуже корисно! Я спробую. FYI, у мене є близько 6000 випадків даних про навчання. Я використовую SVM, тому продуктивність є дещо проблемою.
robguinness

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 - найбільша складність цих сімей.

Що вони означають за складністю, це:

Кожна сім'я впізнавальних приладів характеризується своєю складністю, яка може або не може бути пов'язана з розмірністю ВК , довжиною опису, кількістю регульованих параметрів або іншими заходами складності.

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


2
Документ, для тих, у кого можуть виникнути проблеми із завантаженням його, як я (не знаю, чому), є: "Закон про масштабування для розміру співвідношення навчальних наборів для встановлення валідації" (І. Гайон, 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 прикладів у тесті та розробниках.


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.