Come viene derivata la funzione di costo dalla regressione logistica


29

Sto facendo il corso di Machine Learning Stanford su Coursera.

Nel capitolo sulla regressione logistica, la funzione di costo è questa: inserisci qui la descrizione dell'immagine

Quindi, è derivato qui: inserisci qui la descrizione dell'immagine

Ho provato a ottenere la derivata della funzione di costo ma ho ottenuto qualcosa di completamente diverso.

Come si ottiene il derivato?

Quali sono i passaggi intermedi?


+1, controlla la risposta di @ AdamO nella mia domanda qui. stats.stackexchange.com/questions/229014/…
Haitao Du

"Completamente diverso" non è davvero sufficiente per rispondere alla tua domanda, oltre a dirti ciò che già conosci (il gradiente corretto). Sarebbe molto più utile se ci fornissi i risultati dei tuoi calcoli, quindi possiamo aiutarti a puntellare dove hai commesso l'errore.
Matthew Drury,

@MatthewDrury Scusa, Matt, avevo organizzato la risposta prima che arrivasse il tuo commento. Ottaviano, hai seguito tutti i passaggi? Modificherò per dargli un valore aggiunto in seguito ...
Antoni Parellada,

2
quando dici "derivato" intendi "differenziato" o "derivato"?
Glen_b

Risposte:


41

Adattato dalle note del corso, che non vedo disponibili (inclusa questa derivazione) al di fuori delle note fornite dagli studenti all'interno della pagina del corso di apprendimento automatico Coursera di Andrew Ng .


Nel seguito, l'apice (i) indica misure individuali o "esempi" di addestramento.

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)


The derivative of the sigmoid function is

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 for all the efforts!, may be using matrix notation could be easier?
Haitao Du

can I say in linear regression, objective is Axb2 and derivative is 2ATe, where e=Axb, in logistic regression, it is similar, the derivative is ATe where e=pb, and p=sigmoid (Ax) ?
Haitao Du

2
that is why I appreciate your effort. you spend time to us OP's language!!
Haitao Du

1
My understanding is that there are convexity issues that make the squared error minimization undesirable for non-linear activation functions. In matrix notation, it would be J(θ)θ=1mX(σ(Xθ)y).
Antoni Parellada

1
@MohammedNoureldin I just took the partial derivative in the numerators on the prior line, applying the chain rule.
Antoni Parellada

8

To avoid impression of excessive complexity of the matter, let us just see the structure of solution.

With simplification and some abuse of notation, let G(θ) be a term in sum of J(θ), and h=1/(1+ez) is a function of z(θ)=xθ:

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

We may use chain rule: dGdθ=dGdhdhdzdzdθ and solve it one by one (x and y are constants).

dGh=yh1y1h=yhh(1h)
For sigmoid dhdz=h(1h) holds, which is just a denominator of the previous statement.

Finally, dzdθ=x.

Combining results all together gives sought-for expression:

dGdθ=(yh)x
Hope that helps.

0

The credit for this answer goes to Antoni Parellada from the comments, which I think deserves a more prominent place on this page (as it helped me out when many other answers did not). Also, this is not a full derivation but more of a clear statement of J(θ)θ. (For full derivation, see the other answers).

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

where

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

Also, a Python implementation for those wanting to calculate the gradient of J with respect to θ.

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

For those of us who are not so strong at calculus, but would like to play around with adjusting the cost function and need to find a way to calculate derivatives... a short cut to re-learning calculus is this online tool to automatically provide the derivation, with step by step explanations of the rule.

https://www.derivative-calculator.net

Example of deriving cost function of sigmoid activation in logistic regression

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.