master-degree-notes/Foundation of data science/notes/2 Logistic Regression.md
2024-11-02 16:28:37 +01:00

5.5 KiB

La regressione logistica è una tecnica di machine learning fondamentale e ampiamente utilizzata per risolvere problemi di classificazione binaria. A differenza della regressione lineare, che è più adatta per problemi di previsione continua, la regressione logistica si focalizza sulla previsione di classi distinte, trasformando un input continuo in una probabilità, grazie alla funzione sigmoide: \sigma(z) = \frac{1}{1+e^{-z}} !Pasted image 20241025161824.png

Ipotizziamo di avere la seguente situazione, per valori bassi della nostra variabile x, tutti i sample hanno classe 0, viceversa per valori alti. Ma per valori intermedi abbiamo sia sample nella classe 0 che nella classe 1. !Pasted image 20241025162426.png La funzione sigmoide nel grafico a destra rappresenterà quindi la probabilità di cadere nella classe 1.

La regressione logistica è una tecnica per trovare una "linea ondulata" ottimale che rappresenta la probabilità di appartenere alla Classe 1 per vari valori della variabile. Ogni punto su questa linea indica la probabilità (p) di appartenere alla classe: i punti in basso hanno probabilità zero (p=0), mentre quelli in alto raggiungono la probabilità massima (p=1). La funzione logistica (es. la sigmoide, ma un altro esempio è la softmax) mappa valori da uno spazio infinito (-∞, +∞) a uno spazio probabilistico [0,1]. Al contrario, la funzione logit può trasformare lo spazio delle probabilità [0,1] in uno spazio che si estende da (-∞, +∞).

logit(p)=log\left(\frac{p}{1-p}\right)

!Pasted image 20241025163040.png

Trasformare lo spazio [0,1] in (-∞, +∞) rende il problema simile a una regressione lineare, facilitando l'ottimizzazione. La ricerca della linea ottimale parte da una retta iniziale nello spazio logit variabile, con l'obiettivo di regolarne i coefficienti per massimizzare la verosimiglianza.

Per una variabile, l'equazione è: \text{logit}(p) = \log \left( \frac{p}{1 - p} \right) = \beta_0 + \beta_1 \cdot v L'obiettivo è adattare la retta ai punti dati nel grafico logit vs variabile in modo che, una volta trasformata nella curva ondulata tramite l'inversa della funzione logit, separi il maggior numero di punti tra le classi. Per fare questo, si utilizza una strategia simile alla regressione lineare, ma invece di minimizzare i residui quadrati (mean squared error), si massimizza la likelihood. Procediamo nel seguente modo:

  • scegliamo dei valori arbitrari per definire una linear regression iniziale
  • proiettiamo i punti sulla retta. Applicando la funzione logistica otteniamo una roba tipo quella che si vede nel terzo grafico

!Pasted image 20241025163314.png

Pensandoci, possiamo rappresentare le probabilità con questa equazione:

P(Y=y | X;\theta)=\sigma(\beta^Tx)^y[1-\sigma(\beta^Tx)]^{1-y}

e se ci facciamo caso è praticamente una distribuzione di Bernoulli. Si legge come: la probabilità che Y sia y (che ricordiamo, può essere 0 oppure 1), dati i valori di X (la variabile v nei grafici sopra per intenderci) e \theta (il vettore dei coefficienti della regressione lineare che dicevamo prima).

La likelihood totale per il vettore di pesi \beta è quindi: L(\beta) = \prod_{i=1}^{n} P(Y_i \mid x_i) Sostituendo l'equazione 4 nell'equazione 5 otteniamo:

L(\beta) = \prod_{i=1}^{n} \sigma(\beta^T x^{(i)})^{y^{(i)}} \cdot [1 - \sigma(\beta^T x^{(i)})]^{(1 - y^{(i)})} L'idea è di stimare i parametri (\beta) in modo da massimizzare L(\beta). Tuttavia, per comodità matematica, massimizziamo il logaritmo di L(\beta) e lo chiamiamo log-likelihood:

LL(\beta) = \sum_{i=1}^{n} y^{(i)} \log \sigma(\beta^T x^{(i)}) + (1 - y^{(i)}) \log[1 - \sigma(\beta^T x^{(i)})] A questo punto, spero che l'obiettivo precedentemente dichiarato sia più chiaro: trovare i migliori parametri di adattamento β nello spazio logit vs variabile, in modo che LL(β) nello spazio probabilità vs variabile sia massimo.

Come si risolve questo problema? Vediamo due modi!

Gradient Ascend

Calcoliamo la derivata parziale della funzione LL: !Pasted image 20241025165130.png Però dobbiamo calcolarlo per tutti i sample ovviamente, per cui: !Pasted image 20241025165317.png

Poi aggiorniamo il valore così: !Pasted image 20241025165411.png il parametro \eta indica il rate di apprendimento, come nel gradiant descend della linear regression. Lo scegliamo noi, se è troppo grande l'algoritmo non convergerà mai, se è troppo piccolo ci metterà un fottio, ma sarà più preciso.

Newton's method

Un altro metodo è quello di Newton, che è pure migliore.

Il nostro obiettivo è quello di massimizzare la LL(Θ), per cui vogliamo che LL'(Θ) = 0, dove LL' è la derivata, dal momento che LL è una funzione concava. Generalmente, col metodo di Newton vogliamo trovare i valori Θ a partire da un'inizializzazione randomica di questi. Per far ciò, "seguiamo la derivata" (guarda il grafico per capire), fino ad arrivare molto vicini allo 0. !Pasted image 20241029130844.png

Possiamo definire la derivata come: f'(\theta^0)=\frac{f(\theta^0)}{∆} Aggiorniamo \theta come segue: $$\theta^1 = \theta^0 - ∆$$con ∆ = \frac{f(\theta^0)}{f'(\theta^0)} In generale:

\theta^{t+1} = \theta^{t} - \frac{f(\theta^0)}{f'(\theta^0)}

Ora tutto ciò lo applichiamo alla LL (log likelihood):

\theta^{t+1} = \theta^{t} - \frac{LL'(\theta^0)}{LL''(\theta^0)}

fidatevi, funziona.

Se \theta è un vettore, possiamo anche scriverlo così: \theta^{t+1} = \theta^{t} - H^{-1}\nabla LL(\theta) con H matrice definita come segue: $$H_{i,j}=\frac{\partial^2 LL}{\partial \Theta_i \partial \Theta_j}