Я працюю над змаганнями з наукових даних, для яких розподіл мого тестового набору відрізняється від навчального набору. Я хочу підпробовувати спостереження з навчального набору, який дуже нагадує тестовий набір.
Як я можу це зробити?
Я працюю над змаганнями з наукових даних, для яких розподіл мого тестового набору відрізняється від навчального набору. Я хочу підпробовувати спостереження з навчального набору, який дуже нагадує тестовий набір.
Як я можу це зробити?
Відповіді:
Велике питання, це те, що відоме в парадигмі машинного навчання як "коваріатний зсув", або "модельний дрейф", або "нестаціонарність" тощо.
Одне з найважливіших припущень, яке можна зробити для побудови моделі машинного навчання для майбутнього прогнозування, - це те, що небачені дані (тест) надходять з того ж розподілу, що і дані навчання! Однак насправді це досить просте припущення легко розбиває, і майбутні дані (його розповсюдження) змінюються з часом з багатьох причин. Для тих, хто, можливо, не знайомий з цією дуже важливою проблемою, рекомендую зазирнути сюди чи опублікувати !
Як на мене, ваше питання потрапляє до тієї ж категорії. Хоча у мене немає ідеального рішення (запропонований варіант), але я думаю, ви можете виглядати:
Швидке оновлення (гарне рішення) : я знайшов реалізацію Python алгоритму KLIEP дослідницької роботи (остання точка) для пошуку цих ваг. Це швидше здається простим у використанні! В основному це повторно проводить тренування з використанням ваг (за допомогою алгоритму KLIEP), щоб припущення про подібний розподіл поїздів і тестів було максимально вірно.
Я хочу підпробовувати спостереження з навчального набору, який дуже нагадує тестовий набір.
Я не впевнений, що ви хочете це зробити. Вся мета полягає в тому, щоб навчити свій алгоритм, щоб він узагальнював добре невидимі дані.
Зазвичай слід адаптувати свої дані випробувань до своїх даних поїздів (наприклад, стандартизувати дані випробувань відповідно до даних поїздів ), а не навпаки. На практиці ви не знаєте своїх тестових даних.
Підсимуляція поїздів може бути не найкращим рішенням!
Відмінності між набором тесту / виконання та розподілом / функціями навчального набору дуже поширені в навчальних завданнях під контролем (це одна з причин, що такі змагання, як Kaggle, є складними). Ось чому ми кажемо, що минулий показник може бути (лише) використаний як керівництво для оцінки майбутнього результату, але він не вказує / гарантує його . Отже, узагальнюючі моделі завжди віддавали перевагу над налагодженими моделями, які можуть працювати дуже добре у поїзді (підпорядкуванні), але погано діють на небачені дані.
Хоча така різниця є нормальною, занадто великий розрив між минулим та майбутнім зразком можна назвати як приклади дрейфу концепцій, який є самим активним дослідницьким полем. З огляду на ваше запитання, я не можу судити про те, що ваш випадок - це нормальний випадок ML або концепція справді відбувається.
Це мої пропозиції:
Навчіть ряд моделей з високою здатністю до узагальнення. Використовуючи вибірку завантажувального завантаження з вашого набору даних поїздів, ви можете легко обчислити зміщення та дисперсію компонентів помилок. Нагадаємо, що ви шукаєте модель з низькою дисперсією (де зміни даних мали б незначний вплив на її продуктивність), а не моделі з низькою ухилом, а з великою дисперсією (що може перевершити ваш навчальний (під) набір). Тепер ви можете вибрати найкращі алгоритми та оцінити їх за тестовим набором. Зауважте, що в тренувальний час ми не повинні дивитись на тестовий набір!
Замість декількох випадкових понижувачів, шукайте стандартизацію / нормалізацію та вибір / інженерію функцій. Ці методи можуть бути практичними при вивченні більш загальних моделей. Наприклад, іноді діапазон доменних функцій може змінюватися з часом, тоді як форма розподілу (якою б вона не була) залишається майже однаковою (наприклад, той самий розподіл, який зміщується вліво або вправо). У такому випадку проста стандартизація (тобто зіставлення поїздів і випробувальних зразків у заздалегідь заданий простір, наприклад [0,1], за допомогою різних функцій відображення) може зменшити симптоми.
Систематичне зменшення розміру може бути відповідним рішенням лише в тому випадку, якщо ви робите це на основі певних знань про проблему (не тільки з метою отримання кращої точності на тестовому наборі даних). Наприклад, ви можете знати, що деякі записи в даних поїздів відбираються з давніх-давен із далекого поля або під впливом конкретних факторів, які жоден з них не відбудеться в майбутньому (під час збору даних тесту). У такому випадку ви можете видалити ті зразки, які можуть бути неактуальними, оскільки ви впевнені, що подібних зразків ви не побачите в майбутньому (я маю на увазі, ви повинні мати обґрунтування вибору навчального підмножини, а не дивитися в тестовий набір, який насправді ви не маєте до нього доступу). У такому випадку я називаю це видаленням більше а не зниження часу.
Є гарний пакет в python (scikit learn)
http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html
Ви можете підпробовувати свої спостереження з навчального набору за допомогою цього пакету.