“Divide por cero encontrado en el registro” cuando no se divide por cero

Cuando lo hago:

summing += yval * np.log(sigmoid(np.dot(w.transpose(), xi.transpose()))) + (1-yval)* np.log(1-sigmoid(np.dot(w.transpose(), xi.transpose()))) 

donde no hay división, ¿por qué aparece el error “dividir por cero encontrado en el registro”? Como resultado, summing convierte en [nan] .

Ese es el error que obtiene cuando intenta evaluar el registro con 0:

 >>> import numpy as np >>> np.log(0) __main__:1: RuntimeWarning: divide by zero encountered in log 

Estoy de acuerdo en que no está muy claro.

Entonces, en su caso, comprobaría por qué su entrada al registro es 0.

PS: esto está en numpy 1.10.4

Yo tuve el mísmo problema. Parece que estás tratando de hacer una regresión logística. Estaba haciendo la clasificación MULTI-CLASS con regresión logística. Pero debe resolver este problema utilizando el enfoque ONE VS ALL (google para más detalles).

Si no configura su variable yval de modo que solo tenga ‘1’ y ‘0’ en lugar de yval = [1,2,3,4, …] etc., obtendrá costos negativos que lo llevarán a la fuga. theta y luego lo llevará a alcanzar el límite de log (y) donde y está cerca de cero.

La solución debería ser tratar previamente su variable yval para que solo tenga ‘1’ y ‘0’ para los ejemplos positivos y negativos.

Aunque es tarde, esta respuesta podría ayudar a alguien más.

En la parte de tu código.

 ... + (1-yval)* np.log(1-sigmoid(np.dot(w.transpose(), xi.transpose()))) 

puede ser np.dot(w.transpose(), xi.transpose()) función de escupir valores más grandes (más de 40 o menos), lo que hace que la salida de sigmoid( ) sea 1 . Y luego, básicamente, estás tomando np.log de 1-1 que es 0 . Y como DevShark ha mencionado anteriormente, causa RuntimeWarning: Divide by zero... error.

Cómo se me ocurrió el número 40 que podría preguntar, bueno, es solo que para valores superiores a 40 o más, la función sigmoide en python (numpy) devuelve 1. ..

Mirando su implementación, parece que está lidiando con el algoritmo de Regresión Logística, en cuyo caso (tengo la impresión de que) la escala de características es muy importante .

Desde que escribo la respuesta por primera vez, es posible que haya violado algunas reglas / regulaciones, si ese es el caso, me gustaría disculparme.