Les valeurs manquantes dans scikits l'apprentissage de la machine
Est-il possible d'avoir des valeurs manquantes dans scikit-learn ? Comment doivent-ils être représentés? Je ne pouvais pas trouver toute la documentation à ce sujet.
Vous devez vous connecter pour publier un commentaire.
les valeurs Manquantes ne sont tout simplement pas pris en charge dans scikit-learn. Il y a eu discussion sur la liste de diffusion à ce sujet avant, mais ne tente pas d'écrire du code pour les gérer.Quoi que vous fassiez, ne pas utilisation NaN pour coder les valeurs manquantes, depuis un grand nombre d'algorithmes refuse de traiter les échantillons contenant des NaNs.La réponse ci-dessus est dépassée; la dernière version de scikit-learn a une classe
Imputer
qui n'simple, chaque fonctionnalité manquante de la valeur d'imputation. Vous pouvez nourrir des tableaux contenant des NaNs ces remplacées par la moyenne, la médiane ou le mode de la fonction correspondante.Pipeline
.0
peut faire le plus de sens, auquel cas on peut utiliserdf[column_name].fillna(0, inplace=True)
. Aussi pour une fonction comme lesmonthsSinceLastDelinquency
, imputer les valeurs manquantes d'une valeur en dehors de la plage valide de fait le plus de sens. Les arbres de décision peuvent faire des splits avec ce et les informations à partir de vos données sont préservées.Je souhaite que je pourrais donner un exemple simple, mais j'ai trouvé que RandomForestRegressor ne pas poignée de NaN est gracieusement. Performances s'aggraver de façon constante lors de l'ajout de fonctionnalités avec l'augmentation des pourcentages de NaN est. Les fonctionnalités qui ont "trop" de NaN sont complètement ignorés, même lorsque l'nan indiquent des informations très utiles.
C'est parce que l'algorithme jamais créer une scission sur la décision "isnan" ou "ismissing". L'algorithme ignorer une fonctionnalité à un niveau de l'arbre si cette fonction a un seul NaN dans ce sous-ensemble d'échantillons. Mais, à des niveaux inférieurs de l'arbre, lorsque la taille des échantillons est plus petit, il devient de plus en plus probable qu'un sous-ensemble d'échantillons de ne pas avoir de NaN dans une caractéristique particulière de valeurs, et un split peut se produire sur cette fonctionnalité.
J'ai essayé diverses techniques d'imputation pour traiter le problème (remplacer avec une moyenne/médiane, de 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, c'est ma solution: remplacer NaN avec un seul, évidemment en dehors de la plage de valeur (comme -1.0). Cela permet à l'arbre de se diviser sur les critères de "l'inconnue de la valeur vs connus-de la valeur". Cependant, il y a un côté étrange effet de l'utilisation de ces valeurs: les valeurs connues à proximité de la sortie-de-gamme de la valeur pourrait obtenir regroupés avec les hors-de-gamme de la valeur lorsque l'algorithme essaie de trouver un bon endroit pour split. Par exemple, 0 est pourrait obtenir confonde avec le -1 est utilisé pour remplacer le NaN est. Si votre modèle pourrait changer en fonction de si votre de-de-gamme de la valeur est inférieure au minimum ou si elle est supérieure à la valeur maximale (elle pourrait confonde avec la valeur minimale ou la valeur maximale, respectivement). Cela peut ou peut ne pas aider à la généralisation de la technique, le résultat dépendra de la façon similaire dans le comportement minimale ou maximale de la valeur des échantillons sont à NaN-valeur des échantillons.
Remplacer une valeur manquante, avec une moyenne/médiane/autres stat ne peut pas résoudre le problème dans le fait que la valeur est manquante peut être importante. Par exemple, dans une enquête sur les caractéristiques physiques de l'intimé ne peut mettre à leur hauteur, s'ils étaient gênés d'être anormalement grand ou petit. Cela impliquerait que les valeurs manquantes indiquer l'intimé a été exceptionnellement grande ou de petite à l'opposé de la valeur médiane.
Ce qui est nécessaire est un modèle qui a une règle distincte pour les valeurs manquantes, toute tentative de deviner la valeur manquante sera probablement de réduire le pouvoir prédictif du modèle.
J'ai rencontré très semblable question, lors de l'exécution de la RandomForestRegressor sur les données. La présence de NA les valeurs étaient à jeter "nan" pour les prédictions. À partir de défilement autour de plusieurs discussions, la Documentation par Breiman recommande deux solutions en continu des données catégorielles, respectivement.
ce (Données Continues)
(Données Catégorielles)
Selon Breiman la nature aléatoire de l'algorithme et le nombre d'arbres pour permettre la correction sans trop d'effet sur la précision de la prédiction. Ce que je sens ce serait le cas si la présence de NA les valeurs sont rares, une fonction contenant de nombreuses NA des valeurs, je pense, seront plus susceptibles d'avoir une incidence.
Orange est un autre python apprentissage de la machine de la bibliothèque qui dispose d'installations dédiées à l'imputation. Je n'ai pas eu la chance de les utiliser, mais peut-être bientôt, puisque les méthodes simples de remplacement nan avec des zéros, des moyennes ou médianes ont tous des problèmes importants.
Je ne rencontre ce problème. Dans un cas pratique, j'ai trouvé un paquet dans la R appelé missForest qui peuvent gérer ce problème, imputer les valeurs manquantes et améliorer grandement ma prédiction.
Au lieu de simplement remplacer le NAs avec la médiane ou de la moyenne, missForest les remplace par une prédiction de ce qu'il pense que la valeur manquante doit être. Il rend les prédictions à l'aide d'une forêt aléatoire de la formation sur les valeurs observées d'une matrice de données. Il peut courir très lent sur un grand ensemble de données qui contient un nombre élevé de valeurs manquantes. Il y a donc un compromis à faire pour cette méthode.
Une option similaire dans python est predictive_imputer
Lorsque vous exécutez dans des valeurs manquantes sur les fonctions de saisie, le premier ordre de l'entreprise n'est pas comment imputer le manque. La question la plus importante est POURQUOI DEVRIEZ-vous. À moins que vous ayez claire et définitive à l'esprit ce que la "vraie" réalité derrière les données, vous pouvez réduire envie de les imputer. Ce n'est pas sur la technique ou de lot dans la première place.
Historiquement, nous avons eu recours à l'arbre des méthodes comme les arbres de décision, principalement parce que certains d'entre nous au moins estimé que l'imputation de l'manquant à l'estimation de la régression comme la régression linéaire, la régression logistique, ou même NN est de distorsion assez que nous devrions avoir des méthodes qui ne nécessitent pas l'imputation de l'manquant " entre les colonnes. Le soi-disant manque le caractère informatif. Ce qui devrait être concept familier pour ceux qui sont familiers avec, disons, Bayésien.
Si vous êtes vraiment à la modélisation sur les données big data, en plus de parler, la chance est à vous de faire face à un grand nombre de colonnes. Dans la pratique courante de l'extraction de caractéristiques comme l'analyse de texte, vous pouvez très bien dire manquant de moyens count=0. C'est très bien parce que vous savez la cause racine. La réalité, surtout quand en face de sources de données structurées, c'est que vous ne connaissez pas ou n'ont tout simplement pas le temps de connaître la cause racine. Mais votre moteur de des forces pour brancher une valeur, que ce soit NAN ou d'autres détenteurs de place que le moteur peut tolérer, je peut très bien valoir votre modèle est aussi bon que vous imputer, qui n'a pas de sens.
Une question intéressante est : si nous laissons absence d'être jugé par ses proches contexte à l'intérieur du processus de fractionnement, de première ou de deuxième degré de substitution, ne boisement fait faire les contextuelle jugement théorique, parce que le contexte est en soi une sélection aléatoire? Ceci, cependant, est un "mieux" problème. Au moins il ne fait pas de mal que bien. Il ne devrait certainement faire de la préservation absence inutiles.
En pratique, si vous avez un grand nombre d'entités en entrée, vous ne pourrez probablement pas avoir une "bonne" stratégie pour redresser après tout. De la pure imputation point de vue, la meilleure pratique est rien mais univariée. Qui est dans le concours de RF assez de moyens pour utiliser la RF à imputer avant de modélisation avec elle.
Donc, à moins que quelqu'un me dit (ou nous), "nous ne sommes pas en mesure de le faire", je pense que nous devrions permettre le report manquant "cellules", entièrement en contournant le sujet de la façon dont "meilleur" pour imputer.