Używam sklearn i mam problem z propagacją powinowactwa. Zbudowałem macierz wejściową i ciągle otrzymuję następujący błąd.
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
Pobiegłem
np.isnan(mat.any()) #and gets False
np.isfinite(mat.all()) #and gets True
Próbowałem użyć
mat[np.isfinite(mat) == True] = 0
aby usunąć nieskończone wartości, ale to też nie zadziałało. Co mogę zrobić, aby pozbyć się nieskończonych wartości w mojej macierzy, aby móc korzystać z algorytmu propagacji powinowactwa?
Używam Anacondy i Pythona 2.7.9.
python
python-2.7
scikit-learn
valueerror
Ethan Waldie
źródło
źródło
float64
nie są one skończone i nienan
. Komunikat o błędzie jest trafny - jest to prawie na pewno problem dla każdego, kto się tutaj znajdzie.Odpowiedzi:
Może się to zdarzyć w scikit i to zależy od tego, co robisz. Zalecam przeczytanie dokumentacji funkcji, z których korzystasz. Być może używasz takiego, który zależy np. Od tego, czy twoja macierz jest określona pozytywnie i nie spełnia tych kryteriów.
EDYCJA : Jak mogłem tego przegapić:
jest oczywiście błędny. Racja byłaby:
i
Chcesz sprawdzić, czy którykolwiek z elementów ma wartość NaN, a nie, czy wartość zwracana przez
any
funkcję jest liczbą ...źródło
Mam ten sam komunikat o błędzie podczas korzystania sklearn z pand . Moim rozwiązaniem jest zresetowanie indeksu mojej ramki danych
df
przed uruchomieniem kodu sklearn:Wielokrotnie napotkałem ten problem, usuwając niektóre wpisy w moim
df
, na przykładźródło
To jest moja funkcja (w oparciu o to ), aby wyczyścić zestaw danych
nan
,Inf
oraz brak komórki (na skośnych zbiorów danych):źródło
dropna
następnie drugi raz przy upuszczaniu inf.Wymiary mojej tablicy wejściowej były wypaczone, ponieważ mój wejściowy plik csv miał puste spacje.
źródło
dropna
pandas.pydata.org/pandas-docs/stable/generated/…Oto test, w którym się nie udaje:
Który mówi
Więc upewnij się, że masz wartości inne niż NaN w swoim wejściu. Wszystkie te wartości są w rzeczywistości wartościami zmiennoprzecinkowymi. Żadna z wartości również nie powinna być Inf.
źródło
W tej wersji Pythona 3:
Patrząc na szczegóły błędu znalazłem linijki kodów powodujące awarię:
Z tego udało mi się wyodrębnić prawidłowy sposób sprawdzenia, co się dzieje z moimi danymi za pomocą tego samego testu, który kończy się niepowodzeniem w komunikacie o błędzie:
np.isfinite(X)
Następnie dzięki szybkiej i brudnej pętli byłem w stanie stwierdzić, że moje dane rzeczywiście zawierają
nans
:Teraz wszystko, co muszę zrobić, to usunąć wartości z tych indeksów.
źródło
Wystąpił błąd po próbie wybrania podzbioru wierszy:
Okazuje się, że
my_index
zawierał wartości, których nie było wdf.index
, więc funkcja reindex wstawiła kilka nowych wierszy i wypełniła jenan
.źródło
W większości przypadków pozbycie się wartości nieskończonych i zerowych rozwiązuje ten problem.
pozbyć się nieskończonych wartości.
pozbądź się wartości null tak, jak lubisz, konkretnej wartości, takiej jak 999, mean, lub utwórz własną funkcję, aby wstawić brakujące wartości
źródło
Miałem ten sam błąd, aw moim przypadku X i y były ramkami danych, więc musiałem najpierw przekonwertować je na macierze:
Edycja: pierwotnie sugerowano X.as_matrix () jest Nieaktualne
źródło
mam ten sam błąd. działał
df.fillna(-99999, inplace=True)
przed dokonaniem jakiejkolwiek wymiany, zamiany itpźródło
nan
wartości; powinieneś to znaleźć.W moim przypadku problem polegał na tym, że wiele funkcji scikit zwraca tablice numpy, które są pozbawione indeksu pand. Wystąpiła więc niezgodność indeksu, gdy użyłem tych tablic numpy do zbudowania nowych ramek DataFrames, a następnie próbowałem je wymieszać z oryginalnymi danymi.
źródło
Usuń wszystkie nieskończone wartości:
(i zamień na min lub max dla tej kolumny)
źródło
próbować
Jeśli suma twoich danych jest nieskończona (większa niż maksymalna wartość zmiennoprzecinkowa, która wynosi 3.402823e + 38), otrzymasz ten błąd.
zobacz funkcję _assert_all_finite w validation.py z kodu źródłowego scikit:
źródło