J'utilise sklearn et j'ai un problème avec la propagation d'affinité. J'ai construit une matrice d'entrée et j'obtiens toujours 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 supprimer les valeurs infinies mais cela n'a pas fonctionné non plus. Que puis-je faire pour me débarrasser des valeurs infinies dans ma matrice, afin de pouvoir utiliser l'algorithme de propagation d'affinité?
J'utilise anaconda et python 2.7.9.
python
python-2.7
scikit-learn
valueerror
Ethan Waldie
la source
la source
float64
elles sont à la fois finies et nonnan
. Le message d'erreur est approprié - c'est presque certainement le problème pour quiconque se trouve ici.Réponses:
Cela peut se produire dans scikit, et cela dépend de ce que vous faites. Je recommande de lire la documentation des fonctions que vous utilisez. Vous pourriez en utiliser un qui dépend par exemple du fait que votre matrice est définie positivement et ne remplit pas ces critères.
EDIT : Comment pourrais-je manquer ça:
est manifestement faux. Le droit serait:
et
Vous voulez vérifier si l'un des éléments est NaN, et non si la valeur de retour de la
any
fonction est un nombre ...la source
J'ai eu le même message d'erreur lors de l'utilisation de sklearn avec des pandas . Ma solution est de réinitialiser l'index de mon dataframe
df
avant d'exécuter un code sklearn:J'ai rencontré ce problème plusieurs fois lorsque j'ai supprimé certaines entrées de mon
df
, telles quela source
Ceci est ma fonction ( en fonction de ce ) pour nettoyer l'ensemble de données
nan
,Inf
et les cellules manquantes (pour les ensembles de données asymétriques):la source
dropna
puis une deuxième fois lors de la suppression d'inf.Les dimensions de mon tableau d'entrée étaient biaisées, car mon csv d'entrée avait des espaces vides.
la source
dropna
pandas.pydata.org/pandas-docs/stable/generatedC'est le contrôle sur lequel il échoue:
Qui dit
Assurez-vous donc que vous avez des valeurs non NaN dans votre entrée. Et toutes ces valeurs sont en fait des valeurs flottantes. Aucune des valeurs ne doit non plus être Inf.
la source
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 là, j'ai pu extraire la bonne façon de tester ce qui se passait avec mes données en utilisant le même test qui échoue donné par le message d'erreur:
np.isfinite(X)
Puis avec une boucle rapide et sale, j'ai pu constater que mes données contiennent bien
nans
:Il ne me reste plus qu'à supprimer les valeurs de ces index.
la source
J'ai eu l'erreur après avoir essayé de sélectionner un sous-ensemble de lignes:
Il s'avère qu'il
my_index
contenait des valeurs qui n'étaient pas contenues dansdf.index
, de sorte que la fonction de réindexation a inséré de nouvelles lignes et les a rempliesnan
.la source
Dans la plupart des cas, la suppression des valeurs infinies et nulles résout ce problème.
se débarrasser des valeurs infinies.
supprimez les valeurs nulles comme vous le souhaitez, une valeur spécifique telle que 999, signifie ou créez votre propre fonction pour imputer les valeurs manquantes
la source
J'ai eu la même erreur, et dans mon cas, X et y étaient des dataframes, j'ai donc dû d'abord les convertir en matrices:
Edit: Le X.as_matrix proposé à l' origine () est désapprouvée
la source
J'ai eu la même erreur. il a fonctionné avec
df.fillna(-99999, inplace=True)
avant de faire tout remplacement, substitution, etc.la source
nan
valeurs; vous devriez le trouver.Dans mon cas, le problème était que de nombreuses fonctions scikit renvoient des tableaux numpy, qui sont dépourvus d'index pandas. Il y avait donc une incompatibilité d'index lorsque j'ai utilisé ces tableaux numpy pour créer de nouveaux DataFrames, puis j'ai essayé de les mélanger avec les données d'origine.
la source
Supprimez toutes les valeurs infinies:
(et remplacez par min ou max pour cette colonne)
la source
essayer
Si la somme de vos données est infinie (supérieure à la valeur flottante maximale qui est 3.402823e + 38), vous obtiendrez cette erreur.
voir la fonction _assert_all_finite dans validation.py à partir du code source scikit:
la source