Est-il possible d'avoir des valeurs manquantes dans scikit-learn? Comment devraient-ils être représentés? Je n'ai trouvé aucune documentation à ce sujet.
Les valeurs manquantes ne sont tout simplement pas prises en charge dans scikit-learn. La liste de diffusion a déjà fait l’objet de discussions à ce sujet, mais aucune tentative n’a été faite pour écrire du code permettant de les gérer.
Quoi que vous fassiez, not n'utilise pas NaN pour coder les valeurs manquantes, car de nombreux algorithmes refusent de traiter les échantillons contenant des NaN.
La réponse ci-dessus est obsolète; la dernière version de scikit-learn a une classe Imputer
qui effectue une imputation simple, par caractéristique, des valeurs manquantes. Vous pouvez alimenter des tableaux contenant des NaN pour que ceux-ci soient remplacés par la moyenne, la médiane ou le mode de l'entité correspondante.
J'aimerais pouvoir donner un exemple simple, mais j'ai constaté que RandomForestRegressor ne gère pas correctement NaN. Les performances ne cessent de se dégrader lors de l'ajout de fonctionnalités avec des pourcentages croissants de NaN. Les fonctionnalités qui ont "trop" de NaN sont complètement ignorées, même si les nan indiquent des informations très utiles.
Cela est dû au fait que l'algorithme jamais créera une scission sur la décision "isnan" ou "ismissing". L'algorithme ignorera une fonctionnalité à un niveau particulier de l'arborescence si cette fonctionnalité possède un seul NaN dans ce sous-ensemble d'échantillons. Toutefois, aux niveaux inférieurs de l'arborescence, lorsque la taille des échantillons est réduite, il devient plus probable qu'un sous-ensemble d'échantillons n'aura pas de NaN dans les valeurs d'une entité particulière et une division peut se produire sur cette entité.
J'ai essayé diverses techniques d'imputation pour résoudre le problème (remplacer par moyenne/médiane, prédire les valeurs manquantes à l'aide d'un modèle différent, etc.), mais les résultats ont été mitigés.
Au lieu de cela, voici ma solution: remplacer NaN par une seule valeur, évidemment hors de portée (comme -1.0). Cela permet à l’arbre de se scinder selon le critère "valeur inconnue vs valeur connue". Cependant, l'utilisation de telles valeurs hors limites a un effet secondaire étrange: des valeurs connues proches de la valeur hors limites peuvent être regroupées avec la valeur hors limites lorsque l'algorithme tente de trouver un bon emplacement. séparer. Par exemple, les 0 connus pourraient être regroupés avec les -1 utilisés pour remplacer les NaN. Ainsi, votre modèle peut changer selon que votre valeur hors limites est inférieure au minimum ou supérieure au maximum (il peut être intégré avec la valeur minimale ou la valeur maximale, respectivement). Cela peut aider ou non à la généralisation de la technique. Le résultat dépendra de la similitude du comportement des échantillons à valeur minimale ou maximale avec les échantillons à valeur NaN.
Remplacer une valeur manquante par une statistique moyenne/médiane/autre peut ne pas résoudre le problème car le fait que la valeur soit manquante peut être significatif. Par exemple, dans une enquête sur les caractéristiques physiques, un répondant peut ne pas définir sa taille s'il était gêné d'être anormalement grand ou petit. Cela impliquerait que les valeurs manquantes indiquent que le répondant était inhabituellement grand ou petit - l'opposé de la valeur médiane.
Ce qui est nécessaire est un modèle qui a une règle séparée pour les valeurs manquantes. Toute tentative de deviner la valeur manquante réduira probablement le pouvoir prédictif du modèle.
J'ai rencontré un problème très similaire lors de l'exécution de RandomForestRegressor on data. La présence de valeurs NA rejetait "nan" pour les prédictions. En parcourant plusieurs discussions, la documentation de Breiman recommande deux solutions pour les données continues et catégorielles, respectivement.
Selon Breiman, la nature aléatoire de l’algorithme et le nombre d’arbres permettront une correction sans trop d’effet sur la précision de la prédiction. Je pense que cela serait le cas si la présence des valeurs de NA est faible, une caractéristique contenant de nombreuses valeurs de NA ayant probablement un effet.
Orange est une autre bibliothèque d'apprentissage automatique python dotée d'installations dédiées à l'imputation. Je n'ai pas eu l'occasion de les utiliser, mais cela pourrait être bientôt, car les méthodes simples de remplacement de nan par des zéros, des moyennes ou des médianes posent des problèmes importants.
Je rencontre ce problème. Dans un cas pratique, j’ai trouvé un paquet dans R appelé missForest capable de gérer ce problème, imputant la valeur manquante et améliorant considérablement ma prédiction.
Au lieu de simplement remplacer les AN par des médianes ou des moyennes, missForest les remplace par une prédiction de ce qu’elle pense que la valeur manquante devrait être. Il effectue les prédictions à l'aide d'une forêt aléatoire formée sur les valeurs observées d'une matrice de données. Il peut être très lent sur un ensemble de données volumineux contenant un grand nombre de valeurs manquantes. Il y a donc un compromis pour cette méthode.
Une option similaire en python est predictive_imputer
Lorsque vous rencontrez des valeurs manquantes dans les entités en entrée, le premier ordre du jour n’est pas de savoir comment imputer les données manquantes. La question la plus importante est de savoir pourquoi vous devriez. Sauf si vous avez l'esprit clair et définitif sur la «vraie» réalité derrière les données, vous voudrez peut-être réduire l'envie d'imputer. Ce n'est pas à propos de technique ou de package en premier lieu.
Historiquement, nous avons eu recours à des méthodes telles que les arbres de décision, principalement parce que certains d’entre nous ont au moins estimé que le fait d’imputer une régression linéaire comme une régression linéaire, une régression logistique ou même NN est une distorsion suffisante pour que nous ayons des méthodes ne nécessitant pas d’imputation colonnes '. La soi-disant informatisation manquante. Ce qui devrait être un concept familier pour ceux qui connaissent, disons, le bayésien.
Si vous modélisez vraiment des données volumineuses, en plus d'en parler, vous aurez peut-être un grand nombre de colonnes. Dans les pratiques courantes d'extraction de caractéristiques telles que l'analyse de texte, vous pouvez très bien dire que le nombre de moyens manquants est égal à 0. C'est bien parce que vous connaissez la cause première. La réalité, en particulier face à des sources de données structurées, est que vous ne savez pas ou n'avez tout simplement pas le temps de connaître la cause première. Mais votre moteur est obligé de brancher une valeur, que ce soit le NAN ou d’autres espaces réservés que le moteur peut tolérer, je peux très bien affirmer que votre modèle est aussi bon que vous l’imputez, ce qui n’a aucun sens.
Une question intrigante est la suivante: si l’on laisse juger l’absence de sens en fonction de son contexte étroit dans le processus de scission, substitut du premier ou du deuxième degré, la foresterie rend-elle le jugement contextuel inutilisable, le contexte étant en soi une sélection aléatoire? Ceci, cependant, est un «meilleur» problème. Au moins, ça ne fait pas trop mal. Cela devrait certainement rendre inutile la préservation de la disparition.
En pratique, si vous avez un grand nombre d'entités en entrée, vous ne pourrez probablement pas avoir une "bonne" stratégie à imputer après tout. Du point de vue de l'imputation pure et simple, la meilleure pratique est tout sauf univariée. Ce qui est dans le concours de RF signifie assez bien d’utiliser le RF pour imputer avant de modéliser avec.
Par conséquent, à moins que quelqu'un me dise (ou nous dit) "nous ne pouvons pas faire cela", je pense que nous devrions permettre de reporter les "cellules" manquantes, en contournant entièrement le sujet de la "meilleure" imputation.