sklearn erreur ValueError: Entrée contient NaN, infinity ou une valeur trop grande pour dtype('float64')
Je suis en utilisant sklearn et ayant un problème avec l'affinité de propagation. J'ai construit une matrice d'entrée et je reçois l'erreur suivante.
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
J'ai couru
np.isnan(mat.any()) #and gets False
np.isfinite(mat.all()) #and gets True
J'ai essayé d'utiliser
mat[np.isfinite(mat) == True] = 0
pour éliminer l'infini de valeurs, mais cela ne fonctionne pas non plus.
Que puis-je faire pour se débarrasser de l'infini de valeurs dans ma matrice, de sorte que je peux utiliser l'affinité algorithme de propagation?
Je suis à l'aide de l'anaconda et python 2.7.9.
- Je vais voter pour fermer cette, comme l'auteur le dit lui-même que ses données n'était pas valide et si tout indiquait-il, il n'a pas de valider -- l'équivalent des données à une faute de frappe, qui est un de clôture de la raison.
- J'ai eu ce même problème avec mon jeu de données. En fin de compte: données d'erreur, pas un scikit learn bug. La plupart des réponses ci-dessous sont utiles, mais trompeuses. Vérifier vérifier vérifier vos données, assurez-vous que lors de la conversion à
float64
il est à la fois fini et pasnan
. Le message d'erreur est apt - ce n'est presque certainement la question pour quelqu'un qui se trouve ici. - Pour l'enregistrement et +1 pour @Owen, vérifiez votre saisie de données et assurez-vous que vous n'avez aucune valeur manquante dans une ligne ou une grille. Vous pouvez utiliser le Imputer la classe pour éviter ce problème.
Vous devez vous connecter pour publier un commentaire.
Ce qui pourrait se produire à l'intérieur de scikit, et cela dépend de ce que vous faites. Je vous recommande la lecture de la documentation pour les fonctions que vous êtes en utilisant. Vous utilisez peut-être un qui dépend par exemple sur votre matrice étant définie positive et ne remplissant pas ce critère.
MODIFIER: Comment ai-je pu rater ça:
est évidemment faux. Le droit serait:
et
Vous voulez vérifier si tout de l'élément est de NaN, et pas de savoir si la valeur de retour de la
any
fonction est un nombre...J'ai eu le même message d'erreur lors de l'utilisation de sklearn avec pandas. Ma solution est de réinitialiser l'index de ma dataframe
df
avant l'exécution de tout sklearn code:J'ai rencontré ce problème plusieurs fois, lorsque j'ai enlevé certaines entrées dans mon
df
, commeLes Dimensions de mon tableau d'entrée ont été faussées, comme mon entrée csv a des espaces vides.
dropna
pandas.pydata.org/pandas-docs/stable/generated/...C'est la case sur laquelle il tombe en panne:
Qui dit
Donc, assurez-vous que vous avez non des valeurs NaN dans votre entrée. Et toutes ces valeurs sont en fait des valeurs flottantes. Aucune des valeurs doit être Inf soit.
C'est ma fonction (basé sur cette) pour nettoyer l'ensemble de données de la
nan
,Inf
, et les cellules manquantes (pour biaisée ensembles de données):dropna
puis une deuxième fois lors de la suppression d'inf.Avec cette version de python 3:
En regardant les détails de l'erreur, j'ai trouvé les lignes de codes l'origine de l'échec:
À partir de cela, j'ai été en mesure d'extraire la bonne façon de tester ce qui se passait avec mes données en utilisant le même test qui échoue donnée par le message d'erreur:
np.isfinite(X)
Puis, avec un rapide et sale de la boucle, j'ai pu constater que mes données comprend en effet
nans
:Maintenant tout ce que j'ai à faire est de supprimer les valeurs de ces indices.
J'ai eu l'erreur après avoir essayé de sélectionner un sous-ensemble de lignes:
S'avère que
my_index
contenait des valeurs qui n'étaient pas contenues dansdf.index
, de sorte que le réindexer la fonction inséré quelques nouvelles lignes et de les remplir avec denan
.J'ai eu la même erreur, et dans mon cas, X et y ont été dataframes j'ai donc dû les convertir pour des matrices d'abord:
j'ai eu le même message d'erreur. il a travaillé avec
df.fillna(-99999, inplace=True)
avant de procéder à tout remplacement, substitution, etcnan
valeurs; vous devriez le trouver.Dans mon cas, le problème est que beaucoup de scikit retour des fonctions de numpy tableaux, qui sont dépourvues de pandas index. Donc il y avait un indice de discordance lorsque j'ai utilisé ces tableaux numpy pour construire de nouvelles DataFrames et puis j'ai essayé de les mélanger avec les données d'origine.
essayer
Si la somme de vos données est l'infini (plus que le max float valeur qui est 3.402823 e+38), vous obtiendrez cette erreur.
voir le _assert_all_finite fonction dans validation.py à partir de la scikit code source: