Ich benutze sklearn und habe ein Problem mit der Affinitätsausbreitung. Ich habe eine Eingabematrix erstellt und erhalte immer wieder den folgenden Fehler.
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
ich bin gerannt
np.isnan(mat.any()) #and gets False
np.isfinite(mat.all()) #and gets True
Ich habe es versucht
mat[np.isfinite(mat) == True] = 0
die unendlichen Werte zu entfernen, aber dies funktionierte auch nicht. Was kann ich tun, um die unendlichen Werte in meiner Matrix zu entfernen, damit ich den Affinitätsausbreitungsalgorithmus verwenden kann?
Ich benutze Anaconda und Python 2.7.9.
python
python-2.7
scikit-learn
valueerror
Ethan Waldie
quelle
quelle
float64
sowohl endlich als auch nicht endlich sindnan
. Die Fehlermeldung ist passend - dies ist mit ziemlicher Sicherheit das Problem für jeden, der sich hier befindet.Antworten:
Dies kann in Scikit passieren und hängt davon ab, was Sie tun. Ich empfehle, die Dokumentation zu den von Ihnen verwendeten Funktionen zu lesen. Möglicherweise verwenden Sie eine, die z. B. davon abhängt, dass Ihre Matrix eindeutig positiv ist und diese Kriterien nicht erfüllt.
EDIT : Wie könnte ich das vermissen:
ist offensichtlich falsch. Richtig wäre:
und
Sie möchten überprüfen, ob eines der Elemente NaN ist und nicht, ob der Rückgabewert der
any
Funktion eine Zahl ist ...quelle
Ich habe die gleiche Fehlermeldung erhalten, wenn ich sklearn mit Pandas verwende . Meine Lösung besteht darin, den Index meines Datenrahmens zurückzusetzen,
df
bevor Sie sklearn-Code ausführen:Ich bin auf dieses Problem oft gestoßen, als ich einige Einträge in meinem entfernt habe
df
, zquelle
Dies ist meine Funktion (basierend auf diesem ) den Datensatz von zu reinigen
nan
,Inf
und fehlenden Zellen (für schiefe Datensätze):quelle
dropna
dann ein zweites Mal beim Ablegen von inf.Die Dimensionen meines Eingabearrays waren verzerrt, da meine Eingabe-CSV Leerzeichen hatte.
quelle
dropna
pandas.pydata.org/pandas-docs/stable/generated/…Dies ist die Prüfung, bei der es fehlschlägt:
Was sagt
Stellen Sie also sicher, dass Ihre Eingabe Nicht-NaN-Werte enthält. Und all diese Werte sind tatsächlich Float-Werte. Keiner der Werte sollte Inf sein.
quelle
Mit dieser Version von Python 3:
Als ich mir die Details des Fehlers ansah, fand ich die Codezeilen, die den Fehler verursachten:
Daraus konnte ich den richtigen Weg extrahieren, um zu testen, was mit meinen Daten vor sich ging, indem ich denselben Test verwendete, der durch die Fehlermeldung fehlschlägt:
np.isfinite(X)
Dann konnte ich mit einer schnellen und schmutzigen Schleife feststellen, dass meine Daten tatsächlich Folgendes enthalten
nans
:Jetzt muss ich nur noch die Werte an diesen Indizes entfernen.
quelle
Ich hatte den Fehler, nachdem ich versucht hatte, eine Teilmenge von Zeilen auszuwählen:
Es stellte sich heraus, dass
my_index
Werte enthalten waren, die nicht in enthaltendf.index
waren. Daher fügte die Neuindizierungsfunktion einige neue Zeilen ein und füllte sie mitnan
.quelle
In den meisten Fällen wird dieses Problem gelöst, wenn unendliche und Nullwerte entfernt werden.
unendliche Werte loswerden.
Entfernen Sie Nullwerte nach Ihren Wünschen, bestimmte Werte wie 999, Mittelwert, oder erstellen Sie eine eigene Funktion, um fehlende Werte zu unterstellen
quelle
Ich hatte den gleichen Fehler und in meinem Fall waren X und y Datenrahmen, sodass ich sie zuerst in Matrizen konvertieren musste:
Bearbeiten: Die ursprünglich vorgeschlagene X.as_matrix () ist veraltet
quelle
Ich habe den gleichen Fehler. Es hat funktioniert,
df.fillna(-99999, inplace=True)
bevor es ersetzt, ersetzt usw. wurdequelle
nan
Werte enthält . du solltest es finden.In meinem Fall bestand das Problem darin, dass viele Scikit-Funktionen numpy Arrays zurückgeben, die keinen Pandas-Index haben. Es gab also eine Indexinkongruenz, als ich diese Numpy-Arrays zum Erstellen neuer DataFrames verwendete und dann versuchte, sie mit den Originaldaten zu mischen.
quelle
Entfernen Sie alle unendlichen Werte:
(und durch min oder max für diese Spalte ersetzen)
quelle
Versuchen
Wenn die Summe Ihrer Daten unendlich ist (größer als der maximale Gleitkommawert von 3,402823e + 38), wird dieser Fehler angezeigt.
Siehe die Funktion _assert_all_finite in validation.py aus dem Scikit-Quellcode:
quelle