¿Cómo se deriva la función de costo de la regresión logística?


29

Estoy haciendo el curso Stanford de Machine Learning en Coursera.

En el capítulo sobre Regresión logística, la función de costo es esta: ingrese la descripción de la imagen aquí

Entonces, se deriva aquí: ingrese la descripción de la imagen aquí

Intenté obtener la derivada de la función de costo, pero obtuve algo completamente diferente.

¿Cómo se obtiene la derivada?

¿Cuáles son los pasos intermedios?


+1, verifique la respuesta de @ AdamO en mi pregunta aquí. stats.stackexchange.com/questions/229014/…
Haitao Du

"Completamente diferente" no es realmente suficiente para responder a su pregunta, además de decirle lo que ya sabe (el gradiente correcto). Sería mucho más útil si nos diera el resultado de sus cálculos, entonces podemos ayudarlo a apuntalar dónde cometió el error.
Matthew Drury

@MatthewDrury Lo siento, Matt, había arreglado la respuesta justo antes de que tu comentario llegara. Octavian, ¿seguiste todos los pasos? Lo editaré para darle un valor agregado más tarde ...
Antoni Parellada

2
cuando dices "derivado" te refieres a "diferenciado" o "derivado"?
Glen_b: reinstala a Monica

Respuestas:


41

Adaptado de las notas del curso, que no veo disponibles (incluida esta derivación) fuera de las notas aportadas por los estudiantes dentro de la página del curso Coursera Machine Learning de Andrew Ng .


En lo que sigue, el superíndice denota mediciones individuales o "ejemplos" de entrenamiento.(i)

J(θ)θj=θj1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]=linearity1mi=1m[y(i)θjlog(hθ(x(i)))+(1y(i))θjlog(1hθ(x(i)))]=chain rule1mi=1m[y(i)θjhθ(x(i))hθ(x(i))+(1y(i))θj(1hθ(x(i)))1hθ(x(i))]=hθ(x)=σ(θx)1mi=1m[y(i)θjσ(θx(i))hθ(x(i))+(1y(i))θj(1σ(θx(i)))1hθ(x(i))]=σ1mi=1m[y(i)σ(θx(i))(1σ(θx(i)))θj(θx(i))hθ(x(i))(1y(i))σ(θx(i))(1σ(θx(i)))θj(θx(i))1hθ(x(i))]=σ(θx)=hθ(x)1mi=1m[y(i)hθ(x(i))(1hθ(x(i)))θj(θx(i))hθ(x(i))(1y(i))hθ(x(i))(1hθ(x(i)))θj(θx(i))1hθ(x(i))]=θj(θx(i))=xj(i)1mi=1m[y(i)(1hθ(x(i)))xj(i)(1yi)hθ(x(i))xj(i)]=distribute1mi=1m[yiyihθ(x(i))hθ(x(i))+y(i)hθ(x(i))]xj(i)=cancel1mi=1m[y(i)hθ(x(i))]xj(i)=1mi=1m[hθ(x(i))y(i)]xj(i)


La derivada de la función sigmoidea es

ddxσ(x)=ddx(11+ex)=(1+ex)(1+ex)2=ex(1+ex)2=(11+ex)(ex1+ex)=(11+ex)(1+ex1+ex11+ex)=σ(x)(1+ex1+exσ(x))=σ(x)(1σ(x))


1
¡+1 para todos los esfuerzos !, puede ser que usar la notación matricial sea más fácil
Haitao Du

puedo decir en regresión lineal, el objetivo es y la derivada es , donde , en regresión logística, es similar, la derivada es donde , y ? Axb22ATee=AxbATee=pbp=sigmoid (Ax)
Haitao Du

2
Por eso aprecio tu esfuerzo. pasas tiempo con nosotros el lenguaje de OP !!
Haitao Du

1
Tengo entendido que hay problemas de convexidad que hacen que la minimización del error al cuadrado sea indeseable para las funciones de activación no lineal. En notación matricial, sería . J(θ)θ=1mX(σ(Xθ)y)
Antoni Parellada

1
@MohammedNoureldin Acabo de tomar la derivada parcial en los numeradores de la línea anterior, aplicando la regla de la cadena.
Antoni Parellada

8

Para evitar la impresión de una complejidad excesiva del asunto, veamos la estructura de la solución.

Con la simplificación y el abuso de la notación, dejemos que sea ​​un término en suma de , y es una función de : G(θ)J(θ)h=1/(1+ez)z(θ)=xθ

G=ylog(h)+(1y)log(1h)

Podemos usar la regla de la cadena: y resolverlo uno por uno ( e son constantes).dGdθ=dGdhdhdzdzdθxy

dGh=yh1y1h=yhh(1h)
Para sigmoid mantiene, que es solo un denominador de la declaración anterior.dhdz=h(1h)

Finalmente, .dzdθ=x

La combinación de los resultados en conjunto da la expresión buscada: Espero que ayude.

dGdθ=(yh)x

0

El crédito por esta respuesta es para Antoni Parellada de los comentarios, que creo que merece un lugar más destacado en esta página (ya que me ayudó cuando muchas otras respuestas no lo hicieron). Además, esta no es una derivación completa, sino más bien una declaración clara de . (Para obtener una derivación completa, consulte las otras respuestas).J(θ)θ

J(θ)θ=1mXT(σ(Xθ)y)

dónde

XRm×n=Training example matrixσ(z)=11+ez=sigmoid function=logistic functionθRn=weight row vectory=class/category/label corresponding to rows in X

Además, una implementación de Python para aquellos que desean calcular el gradiente de con respecto a .Jθ

import numpy
def sig(z):
return 1/(1+np.e**-(z))


def compute_grad(X, y, w):
    """
    Compute gradient of cross entropy function with sigmoidal probabilities

    Args: 
        X (numpy.ndarray): examples. Individuals in rows, features in columns
        y (numpy.ndarray): labels. Vector corresponding to rows in X
        w (numpy.ndarray): weight vector

    Returns: 
        numpy.ndarray 

    """
    m = X.shape[0]
    Z = w.dot(X.T)
    A = sig(Z)
    return  (-1/ m) * (X.T * (A - y)).sum(axis=1) 

0

Para aquellos de nosotros que no somos tan fuertes en el cálculo, pero nos gustaría jugar con el ajuste de la función de costos y necesitamos encontrar una forma de calcular derivados ... un atajo para volver a aprender el cálculo es esta herramienta en línea que proporciona automáticamente la derivación, con explicaciones paso a paso de la regla.

https://www.derivative-calculator.net

Ejemplo de derivación de la función de costo de la activación sigmoidea en regresión logística

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.