Eu obtive o ValueError ao prever dados de teste usando um modelo RandomForest.
Meu código:
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)
O erro:
ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
Como encontro os valores incorretos no conjunto de dados de teste? Além disso, não quero descartar esses registros. Posso apenas substituí-los pela média ou mediana?
Obrigado.
python
random-forest
pandas
Edamame
fonte
fonte
.rolling()
para substituir o valor ausente pelo valor médio de uma janela contínua. Se você quiser algo mais robusto, use o módulo <b> missingpy </b>,MissForest
para uma imputação baseada em floresta aleatória.Supondo que
X_test
seja um dataframe de pandas, você pode usarDataFrame.fillna
para substituir os valores de NaN pela média:fonte
Para alguém que esteja passando por isso, para modificar o original:
Para substituir o original:
Para verificar se você está em uma cópia versus uma visualização:
fonte
Não esqueça
O que retorna uma máscara booleana indicando valores np.nan.
Que retornam as linhas em que np.nan apareceu. Então, através da indexação simples, você pode sinalizar todos os seus pontos que são np.nan.
fonte
Eu enfrentei um problema semelhante e vi que o numpy lida com NaN e Inf de maneira diferente.
No caso de seus dados terem Inf, tente o seguinte:
Isso fornecerá uma tupla de localização dos locais onde os valores de NA estão presentes.
No caso de seus dados terem Nan, tente o seguinte:
fonte
Não se esqueça de verificar também os valores inf. A única coisa que funcionou para mim:
E melhor ainda, se você estiver usando o sklearn
Quando number_features seria uma matriz dos rótulos number_features, por exemplo:
fonte
Aqui está o código de como "Substituir NaN por zero e infinito por grandes números finitos". usando numpy.nan_to_num .
Veja também a resposta de fernando .
fonte