Dostałem ValueError podczas przewidywania danych testowych przy użyciu modelu RandomForest.
Mój kod:
clf = RandomForestClassifier(n_estimators=10, max_depth=6, n_jobs=1, verbose=2)
clf.fit(X_fit, y_fit)
df_test.fillna(df_test.mean())
X_test = df_test.values
y_pred = clf.predict(X_test)
Błąd:
ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
Jak znaleźć złe wartości w zestawie danych testowych? Ponadto nie chcę upuszczać tych rekordów, czy mogę je po prostu zastąpić średnią lub medianą?
Dzięki.
python
random-forest
pandas
Edamame
źródło
źródło
.rolling()
aby zastąpić brakującą wartość średnią wartością kroczącego okna. Jeśli chcesz czegoś bardziej niezawodnego, użyj modułu <b> missingpy </b>, możesz użyćMissForest
do przypisania losowego opartego na lasach.Zakładając, że
X_test
jest ramką danych pand, możesz użyć,DataFrame.fillna
aby zastąpić wartości NaN średnią:źródło
Aby każdy mógł się z tym spotkać, aby faktycznie zmodyfikować oryginał:
Aby zastąpić oryginał:
Aby sprawdzić, czy jesteś w kopii czy w widoku:
źródło
Nie zapomnij
Która zwraca maskę logiczną wskazującą np. Wartości.
Które zwracają wiersze, w których pojawił się np.nan. Następnie przez proste indeksowanie możesz oflagować wszystkie swoje punkty, np. Nan.
źródło
Napotkałem podobny problem i widziałem, że numpy obsługuje NaN i Inf inaczej.
Incase, jeśli twoje dane mają Inf, spróbuj tego:
To da krotkę lokalizacji miejsc, w których obecne są wartości NA.
Podaj, jeśli twoje dane mają Nan, spróbuj tego:
źródło
Nie zapomnij również sprawdzić wartości inf. Jedyne, co dla mnie zadziałało:
A nawet lepiej, jeśli używasz sklearn
Gdy liczba_funkcji będzie tablicą etykiet liczby_funkcji, na przykład:
źródło
Oto kod, w jaki sposób „Zamień NaN na zero, a nieskończoność na duże liczby skończone”. using numpy.nan_to_num .
Zobacz także odpowiedź Fernando .
źródło