У меня есть набор данных с N ~ 5000 и около 1/2 отсутствует по крайней мере по одной важной переменной. Основным аналитическим методом будет пропорциональный риск Кокса.
Я планирую использовать множественное вменение. Я также буду разделяться на поезд и тестовый набор.
Должен ли я разделять данные и затем вменять отдельно, или вменять, а затем делить?
Если это имеет значение, я буду использовать PROC MI
в SAS
.
cross-validation
survival
multiple-imputation
train
Питер Флом - Восстановить Монику
источник
источник
Ответы:
Вы должны разделить перед предварительной обработкой или вменением.
Разделение между обучением и тестовым набором является попыткой воспроизвести ситуацию, в которой вы располагаете прошлой информацией и строите модель, которую вы будете тестировать на будущей, пока еще неизвестной информации: обучающий набор занимает место прошлого, а тестовый набор занимает место будущего, так что вы можете протестировать свою обученную модель только один раз.
Помня прошлую / будущую аналогию, это означает, что все, что вы делаете для предварительной обработки или обработки ваших данных, например, ввод пропущенных значений, вы должны делать только в обучающем наборе. Затем вы можете вспомнить, что вы сделали со своим тренировочным набором, если ваш тестовый набор также нуждается в предварительной обработке или импутации, так что вы делаете это одинаково для обоих наборов.
Добавлено из комментариев: если вы используете тестовые данные для воздействия на тренировочные данные, то тестовые данные используются для построения вашей модели, поэтому они перестают быть тестовыми данными и не будут обеспечивать честный тест вашей модели. Вы рискуете переобучить, и это было препятствием, что вы сначала разделили тестовые данные
источник
Я думаю, тебе лучше разделиться, прежде чем делать вменение. Например, вы можете вменять пропущенные значения в среднее значение столбца. В этом случае, если вы сначала вмените набор данных Train + valid, а затем разделите его, то вы использовали набор данных проверки до того, как построили свою модель, и именно так возникает проблема утечки данных.
Но вы можете спросить, если я вменю после разделения, это может быть слишком утомительно, когда мне нужно сделать перекрестную проверку. Для этого я предлагаю использовать конвейер sklearn. Это действительно упрощает ваш код и снижает вероятность ошибки. Смотрите Трубопровод
источник
Просто добавив к вышесказанному, я также предпочел бы разделение перед вменением или любой тип предварительной обработки. Ничто из того, что вы делаете с тренировочными данными, не должно основываться на данных теста (аналогия в том, что будущее не должно влиять на прошлое). Затем вы можете вспомнить, что вы сделали со своим тренировочным набором, если ваш набор тестов также требует предварительной обработки или вменения, так что вы делаете это одинаково для обоих наборов (аналогия в том, что вы можете использовать прошлое, чтобы помочь предсказать будущее) ,
Если вы используете тестовые данные для какого-либо влияния на тренировочные данные, то тестовые данные используются для построения вашей модели, поэтому они перестают быть тестовыми данными и не обеспечивают достоверного теста вашей модели. Вы рискуете перенастроить, и это было обескураживающим, что вы сначала разделили тестовые данные!
Я думаю, что набор кареток в r очень полезен в этой обстановке. В частности, я обнаружил, что этот пост чрезвычайно полезен https://topepo.github.io/caret/model-training-and-tuning.html
источник