Obtuve ValueError al predecir datos de prueba usando un modelo RandomForest.
Mi 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)
El error:
ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
¿Cómo encuentro los valores incorrectos en el conjunto de datos de prueba? Además, no quiero descartar estos registros, ¿puedo reemplazarlos con la media o la mediana?
Gracias.
python
random-forest
pandas
edamame
fuente
fuente
.rolling()
para reemplazar el valor perdido con el valor medio de una ventana variable. Si desea algo más robusto, use el módulo <b> missingpy </b>, puede usarloMissForest
para una imputación basada en el bosque aleatorio.Suponiendo que
X_test
es un marco de datos de pandas, puede usarDataFrame.fillna
para reemplazar los valores de NaN con la media:fuente
Para cualquiera que esté pasando por esto, para modificar realmente el original:
Para sobrescribir el original:
Para verificar si está en una copia frente a una vista:
fuente
No olvides
Que devuelve una máscara booleana que indica valores np.nan.
Que devuelven las filas donde apareció np.nan. Luego, mediante una indexación simple, puede marcar todos sus puntos que son np.nan.
fuente
No olvide comprobar también los valores inf. Lo único que funcionó para mí:
Y aún mejor si estás usando sklearn
Cuando number_features sería una matriz de las etiquetas number_features, por ejemplo:
fuente
Me enfrenté a un problema similar y vi que numpy maneja NaN e Inf de manera diferente.
En caso de que sus datos tengan Inf, intente esto:
Esto dará una tupla de ubicación de lugares donde los valores de NA están presentes.
En caso de que sus datos tengan Nan, intente esto:
fuente
En la mayoría de los casos, deshacerse de los valores infinitos y nulos resuelve este problema.
deshacerse de los valores infinitos.
deshacerse de los valores nulos de la manera que desee, valores específicos como 999, mean o crear su propia función para imputar valores perdidos
o
fuente
Si sus valores son mayores que
float32
, intente ejecutar un escalador primero. Sería bastante inusual tener una desviación que abarque más defloat32
.fuente
Aquí está el código de cómo "Reemplazar NaN con cero e infinito con números finitos grandes". usando numpy.nan_to_num .
Ver también la respuesta de fernando .
fuente