Comment dérive la fonction de coût de la régression logistique


29

Je fais le cours de Machine Learning Stanford sur Coursera.

Dans le chapitre sur la régression logistique, la fonction de coût est la suivante: entrez la description de l'image ici

Ensuite, il est dérivé ici: entrez la description de l'image ici

J'ai essayé d'obtenir le dérivé de la fonction de coût mais j'ai obtenu quelque chose de complètement différent.

Comment le dérivé est-il obtenu?

Quelles sont les étapes intermédiaires?


+1, vérifiez la réponse de @ AdamO dans ma question ici. stats.stackexchange.com/questions/229014/…
Haitao Du

«Complètement différent» ne suffit pas vraiment pour répondre à votre question, en plus de vous dire ce que vous savez déjà (le bon gradient). Il serait beaucoup plus utile si vous nous fournissiez le résultat de vos calculs, nous pourrions alors vous aider à trouver où vous avez fait l'erreur.
Matthew Drury

@MatthewDrury Désolé, Matt, j'avais arrangé la réponse juste avant que votre commentaire n'arrive. Octavian, avez-vous suivi toutes les étapes? J'éditerai pour lui donner une valeur ajoutée plus tard ...
Antoni Parellada

2
quand vous dites «dérivé», voulez-vous dire «différencié» ou «dérivé»?
Glen_b -Reinstate Monica

Réponses:


41

Adapté des notes du cours, que je ne vois pas disponibles (y compris cette dérivation) en dehors des notes fournies par les étudiants dans la page du cours Coursera Machine Learning d' Andrew Ng .


Dans ce qui suit, l'exposant (je) désigne des mesures individuelles ou des «exemples» d'apprentissage.

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(je))=Xj(je)-1mje=1m[y(je)(1-hθ(X(je)))Xj(je)-(1-yje)hθ(X(je))Xj(je)]=distribuer-1mje=1m[yje-yjehθ(X(je))-hθ(X(je))+y(je)hθ(X(je))]Xj(je)=Annuler-1mje=1m[y(je)-hθ(X(je))]Xj(je)=1mje=1m[hθ(X(je))-y(je)]Xj(je)


La dérivée de la fonction sigmoïde est

Xσ(X)=X(11+e-X)=-(1+e-X)(1+e-X)2=e-X(1+e-X)2=(11+e-X)(e-X1+e-X)=(11+e-X)(1+e-X1+e-X-11+e-X)=σ(X)(1+e-X1+e-X-σ(X))=σ(X)(1-σ(X))


1
+1 pour tous les efforts !, peut-être utiliser la notation matricielle pourrait-il être plus facile?
Haitao Du

puis-je dire en régression linéaire, l'objectif est et la dérivée est 2 A T e , où e = A x - b , en régression logistique, il est similaire, la dérivée est A T ee = p - b et p = sigmoïde ( A x ) ? UNEX-b22UNETee=UNEX-bUNETee=p-bp=sigmoïde (UNEX)
Haitao Du

2
c'est pourquoi j'apprécie vos efforts. vous passez du temps avec nous dans la langue d'OP !!
Haitao Du

1
Ma compréhension est qu'il existe des problèmes de convexité qui rendent la minimisation d'erreur quadratique indésirable pour les fonctions d'activation non linéaires. En notation matricielle, ce serait . J(θ)θ=1mX(σ(Xθ)y)
Antoni Parellada

1
@MohammedNoureldin Je viens de prendre la dérivée partielle dans les numérateurs de la ligne précédente, en appliquant la règle de chaîne.
Antoni Parellada

8

Pour éviter l'impression d'une complexité excessive de la question, voyons simplement la structure de la solution.

Avec simplification et certains abus de notation, soit un terme dans la somme de J ( θ ) , et h = 1 / ( 1 + e - z ) est une fonction de z ( θ ) = x θ : G = y log ( h ) + ( 1 - y ) log ( 1 - h )g(θ)J(θ)h=1/(1+e-z)z(θ)=Xθ

g=ybûche(h)+(1-y)bûche(1-h)

Nous pouvons utiliser la règle de chaîne: et le résoudre un par un (xetysont des constantes).gθ=ghhzzθXy

Pour sigmoïdedh

gh=yh-1-y1-h=y-hh(1-h)
est valide, ce qui n'est qu'un dénominateur de l'instruction précédente.hz=h(1-h)

Enfin, .zθ=X

La combinaison des résultats donne une expression recherchée: Espoir qui aide.

gθ=(y-h)X

0

Le mérite de cette réponse revient à Antoni Parellada des commentaires, qui, je pense, mérite une place plus importante sur cette page (car cela m'a aidé lorsque de nombreuses autres réponses ne l'ont pas été). De plus, ce n'est pas une dérivation complète mais plutôt une déclaration claire de J(θ)θ

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

XRm×n=Exemple de matrice de formationσ(z)=11+e-z=fonction sigmoïde=fonction logistiqueθRn=vecteur de ligne de poidsy=classe / catégorie / étiquette correspondant aux lignes en X

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

Pour ceux d'entre nous qui ne sont pas si forts en calcul, mais qui aimeraient jouer avec l'ajustement de la fonction de coût et doivent trouver un moyen de calculer les dérivés ... un raccourci pour réapprendre le calcul est cet outil en ligne pour fournir automatiquement la dérivation, avec des explications étape par étape de la règle.

https://www.derivative-calculator.net

Exemple de dérivation de la fonction de coût de l'activation sigmoïde dans la régression logistique

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.