La Regressione Logistica, Spiegazione del Modello

Parte (2/3)

Potrebbe interessarti:

Il progetto Python, che comprende gli script mostrati in questo post, e quelli relativi alla creazione dei grafici Matplotlib e Plotly, è disponibile assieme al corso Introduzione al Machine Learning.

Dimmi di Più

La Regressione Logistica è un metodo statistico utilizzato per la classificazione binaria, ovvero per prevedere la probabilità che un’osservazione appartenga a una particolare classe, solitamente la classe positiva “$1$” o “True”. A differenza di Adaline (e della Regressione Lineare), che predice valori continui, la Regressione Logistica predice la probabilità che un dato input appartenga a una particolare classe. A tale scopo, come funzione di attivazione, essa utilizza la funzione Sigmoide, che mappa qualsiasi numero reale nell’intervallo $[0, 1]$. Il diagramma delle componenti modello di Regressione Logistica che andremo a sviluppare è mostrato nell’immagine seguente:

Diagramma della Regressione Logistica
Figura 1: Diagramma della Regressione Logistica

La Regressione Logistica riprende l’architettura del modello Adaline, cambiando però l’implementazione della funzione di attivazione e della funzione di costo, e quindi del calcolo dei gradienti usati per aggiornare i valori dei parametri del modello.

L’Algoritmo di Classificazione

Consideriamo nuovamente il diagramma della Regressione Logistica e confrontiamolo con quello di Adaline. Le componenti relative alle feature di input, i pesi, il bias, la somma pesata (weighted sum / net input) e la funzione di soglia sono uguali. Quello che cambia è la funzione di attivazione, e, cosa più importante, la funzione di costo.

La Regressione Logistica usa la Logistic Loss, che ha uno scopo e un comportamento diverso da MSE. Adaline, minimizzando MSE, cerca di generare valori di previsione il più vicino possibile ai valori label target. Infatti, il “fit” sui dati di training genera un iperpiano che passa il più vicino possibile ai valori target. Di contro, la Regressione Logistica, minimizzando la Logistic Loss, vuole massimizzare la probabilità di prevedere la classe corretta ("$0$" o “$1$”). Per fare questo, trova un iperpiano che divide lo spazio delle feature in due sottospazi, in modo tale che le osservazioni della classe “$0$” cadano principalmente su un lato del piano, e quelle della classe “$1$” sull’altro.

La Somma Pesata

La somma pesata delle feature di input, $\eqref{wsum}$, definisce la funzione di ipotesi1 del modello, $h\left(\textbf{x}^{(i)}\right)$, usata per approssimare la funzione target e fare predizione di valori continui:

$$ \begin{align} z^{(i)} & = w_1x^{(i)}_1 + w_2x^{(i)}_2 + \dots + w_nx^{(i)}_n + b\label{wsum}\tag{1}\\[6pt] & = \sum_{j=1}^{n} w_jx^{(i)}_j + b\\[6pt] & = \textbf{w} \cdot \textbf{x}^{(i)} + b\label{wsum-vect}\tag{2}\\[6pt] & = h\left(\textbf{x}^{(i)}\right)\label{hypo}\tag{3}\\[6pt] \end{align} $$

A livello geometrico, la funzione di ipotesi rappresenta l’equazione di un iperpiano in uno spazio di $n+1$ dimensioni, dove $n$ è il numero di variabili indipendenti dell’equazione stessa. In uno spazio vettoriale tridimensionale $(x_1, x_2, h)$, possiamo rappresentare $\eqref{hypo}$ come il piano che divide lo spazio delle feature in due sottospazi, in modo tale che le osservazioni della classe “$0$” cadano principalmente su un lato del piano, e quelle della classe “$1$” sull’altro:

Figura 2: Funzione di ipotesi in uno spazio 3D

La Funzione di Attivazione

La Regressione Logistica utilizza la funzione Sigmoide per mappare la somma pesata $z^{(i)}$, la combinazione lineare degli input che rappresenta il $\text{logit}$ di $p$, in un valore di probabilità compreso tra $0$ e $1$:

$$ \begin{align} \text{out}^{(i)} = \sigma\left(z^{(i)}\right) = \frac{1}{1 + e^{\left(-z^{(i)}\right)}}\label{sigma}\tag{4}\\[6pt] \end{align} $$

La funzione Sigmoide introduce una trasformazione non lineare, che permette al modello di “schiacciare” i valori estremi, fornendo una confidenza probabilistica piuttosto che punteggi grezzi. Questo rende i risultati interpretabili: ad esempio, un punteggio di $0.9$ indica che il modello è molto sicuro che l’input appartenga alla classe positiva. Oltre a questo, l’output vincolato nel range $[0, 1]$ attenua l’effetto di valori logit $z^{(i)}$ estremi, impedendo a un singolo input, o a un outlier di dominare la predizione del modello (si veda il grafico del Sigmoide):

Figura 3: Funzione di attivazione nello spazio vettoriale 3D

A livello geometrico, le previsioni di probabilità per un qualsiasi vettore feature $\textbf{x}^{(i)}$ generano sempre punti $\left(x^{(i)}_1, x^{(i)}_2, \text{out}^{(i)}\right)$ appartenenti alla superficie del Sigmoide:

Figura 4: Previsioni nello spazio vettoriale 3D

La Funzione di Soglia

Similmente ad Adaline, il valore di probabilità di output può essere sottoposto alla funzione di soglia $\hat{y}$, usando $\theta = 0.5$, per produrre una classificazione binaria:

$$ \hat{y}\left(\text{out}^{(i)}\right) = \label{threshold}\tag{5} \begin{cases} 1 & \text{se $\text{out}^{(i)} \ge 0.5$}\\[6pt] 0 & \text{altrimenti}\\[6pt] \end{cases} $$
Figura 5: Funzione di soglia in 3D

La Funzione di Costo

I Problemi con Mean Squared Error

In Adaline, abbiamo definito la funzione di costo “Mean Squared Error” (MSE) come:

$$ \begin{align} \text{MSE}(\textbf{w}, b) & = \frac{1}{m} \sum_{i=1}^{m}\left(y^{(i)} - \text{out}^{(i)}\right)^2 \label{mse_loss}\tag{6}\\[6pt] & = \frac{1}{m} \sum_{i=1}^{m}\left[y^{(i)} - \left(\textbf{w} \cdot \textbf{x}^{(i)} + b\right)\right]^2\\[6pt] \end{align} $$

dove $\text{out}^{(i)}$ è il valore di regressione di output del neurone. Purtroppo, in un contesto di classificazione, MSE presenta diversi problemi. Tale funzione di costo è stata progettato per la regressione, non per la classificazione: MSE misura la distanza in linea retta della previsione dal valore target, e non capisce che stiamo lavorando con valori di probabilità, delimitati nell’intervallo $[0, 1]$.

Nei task di classificazione, $0$ e $1$ non sono solo “punti su una retta”, ma rappresentano classi distinte. In un classificatore, la fiducia (confidence) è la certezza che un modello sia corretto nella sua previsione. Un predittore fornisce la probabilità, $p$, che un’osservazione di input appartenga a una classe specifica. Ad esempio, $p = 0.9$ indica che il modello ha un elevata fiducia della sua previsione, in quanto, il valore ritornato è vicino al limite superiore del range della funzione di predizione, che è $1$. Senza valori vincolati, non è possibile interpretare l’output come una probabilità, e quindi non è possibile assegnare un livello di confidenza. In un contesto di classificazione binaria:

  • più $p$ è vicino a $1$, maggiore è la sicurezza del classificatore che l’osservazione appartenga alla classe positiva.
  • più $p$ è vicino a $0$, maggiore è la sicurezza che l’osservazione appartenga alla classe negativa.
  • più $p$ è vicino a $0.5$, più bassa è la fiducia del predittore (maggiore è la sua incertezza).

Se parliamo di classi, possiamo parlare di fiducia che la nostra previsione sia esatta. Ma se parliamo di differenze tra due punti non vincolati su una retta, il concetto di confidenza non è applicabile. Al valore ritornato dal modello, la confidenza aggiunge l’informazione sulla sicurezza di tale previsione, e questo rende i classificatori più affidabili.

Esiste anche un altra complicazione. Se utilizziamo MSE con il valore di output della Regressione Logistica, dato dall’applicazione della funzione di attivazione Sigmoide sulla somma pesata, $\sigma\left(z^{(i)}\right)$, otteniamo:

$$ \begin{align} \text{MSE}(\textbf{w}, b) & = \frac{1}{m} \sum_{i=1}^{m}\left[y^{(i)} - \sigma\left(z^{(i)}\right)\right]^2 \label{mse_loss_logreg}\tag{7}\\[6pt] & = \frac{1}{m} \sum_{i=1}^{m}\left[y^{(i)} - \left(\frac{1}{1 + e^{(-z^{(i)})}}\right)\right]^2\\[6pt] \end{align} $$

Purtroppo, se ora tracciamo la superficie della funzione di costo MSE rispetto ai pesi del vettore $\textbf{w}$, otteniamo una superficie non convessa. Per gli algoritmi di ottimizzazione come la discesa del gradiente, questo fatto complica la ricerca del punto di minima globale:

Figura 6: Funzione di costo MSE con Sigmoide

Ciò accade perché nel modello di Regressione Logistica è stata introdotta una non-linearità tramite la funzione Sigmoide, che rende complessa la relazione tra i parametri di peso $\textbf{w}$ e il valore di costo $\text{MSE}(\textbf{w}, b)$:

$$ \begin{align} \sigma\left(z^{(i)}\right) & = \frac{1}{1 + e^{\left(-z^{(i)}\right)}} = \frac{1}{1 + e^{\left[-\left(\textbf{w} \cdot \textbf{x}^{(i)} + b\right)\right]}}\\[6pt] \end{align} $$

In precedenza, nel modello di regressione lineare, non avevamo questo problema, in quanto la funzione di attivazione $\sigma$ era la funzione di identità, che è una funzione lineare:

$$ \begin{align} \sigma\left(z^{(i)}\right) = z^{(i)} = \textbf{w} \cdot \textbf{x}^{(i)} + b\\[6pt] \end{align} $$

Per risolvere questi impedimenti, dobbiamo utilizzare un’altra funzione di costo, chiamata Logistic Loss (o log loss), che è un’applicazione specifica della funzione Cross-Entropy, applicata ai problemi di classificazione binaria.

La Funzione Logistic Loss

La funzione Logistic Loss è un caso specifico della funzione Cross-Entropy per una variabile casuale discreta, $X$, con $k$ in $2$ stati discreti, e due distribuzioni di probabilità, $P(X) = \left[p, 1-p\right]$, e $Q(X) = \left[q, 1-q\right]$. La Logistic Loss misura la corrispondenza tra le probabilità previste dal modello, e le label di classe effettive ("$0$" o “$1$”). Per una singola osservazione, è definita come:

$$ \begin{align} H(P, Q) & = -p\log(q) - (1 - p)\log(1 - q)\label{log_loss}\tag{8}\\[6pt] \end{align} $$

Se intendiamo calcolare la differenza tra la label target, $y$, e la probabilità prevista che l’osservazione appartenga alla classe positiva, $\text{out}$, possiamo riscrivere $\eqref{log_loss}$ come:

$$ \begin{align} H(y, \text{out}) & = -y\log\left(\text{out}\right) - (1 - y)\log\left(1 - \text{out}\right) \label{log_loss_2}\tag{9}\\[6pt] \end{align} $$

Definiamo la funzione di costo Logistic Loss $L(\textbf{y}, \textbf{out})$ sull’intero dataset, come il valore medio della Logistic Loss di tutte le $m$ osservazioni di training:

$$ \begin{align} L(\textbf{y}, \textbf{out}) & = \frac{1}{m} \sum_{i=1}^{m} \left[-y^{(i)} \log\left(\text{out}^{(i)}\right) - \left(1-y^{(i)}\right) \log\left(1 - \text{out}^{(i)}\right) \right] \label{log_loss_ml}\tag{10}\\[6pt] \end{align} $$

dove $\text{out}^{(i)} = \sigma\left(z^{(i)}\right)$. Per comprendere meglio il significato di $\eqref{log_loss_ml}$, consideriamo un singolo esempio di training:

$$ \begin{align} L(y, \text{out}) & = -y \log(\text{out}) - (1 - y) \log(1 - \text{out}) \label{log_loss_single}\tag{11}\\[6pt] \end{align} $$

L’equazione $\eqref{log_loss_single}$ è equivalente a:

$$ L(y, \text{out}) = \label{log_loss_single2}\tag{12} \begin{cases} -\log(\text{out}) & \text{se $y = 1$}\\[6pt] -\log(1 - \text{out}) & \text{se $y = 0$}\\[6pt] \end{cases} $$

Al contrario di MSE, la funzione di costo Cross-Entropy penalizza in modo esponenziale le previsioni errate, soprattutto se il modello è confidente della previsione, ma essa è sbagliata. Questo è importante, perché gli errori ritornati da un classificatore sicuro della sua previsione sono peggiori di quelli fatti da un predittore incerto.

Se $y = 1$, dobbiamo “premiare” il modello se la sua predizione, $\text{out}$, tende anch’essa a $1$, oppure “punirlo” se essa tende al valore contrario, $0$. In sintesi:

  • quando $\text{out}$ tende a $1$, $-\log(\text{out})$ tende a $0$
  • quando $\text{out}$ tende a $0$, $-\log(\text{out})$ tende a $\infty$
Logistic Loss con $y = 1$
Figura 7: Logistic Loss con $y = 1$

Se $y = 0$:

  • quando $\text{out}$ tende a $0$, $-\log(1 - \text{out})$ tende a $0$
  • quando $\text{out}$ tende a $1$, $-\log(1 - \text{out})$ tende a $\infty$
Logistic Loss con $y = 0$
Figura 8: Logistic Loss con $y = 0$

Ora, se tracciamo la superficie della funzione di costo Logistic Loss $\eqref{log_loss_ml}$, rispetto ai pesi del vettore $\textbf{w}$, otteniamo nuovamente una superficie convessa, compatibile con l’algoritmo della discesa del gradiente:

Figura 9: Funzione di costo Logistic Loss

L’Algoritmo di Training

Il modello della Regressione Logistica può usare come algoritmo di training la discesa del gradiente (GD). Fortunatamente per noi, le derivate parziali della funzione di costo Logistic Loss, rispetto ai parametri $\textbf{w}$ e $b$, sono molto simili alle derivate parziali della funzione di costo MSE. Infatti, le regole di aggiornamento del vettore dei pesi e del bias rimangono invariate, cambia solo il fattore di scala, che passa da $2$ a $1$. Quindi, dopo aver inizializzato $\textbf{w}$ e $b$, le iterazioni del GD calcolano i nuovi valori di tali parametri questo modo:

$$ \begin{align} \require{physics} \textbf{g}_w & = \pdv{L}{\textbf{w}} = \frac{1}{m} \sum_{i=1}^{m} \textbf{x}^{(i)}\left(\text{out}^{(i)} - y^{(i)}\right)\label{g_w}\tag{13}\\[6pt] g_b & = \pdv{L}{b} = \frac{1}{m} \sum_{i=1}^{m} \left(\text{out}^{(i)} - y^{(i)}\right)\label{g_b}\tag{14}\\[6pt] \textbf{w} & = \textbf{w} - \eta \textbf{g}_w\label{update_w}\tag{15}\\[6pt] b & = b - \eta g_b\label{update_b}\tag{16}\\[6pt] \end{align} $$

  1. la funzione di ipotesi determina la relazione tra le variabili di input, o feature, e la label di output associata, cercando di approssimare la funzione target sconosciuta il più possibile. ↩︎

Caricamento
  • Rendering delle formule LaTeX...
  • Rendering dei grafici Plotly...