Різний набір тестів та розподіл навчальних наборів


15

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

Як я можу це зробити?


Випадкова недобірка, випадкова надмірність вибірки, кластерна перебірка відбору проб, інформація про вибірку: техніка надмірного відбору проб синтетичних меншин, модифікована техніка синтезування синтетичних меншин (MSMOTE) тощо.
Aditya,

Ви краще позначте одну з відповідей як "Прийнятий відповідь", якщо ви задоволені будь-яким із них.
TwinPenguins

Відповіді:


17

Велике питання, це те, що відоме в парадигмі машинного навчання як "коваріатний зсув", або "модельний дрейф", або "нестаціонарність" тощо.

Одне з найважливіших припущень, яке можна зробити для побудови моделі машинного навчання для майбутнього прогнозування, - це те, що небачені дані (тест) надходять з того ж розподілу, що і дані навчання! Однак насправді це досить просте припущення легко розбиває, і майбутні дані (його розповсюдження) змінюються з часом з багатьох причин. Для тих, хто, можливо, не знайомий з цією дуже важливою проблемою, рекомендую зазирнути сюди чи опублікувати !

Як на мене, ваше питання потрапляє до тієї ж категорії. Хоча у мене немає ідеального рішення (запропонований варіант), але я думаю, ви можете виглядати:

  • Ця публікація в блозі пропонує простий спосіб обробляти підвузливість даних тренувань за допомогою коду, наданого в Python!
  • Перевірте цей дослідний документ . Вони пропонують вирішити проблему шляхом збільшення ваги даних тренувань таким чином, щоб розподіл тренінгу був ближчим до розподілу тесту, використовуючи процедуру оцінювання значення Куллбека-Лейблера, що базується на теоремі " Кулбек-Лейблер ". Я не знаю, чи вони забезпечують реалізацію, або вона може бути легко реалізована, але я думаю, що це може бути корисним, оскільки це звучить професійним способом вирішити невідповідність розподілу.

Швидке оновлення (гарне рішення) : я знайшов реалізацію Python алгоритму KLIEP дослідницької роботи (остання точка) для пошуку цих ваг. Це швидше здається простим у використанні! В основному це повторно проводить тренування з використанням ваг (за допомогою алгоритму KLIEP), щоб припущення про подібний розподіл поїздів і тестів було максимально вірно.


5

Я хочу підпробовувати спостереження з навчального набору, який дуже нагадує тестовий набір.

Я не впевнений, що ви хочете це зробити. Вся мета полягає в тому, щоб навчити свій алгоритм, щоб він узагальнював добре невидимі дані.

Зазвичай слід адаптувати свої дані випробувань до своїх даних поїздів (наприклад, стандартизувати дані випробувань відповідно до даних поїздів ), а не навпаки. На практиці ви не знаєте своїх тестових даних.


3

Підсимуляція поїздів може бути не найкращим рішенням!

Відмінності між набором тесту / виконання та розподілом / функціями навчального набору дуже поширені в навчальних завданнях під контролем (це одна з причин, що такі змагання, як Kaggle, є складними). Ось чому ми кажемо, що минулий показник може бути (лише) використаний як керівництво для оцінки майбутнього результату, але він не вказує / гарантує його . Отже, узагальнюючі моделі завжди віддавали перевагу над налагодженими моделями, які можуть працювати дуже добре у поїзді (підпорядкуванні), але погано діють на небачені дані.

Хоча така різниця є нормальною, занадто великий розрив між минулим та майбутнім зразком можна назвати як приклади дрейфу концепцій, який є самим активним дослідницьким полем. З огляду на ваше запитання, я не можу судити про те, що ваш випадок - це нормальний випадок ML або концепція справді відбувається.

Це мої пропозиції:

  1. Навчіть ряд моделей з високою здатністю до узагальнення. Використовуючи вибірку завантажувального завантаження з вашого набору даних поїздів, ви можете легко обчислити зміщення та дисперсію компонентів помилок. Нагадаємо, що ви шукаєте модель з низькою дисперсією (де зміни даних мали б незначний вплив на її продуктивність), а не моделі з низькою ухилом, а з великою дисперсією (що може перевершити ваш навчальний (під) набір). Тепер ви можете вибрати найкращі алгоритми та оцінити їх за тестовим набором. Зауважте, що в тренувальний час ми не повинні дивитись на тестовий набір!

  2. Замість декількох випадкових понижувачів, шукайте стандартизацію / нормалізацію та вибір / інженерію функцій. Ці методи можуть бути практичними при вивченні більш загальних моделей. Наприклад, іноді діапазон доменних функцій може змінюватися з часом, тоді як форма розподілу (якою б вона не була) залишається майже однаковою (наприклад, той самий розподіл, який зміщується вліво або вправо). У такому випадку проста стандартизація (тобто зіставлення поїздів і випробувальних зразків у заздалегідь заданий простір, наприклад [0,1], за допомогою різних функцій відображення) може зменшити симптоми.

  3. Систематичне зменшення розміру може бути відповідним рішенням лише в тому випадку, якщо ви робите це на основі певних знань про проблему (не тільки з метою отримання кращої точності на тестовому наборі даних). Наприклад, ви можете знати, що деякі записи в даних поїздів відбираються з давніх-давен із далекого поля або під впливом конкретних факторів, які жоден з них не відбудеться в майбутньому (під час збору даних тесту). У такому випадку ви можете видалити ті зразки, які можуть бути неактуальними, оскільки ви впевнені, що подібних зразків ви не побачите в майбутньому (я маю на увазі, ви повинні мати обґрунтування вибору навчального підмножини, а не дивитися в тестовий набір, який насправді ви не маєте до нього доступу). У такому випадку я називаю це видаленням більше а не зниження часу.


1
p(у|х)

-1

Є гарний пакет в python (scikit learn)

http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

Ви можете підпробовувати свої спостереження з навчального набору за допомогою цього пакету.


1
Наскільки я розумію питання, розподіл поїздів / випробувань різний, що якщо не брати до уваги, то це призведе до того, що відомо "коваріатним зрушенням". Простий піддіапазон, що використовує "train_test_split" впровадження в scikit learn, згаданий тут, не враховуватиме розподіли під час спліт! Таким чином, відповідь не є актуальною.
TwinPenguins
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.