sklearn score scikit rmse r2_score accuracy python scikit-learn nan

python - scikit - sklearn regression score



Mensaje de error de Scikit NaN o infinito (2)

Los árboles de decisión de scikit-learn emiten su entrada a float32 para mayor eficiencia, pero sus valores no se adaptarán a ese tipo:

>>> np.float32(8.9932064170227995e+41) inf

La solución es estandarizar antes de ajustar un modelo con sklearn.preprocessing.StandardScaler . No olvides transform antes de predecir. Puede usar sklearn.pipeline.Pipeline para combinar estandarización y clasificación en un solo objeto:

rf = Pipeline([("scale", StandardScaler()), ("rf", RandomForestClassifier(n_estimators=100, n_jobs=-1, verbose=2))])

O bien, con la versión de desarrollo actual / próxima versión:

rf = make_pipeline(StandardScaler(), RandomForestClassifier(n_estimators=100, n_jobs=-1, verbose=2))

(Admito que el mensaje de error podría mejorarse).

Estoy importando algunos datos de un archivo csv. El archivo tiene valores nan marcados con el texto ''NA''. Importe los datos con:

X = genfromtxt(data, delimiter='','', dtype=float, skip_header=1)

Yo uso este código para reemplazar a nan con una media de columna previamente calculada.

inds = np.where(np.isnan(X)) X[inds]=np.take(col_mean,inds[1])

Luego ejecuto un par de comprobaciones y obtengo matrices vacías:

np.where(np.isnan(X)) np.where(np.isinf(X))

Finalmente ejecuto un clasificador scikit:

RF = ensemble.RandomForestClassifier(n_estimators=100,n_jobs=-1,verbose=2) RF.fit(X, y)

y recibe el siguiente error:

File "C:/Users/m&g/Anaconda/lib/site-packages/sklearn/ensemble/forest.py", line 257, in fit check_ccontiguous=True) File "C:/Users/m&g/Anaconda/lib/site-packages/sklearn/utils/validation.py", line 233, in check_arrays _assert_all_finite(array) File "C:/Users/m&g/Anaconda/lib/site-packages/sklearn/utils/validation.py", line 27, in _assert_all_finite raise ValueError("Array contains NaN or infinity.") ValueError: Array contains NaN or infinity.

¿Alguna idea de por qué me está diciendo que hay NaN o infinito? Leí esta publicación e intenté ejecutar:

RF.fit(X.astype(float), y.astype(float))

pero obtengo el mismo error.


Me encuentro con este problema también. Pero, por el contrario, mi problema es que hay algunos ''NaN'' en la matriz.

Aquí es cómo solucionarlo.

from sklearn.preprocessing import Imputer X = Imputer().fit_transform(X) RF.fit(X, y)

Referencia aquí: sklearn.preprocessing.Imputer