![](https://miro.medium.com/max/2560/1*Ui6SeSMmCeCSc9Q67n5_Wg.jpeg)
Depuis notre post précédent, nous avons approfondi les raisons derrière l’utilisation d’une fonction Sigmoïde pour la régression logistique plutôt qu’une fonction linéaire normale. Dans ce post, nous allons continuer à partager sur la fonction de coût.
La fonction de coût est importante car elle nous donne les erreurs de nos prédictions et par la suite, est nécessaire pour notre algorithme d’apprentissage. Concrètement, nous aimons minimiser les erreurs de nos prédictions, c’est-à-dire minimiser la fonction de coût. Idéalement, si toutes nos erreurs sont nulles, cela revient à jouer à un jeu de fléchettes dans lequel toutes nos fléchettes atteindraient le centre de la cible. De l’autre côté de l’argument, si nos erreurs sont très élevées, cela signifie que nos valeurs prédites manquent toutes les vraies valeurs observées, c’est-à-dire que nos fléchettes manquent en général le millefeuille.
Bien que nous aimions avoir des erreurs nulles lorsque nous exécutons notre fonction de coût avec nos valeurs hypothétiques (prédiction parfaite pour chaque valeur), cela pourrait ne pas être un bon scénario étant donné que cela pourrait conduire à un phénomène appelé « variance élevée ». Nous toucherons plus à ce sujet dans des écrits ultérieurs.
Pour revenir à la formulation de la fonction de perte, une fonction de perte typique serait de minimiser la somme des erreurs au carré, c’est-à-dire .
![](https://miro.medium.com/max/60/1*_N0B9M03cZPcwP340czORA.png?q=20)
Cette fonction, cependant, peut donner lieu à de multiples optimas locaux pendant le processus d’optimisation, ce qui signifie que votre solution optimisée pourrait ne pas être la plus optimisée (il y a une chance qu’il y ait une meilleure solution). Idéalement, nous voulons que la solution optimisée soit le minimum global, plutôt que le minimum local.
![](https://miro.medium.com/max/60/1*wuoWtRejugq6kxRgdZHXwg.png?q=20)
Comme on le voit dans le diagramme ci-dessus, on pourrait initialiser par inadvertance les paramètres et les optimiser au minimum local sans atteindre le « vrai » minimum global. Par conséquent, la fonction de perte susmentionnée ne serait pas idéale à utiliser pour nous.
Que pourrait être notre fonction de perte alors ?
Une fonction de perte couramment utilisée pour la régression logistique est la suivante :
![](https://miro.medium.com/max/60/1*Ox4gV6NSORI9fws0lSCRYQ.png?q=20)
Notez que j’ai utilisé coût et perte de manière interchangeable mais pour ceux qui sont habitués aux conférences d’Andrew Ng, la « fonction de perte » est pour un seul exemple d’entraînement alors que la « fonction de coût » prend la moyenne sur tous les exemples d’entraînement.
Pour voir pourquoi cette fonction de perte a du sens : En supposant que y = 1, et en se concentrant sur l’équation supérieure, -log(h⊖(x)), nous voulons qu’elle soit très négative car il s’agit d’une fonction de perte (Rappelons que nous voulons minimiser la fonction de perte comme objectif). Par conséquent, h⊖(x) sera grande. Cela dit, rappelez-vous que h⊖(x) est limitée à la valeur maximale de 1 en raison de la fonction Sigmoïde qui contraint la valeur hypothétique estimée entre 0 et 1 :
h⊖(x) = ŷ = σ(z)
Hence, lorsque y=1, nous avons la fonction de perte minimisée à l’extrême lorsque ŷ = 1. Une prédiction parfaite qui a peu ou pas de perte/coût encouru.
À l’inverse, si y = 0, et en se concentrant sur la partie inférieure de l’équation, -log(1- h⊖(x)). Nous aimons que cela soit très négatif en raison de notre objectif de minimisation des pertes. Par conséquent, 1- h⊖(x) serait très grand, et le corollaire de cela serait que h⊖(x) serait très petit. Cependant, rappelons que h⊖(x) est limitée à la valeur minimale de 0 en raison de la fonction sigmoïde rendant la valeur hypothétique estimée entre 0 et 1.
Heure, lorsque y=0, nous avons la fonction de perte minimisée à l’extrême lorsque ŷ = 0. Une prédiction parfaite qui n’a que peu ou pas de perte/coût encouru.
Les graphiques correspondants illustreront les points ci-dessus :
![](https://miro.medium.com/max/60/1*h0JhrkZuadH0VYnlANuT4A.png?q=20)
Comme on peut le voir sur le graphique de gauche (y = -log(h⊖(x)), lorsque y = 1, le coût va à 0 lorsque la valeur hypothétique est 1 et va à l’infini lorsque la valeur hypothétique est proche de 0.
Dans le même ordre d’idée, le graphique de droite (y = -log(1 – h⊖(x)), lorsque y = 0, le coût va à 0 lorsque la valeur hypothétique est 0 et va à l’infini lorsque la valeur hypothétique est proche de 1.
En combinant les deux dans une équation nette, on obtient la fonction de coût pour la régression logistique avec m exemples d’entraînement :
![](https://miro.medium.com/max/60/1*ctIxOPOv0Hou7j0F4PUKVw.png?q=20)
où i va de 1 à m pour m exemples d’entraînement.
Dans l’IA et l’apprentissage automatique , il y aura beaucoup de notations jetées en l’air et il serait utile d’en avoir une idée.
Lors de l’entraînement du modèle de régression logistique, nous cherchons à trouver les paramètres, « w » et « b » qui minimisent la fonction de coût globale. Dans le prochain article, nous aborderons le prochain segment important, la descente de gradient.
En numpy, nous pouvons coder la fonction de coût comme suit :
import numpy as npcost = (-1/m) * np.sum(Y*np.log(A) + (1-Y)*(np.log(1-A)))
Pour expliquer :
- np.sum fait la somme des éléments du tableau (Y*np.log(A) + (1-Y)*(np.log(1-A)), qui dans ce cas serait la somme de tous les exemples d’entraînement. Voir plus ici.
- np.log prend le log naturel, élément par élément aux éléments du tableau. Voir plus ici.
- « * » prend les éléments d’un tableau et les multiplie, par élément, aux éléments d’un autre tableau. Ce n’est pas une multiplication matricielle, qui a une exigence de forme des deux tableaux : Le nombre de colonnes du premier tableau doit être égal aux lignes du second tableau.