J'ai un ensemble de données avec N ~ 5000 et environ 1/2 manquant sur au moins une variable importante. La principale méthode d'analyse sera les risques proportionnels de Cox.
Je prévois d'utiliser l'imputation multiple. Je vais également me séparer en train et en test.
Dois-je diviser les données puis imputer séparément, ou imputer puis diviser?
Si cela importe, je vais utiliser PROC MI
dans SAS
.
cross-validation
survival
multiple-imputation
train
Peter Flom - Réintégrer Monica
la source
la source
Réponses:
Vous devez diviser avant le prétraitement ou l'imputation.
La division entre la formation et l'ensemble de test est une tentative de reproduire la situation où vous avez des informations passées et construisez un modèle que vous testerez sur des informations futures encore inconnues: l'ensemble de formation prend la place du passé et l'ensemble de test prend l'endroit du futur, donc vous ne pourrez tester votre modèle formé qu'une seule fois.
En gardant à l'esprit l'analogie passée / future, cela signifie que tout ce que vous faites pour prétraiter ou traiter vos données, comme imputer des valeurs manquantes, vous devez le faire uniquement sur l'ensemble de formation. Vous pouvez ensuite vous souvenir de ce que vous avez fait à votre ensemble d'entraînement si votre ensemble de test doit également être prétraité ou imputé, de sorte que vous le fassiez de la même manière sur les deux ensembles.
Ajouté à partir des commentaires: si vous utilisez les données de test pour affecter les données de formation, alors les données de test sont utilisées pour construire votre modèle, donc elles cessent d'être des données de test et ne fourniront pas un test équitable de votre modèle. Vous risquez de sur-adapter, et c'était pour décourager cela que vous avez séparé les données de test en premier lieu
la source
Je pense que vous feriez mieux de vous séparer avant de procéder à l'imputation. Par exemple, vous souhaiterez peut-être imputer des valeurs manquantes avec la moyenne des colonnes. Dans ce cas, si vous imputez d'abord avec train + ensemble de données valide et fractionnez ensuite, vous avez utilisé un ensemble de données de validation avant de construire votre modèle, c'est ainsi qu'un problème de fuite de données apparaît.
Mais vous pourriez vous demander, si j'impute après le fractionnement, cela peut être trop fastidieux lorsque je dois faire une validation croisée. Ma suggestion pour cela est d'utiliser le pipeline sklearn. Cela simplifie vraiment votre code et réduit les risques d'erreur. Voir Pipeline
la source
Juste pour ajouter à ce qui précède, je préférerais également le fractionnement avant l'imputation ou tout autre type de prétraitement. Rien de ce que vous faites avec les données d'entraînement ne devrait être informé par les données du test (l'analogie est que l'avenir ne devrait pas affecter le passé). Vous pouvez ensuite vous souvenir de ce que vous avez fait à votre ensemble d'entraînement si votre ensemble de test doit également être prétraité ou imputé, de sorte que vous le fassiez de la même manière sur les deux ensembles (l'analogie est que vous pouvez utiliser le passé pour aider à prédire l'avenir) .
Si vous utilisez les données de test pour affecter les données de formation de quelque manière que ce soit, alors les données de test sont utilisées pour construire votre modèle, elles cessent donc d'être des données de test et ne fourniront pas un test équitable de votre modèle. Vous risquez un ajustement excessif, et c'est pour décourager cela que vous avez séparé les données de test en premier lieu!
Je pense que le paquet caret dans r est très utile dans ce cadre. J'ai trouvé que cet article était extrêmement utile https://topepo.github.io/caret/model-training-and-tuning.html
la source