Dal nostro post precedente, abbiamo approfondito le ragioni dietro l’uso di una funzione Sigmoide per la Regressione Logistica piuttosto che una normale funzione lineare. In questo post, continueremo a condividere la funzione di costo.
La funzione di costo è importante perché ci dà gli errori delle nostre previsioni e successivamente, è necessaria per il nostro algoritmo di apprendimento. Concretamente, ci piace minimizzare gli errori delle nostre previsioni, cioè minimizzare la funzione di costo. Idealmente, se tutti i nostri errori sono zero, è come giocare una partita a freccette in cui tutte le nostre freccette colpiscono il bersaglio. Dall’altro lato del discorso, se i nostri errori sono molto alti, questo significa che i nostri valori predetti mancano tutti i veri valori osservati, cioè, le nostre freccette mancano in generale il centro del bersaglio.
Sebbene ci piaccia avere zero errori quando eseguiamo la nostra funzione di costo con i nostri valori ipotizzati (previsione perfetta per ogni valore), questo potrebbe non essere un buon scenario dato che potrebbe portare ad un fenomeno chiamato “alta varianza”. Toccheremo di più questo argomento in scritti successivi.
Tornando alla formulazione della funzione di perdita, una tipica funzione di perdita sarebbe quella di minimizzare la somma degli errori al quadrato, cioè
Questa funzione, tuttavia, può dare origine a più ottimi locali durante il processo di ottimizzazione, il che significa che la vostra soluzione ottimizzata potrebbe non essere la più ottimizzata (c’è la possibilità che ci sia una soluzione migliore). Idealmente, vogliamo che la soluzione ottimizzata sia il minimo globale, piuttosto che il minimo locale.
Come si vede nel diagramma precedente, potremmo inavvertitamente inizializzare i parametri e ottimizzarli al minimo locale senza raggiungere il “vero” minimo globale. Pertanto, la suddetta funzione di perdita non sarebbe ideale per noi da usare.
Quale potrebbe essere allora la nostra funzione di perdita?
Una funzione di perdita comunemente usata per la regressione logistica è questa:
Si noti che ho usato costo e perdita in modo intercambiabile, ma per chi è abituato alle lezioni di Andrew Ng, la “funzione di perdita” è per un singolo esempio di allenamento mentre la “funzione costo” prende la media su tutti gli esempi di allenamento.
Per vedere perché questa funzione di perdita ha senso: Assumendo y = 1, e concentrandoci sull’equazione superiore, -log(h⊖(x)), vogliamo che sia molto negativa poiché questa è una funzione di perdita (ricordiamo che vogliamo minimizzare la funzione di perdita come obiettivo). Come risultato, h⊖(x) sarà grande. Detto questo, ricordiamo che h⊖(x) è limitato al valore massimo di 1 a causa della funzione Sigmoide che vincola il valore stimato ipotizzato tra 0 e 1:
h⊖(x) = ŷ = σ(z)
Quindi, quando y=1, abbiamo la funzione di perdita minimizzata all’estremo quando ŷ = 1. Una previsione perfetta che ha poca o nessuna perdita/costo sostenuto.
Conversamente, se y = 0, e concentrandosi sulla parte inferiore dell’equazione, -log(1- h⊖(x)). Ci piace che questo sia molto negativo a causa del nostro obiettivo di minimizzazione delle perdite. Come risultato, 1- h⊖(x) sarebbe molto grande, e il corollario di ciò sarebbe h⊖(x) molto piccolo. Tuttavia, ricordiamo che h⊖(x) è limitata al valore minimo di 0 a causa della funzione Sigmoide che rende il valore stimato ipotizzato tra 0 e 1.
Quindi, quando y=0, abbiamo la funzione di perdita minimizzata all’estremo quando ŷ = 0. Una previsione perfetta che ha poca o nessuna perdita/costo sostenuto.
I loro grafici corrispondenti illustreranno i punti precedenti:
Come si può vedere dal grafico di sinistra (y = -log(h⊖(x)), quando y = 1, il costo va a 0 quando il valore ipotizzato è 1 e va all’infinito quando il valore ipotizzato è vicino a 0.
In modo simile, il grafico di destra (y = -log(1 – h⊖(x)), quando y = 0, il costo va a 0 quando il valore ipotizzato è 0 e va all’infinito quando il valore ipotizzato è vicino a 1.
Combinando entrambi in un’equazione ordinata si ottiene la funzione di costo per la regressione logistica con m esempi di allenamento:
dove i va da 1 a m per m esempi di allenamento.
Nell’IA e nell’apprendimento automatico, ci sono molte notazioni che vengono gettate in giro e sarebbe utile avere un senso di esse.
Quando si addestra il modello di regressione logistica, si mira a trovare i parametri, “w” e “b” che minimizzano la funzione di costo complessiva. Nel prossimo articolo, toccheremo il prossimo importante segmento, Gradient Descent.
In numpy, possiamo codificare la funzione di costo come segue:
import numpy as npcost = (-1/m) * np.sum(Y*np.log(A) + (1-Y)*(np.log(1-A)))
Per spiegare:
- np.sum somma sugli elementi dell’array (Y*np.log(A) + (1-Y)*(np.log(1-A)), che in questo caso sarebbe somma su tutti gli esempi di allenamento. Leggete di più qui.
- np.log prende il log naturale, in base agli elementi dell’array. Leggete di più qui.
- “*” prende gli elementi di una matrice e li moltiplica, in base agli elementi, agli elementi di un’altra matrice. Questa non è una moltiplicazione di matrice, che ha un requisito di forma da entrambi gli array: Il numero delle colonne della prima matrice deve essere uguale alle righe della seconda matrice.