Error de sklearn ValueError: la entrada contiene NaN, infinito o un valor demasiado grande para dtype('float64')

Resuelto Ethan Waldie asked hace 9 años • 27 respuestas

Estoy usando sklearn y tengo un problema con la propagación por afinidad. He creado una matriz de entrada y sigo recibiendo el siguiente error.

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

he corrido

np.isnan(mat.any()) #and gets False
np.isfinite(mat.all()) #and gets True

Intenté usar

mat[np.isfinite(mat) == True] = 0

para eliminar los valores infinitos pero esto tampoco funcionó. ¿Qué puedo hacer para deshacerme de los valores infinitos en mi matriz, de modo que pueda utilizar el algoritmo de propagación por afinidad?

Estoy usando anaconda y python 2.7.9.

Ethan Waldie avatar Jul 09 '15 23:07 Ethan Waldie
Aceptado

Esto puede suceder dentro de scikit y depende de lo que estés haciendo. Recomiendo leer la documentación de las funciones que estás utilizando. Es posible que esté utilizando uno que dependa, por ejemplo, de que su matriz sea positiva definida y no cumpla ese criterio.

EDITAR : ¿Cómo podría perderme eso?

np.isnan(mat.any()) #and gets False
np.isfinite(mat.all()) #and gets True

obviamente está mal. Lo correcto sería:

np.any(np.isnan(mat))

y

np.all(np.isfinite(mat))

Quiere comprobar si alguno de los elementos es NaN y no si el valor de retorno de la anyfunción es un número...

Marcus Müller avatar Jul 09 '2015 16:07 Marcus Müller

Recibí el mismo mensaje de error al usar sklearn con pandas . Mi solución es restablecer el índice de mi marco de datos dfantes de ejecutar cualquier código sklearn:

df = df.reset_index()

Encontré este problema muchas veces cuando eliminé algunas entradas en mi archivo df, como

df = df[df.label=='desired_one']
Jun Wang avatar Dec 24 '2017 03:12 Jun Wang