Імпутація до або після розбиття на поїзд та випробування?


18

У мене є набір даних з N ~ 5000 і близько 1/2 відсутня принаймні одна важлива змінна. Основним аналітичним методом будуть пропорційні небезпеки Кокса.

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

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

Якщо це має значення, я буду використовувати PROC MIв SAS.


2
50% відсутніх значень для вирішальної змінної? Тьфу. Замість того, щоб замітати, чому б не створити змінну категорії "Відсутня"?
RobertF

Жодна змінна не має 50%, але приблизно 50% відсутні як мінімум на одній. Крім того, вони є безперервними, тому "відсутні" будуть зіпсувати речі.
Пітер Флом - Відновити Моніку

Ага. Я нервую за допомогою імпутації. Мені цікаво, в чому полягає безперервна змінна з 50% значеннями, перерахованими на конвертування. змінна на категоричну з категорією "Відсутній" плюс достатня кількість бункерів для фіксації поведінки неіснуючих значень?
RobertF

Мені не подобається бінінг безперервних змінних.
Пітер Флом - Відновити Моніку

Відповіді:


20

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

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

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

Додано з коментарів: якщо ви використовуєте дані тестування для впливу на дані тренувань, то дані тестування використовуються для побудови вашої моделі, тому вони перестають бути тестовими даними та не дадуть справедливого тесту вашої моделі. Ви ризикуєте переоцінити, і це було змусити це відмовитись, перш за все, від даних тестів


Коли ви говорите "ви робите це однаково на обох наборах", ви маєте на увазі: "використовувати один і той же метод для імпультування відсутніх даних у тестовому наборі, але НЕ однакових даних"?
timwiz

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

Якщо ви "вільні включити те, що ви дізналися з навчальних даних", то чим це відрізняється від того, що ви просто не розщеплювались перед введенням даних .
timwiz

1
@colorlace: саме те, що я говорю, саме про те, що ви робите з навчальними даними, не слід повідомляти дані тестів (аналогія, що майбутнє не повинно впливати на минуле), але що ви робите з тестовими даними можна повідомити дані тренувань (аналогія полягає в тому, що ви можете використовувати минуле, щоб передбачити майбутнє)
Генрі

1
@colorlace - якщо ви використовуєте дані тестування для впливу на дані тренувань, то дані тестування використовуються для побудови вашої моделі, тому вони перестають бути тестовими даними та не дадуть справедливого тесту вашої моделі. Ви ризикуєте переоцінити, і це було змусити вас відмовитись, перш за все, від тестових даних
Генрі

1

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

Але ви можете запитати, якщо я замінюю після розщеплення, це може бути занадто нудно, коли мені потрібно зробити перехресну перевірку. Моя пропозиція для цього полягає в використанні трубопроводу sklearn. Це дійсно спрощує ваш код, а також зменшує шанс помилки. Див. Трубопровід


0

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

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

Я думаю, що пакунок з каре в r дуже корисний у цій обстановці. Я визначив, що ця публікація є надзвичайно корисною https://topepo.github.io/caret/model-training-and-tuning.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.