<marco />
← Tutti gli articoli
10 min di lettura

Regressione logistica: classificare stimando una probabilità

aiprogrammazione

La regressione lineare prevede un numero: un prezzo, un tempo, una temperatura. Molto spesso però la risposta è una categoria: la mail è spam o no, la transazione è fraudolenta o no, il paziente ha una certa patologia o no. Stimare una categoria a partire dai regressori φ\varphi si chiama classificazione.

Più che la categoria secca, conviene stimare la probabilità di ciascuna categoria, e poi scegliere la più probabile. La regressione logistica fa esattamente questo.

Perché non la regressione lineare

La regressione lineare vuole numeri, quindi la prima idea è trasformare le categorie in numeri. Con due categorie è naturale: 1 per "sì", 0 per "no". L'idea è che la retta, invece di prevedere direttamente 0 o 1, prevede un valore intermedio da leggere come probabilità del "sì": 0,8 vorrebbe dire "probabilmente sì", 0,1 "probabilmente no".

Proviamo con dieci studenti: quante ore hanno studiato e se hanno superato l'esame (1) oppure no (0).

Ore di studio 1 2 3 4 5 6 7 8 9 10
Superato 0 0 0 1 0 1 0 1 1 1

La retta dei minimi quadrati è y^=−0,133+0,115⋅ore\hat y = -0{,}133 + 0{,}115 \cdot \text{ore}: ogni ora in più aggiunge circa 11,5 punti percentuali di probabilità. Tra 1 e 10 ore i valori sembrano ragionevoli, ma una retta non si ferma mai. A zero ore la "probabilità" di essere promossi è −0,13, a 12 ore è 1,25: due numeri che come probabilità non significano niente. Il problema non è questo dataset, è la forma del modello: una retta prima o poi esce dall'intervallo tra 0 e 1.

La sigmoide

Serve una funzione che prenda un numero qualsiasi e lo limiti tra 0 e 1. È la funzione logistica, o sigmoide:

s(a)=11+e−as(a) = \frac{1}{1 + e^{-a}}

Per aa molto positivo vale quasi 1, per aa molto negativo quasi 0, e in a=0a = 0 vale esattamente 0,5.

La regressione logistica applica la sigmoide a una combinazione lineare dei regressori, e la interpreta come probabilità della classe 1:

P(y=1∣φ)=s(φ⊤θ)=11+e−φ⊤θP(y = 1 \mid \varphi) = s(\varphi^\top \theta) = \frac{1}{1 + e^{-\varphi^\top \theta}}

Sui dieci studenti, con φ=[1, ore]⊤\varphi = [1,\ \text{ore}]^\top, la stima dà θ^0=−3,72\hat\theta_0 = -3{,}72 e θ^1=0,677\hat\theta_1 = 0{,}677:

0 0,5 1 0 2 4 6 8 10 12 soglia: 5,5 ore ore di studio

Con 2 ore di studio la probabilità stimata di superare l'esame è 0,09; con 9 ore è 0,91. Ora le uscite sono vere probabilità, e si avvicinano a 0 e a 1 senza mai superarli.

Il confine di decisione

Per classificare, si assegna la classe 1 se la probabilità è almeno 0,5. Dato che s(a)≥0,5s(a) \ge 0{,}5 esattamente quando a≥0a \ge 0, la regola equivale a:

φ⊤θ≥0\varphi^\top \theta \ge 0

Il confine tra le due classi è quindi lineare: una soglia con un regressore, una retta con due, un piano con tre. Qui il confine è a 3,72/0,677≈5,53{,}72 / 0{,}677 \approx 5{,}5 ore.

La funzione di costo

Per stimare θ\theta si usa la massima verosimiglianza. Ogni dato è 0 o 1, quindi è una variabile di Bernoulli con probabilità π(i)=s(φ(i)⊤θ)\pi(i) = s(\varphi(i)^\top\theta) di valere 1.
La meno-log-verosimiglianza è:

J(θ)=−∑i=1N[ y(i)ln⁡π(i)+(1−y(i))ln⁡(1−π(i))]\begin{aligned} J(\theta) = -\sum_{i=1}^{N} \Bigl[\, & y(i) \ln \pi(i) + \bigl(1 - y(i)\bigr) \ln\bigl(1 - \pi(i)\bigr) \Bigr] \end{aligned}
La variabile di Bernoulli

Una variabile di Bernoulli descrive un esperimento con due soli esiti, come il lancio di una moneta: vale 1 con probabilità π\pi e 0 con probabilità 1−π1 - \pi. Le due probabilità si scrivono in un'unica formula:

P(y)=π y (1−π)1−yP(y) = \pi^{\,y}\,(1 - \pi)^{1 - y}

È solo un modo compatto di scrivere i due casi:

  • se y=1y = 1:  π1(1−π)0=π\ \pi^1 (1 - \pi)^0 = \pi
  • se y=0y = 0:  π0(1−π)1=1−π\ \pi^0 (1 - \pi)^1 = 1 - \pi

Da qui a J(θ)J(\theta). Se i dati sono indipendenti, la probabilità di osservarli tutti (la verosimiglianza) è il prodotto delle probabilità dei singoli dati:

L(θ)=∏i=1Nπ(i) y(i)(1−π(i))1−y(i)L(\theta) = \prod_{i=1}^{N} \pi(i)^{\,y(i)} \bigl(1 - \pi(i)\bigr)^{1 - y(i)}

Conviene prenderne il logaritmo, che trasforma i prodotti in somme e porta gli esponenti davanti, ln⁡(ab)=bln⁡a\ln(a^b) = b \ln a:

ln⁡L(θ)=∑i=1N[ y(i)ln⁡π(i)+(1−y(i))ln⁡(1−π(i))]\begin{aligned} \ln L(\theta) = \sum_{i=1}^{N} \Bigl[\, & y(i) \ln \pi(i) + \bigl(1 - y(i)\bigr) \ln\bigl(1 - \pi(i)\bigr) \Bigr] \end{aligned}

Massimizzare ln⁡L\ln L equivale a minimizzare −ln⁡L-\ln L, che è esattamente J(θ)J(\theta).

Sembra complicata, ma è più semplice di quanto appare. Ricordiamo che π\pi è la probabilità che il modello dà alla classe 1, e 1−π1 - \pi quella che dà alla classe 0.
Dato che yy vale 0 oppure 1, uno dei due coefficienti, yy o 1−y1 - y, si annulla.

  • se y=1y = 1, il costo è −ln⁡π-\ln \pi, cioè dipende solo dalla probabilità data alla classe 1.
    Lo studente con 9 ore è stato promosso e il modello gli dava π=0,91\pi = 0{,}91 di essere promosso: costo 0,090{,}09;
  • se y=0y = 0, il costo è −ln⁡(1−π)-\ln(1 - \pi), cioè dipende solo dalla probabilità data alla classe 0.
    Lo studente con 7 ore è stato bocciato, ma il modello gli dava π=0,73\pi = 0{,}73 di essere promosso, quindi solo 1−π=0,271 - \pi = 0{,}27 alla bocciatura: costo 1,321{,}32.

Se il modello è sicuro al 100% della previsione corretta, il costo è 0. Al contrario, più la probabilità assegnata al risultato corretto si avvicina a 0, più il costo aumenta, tendendo all’infinito.

Probabilità data alla classe giusta 0,99 0,9 0,5 0,1 0,01
Costo 0,01 0,11 0,69 2,30 4,61

Sbagliare con sicurezza costa molto più che sbagliare con prudenza.

A differenza dei minimi quadrati, qui non c'è una formula chiusa: il minimo si cerca con metodi iterativi, per esempio la discesa del gradiente, che ha bisogno del gradiente di JJ. Ha una forma sorprendentemente semplice:

∇J(θ)=∑i=1Nφ(i) (π(i)−y(i))\nabla J(\theta) = \sum_{i=1}^{N} \varphi(i)\,\bigl(\pi(i) - y(i)\bigr)
La derivata della sigmoide e il gradiente

La sigmoide ha una derivata comoda:

dsda=e−a(1+e−a)2=11+e−a⋅e−a1+e−a=s(a) (1−s(a))\begin{aligned} \frac{ds}{da} &= \frac{e^{-a}}{(1 + e^{-a})^2} = \frac{1}{1 + e^{-a}} \cdot \frac{e^{-a}}{1 + e^{-a}} \\ &= s(a)\,\bigl(1 - s(a)\bigr) \end{aligned}

Con a=φ⊤θa = \varphi^\top\theta, per la regola della catena ∇θ π=φ π(1−π)\nabla_\theta\, \pi = \varphi\, \pi (1 - \pi). Derivando JJ termine per termine:

∇J=−∑i[y φ π(1−π)π−(1−y) φ π(1−π)1−π]=−∑iφ[y(1−π)−(1−y)π]=∑iφ (π−y)\begin{aligned} \nabla J &= -\sum_{i} \Bigl[ y\, \frac{\varphi\,\pi(1-\pi)}{\pi} - (1-y)\, \frac{\varphi\,\pi(1-\pi)}{1-\pi} \Bigr] \\ &= -\sum_{i} \varphi \bigl[ y(1-\pi) - (1-y)\pi \bigr] \\ &= \sum_{i} \varphi\, (\pi - y) \end{aligned}

dove per brevità yy, π\pi e φ\varphi stanno per y(i)y(i), π(i)\pi(i) e φ(i)\varphi(i).

Un modello, due distribuzioni

Regressione lineare e logistica sono due casi dei modelli lineari generalizzati. In entrambi un modello lineare φ⊤θ\varphi^\top\theta descrive il "centro" di una distribuzione:

  • nella lineare, la media di una gaussiana: y∼N(φ⊤θ, σ2)y \sim \mathcal{N}(\varphi^\top\theta,\ \sigma^2);
  • nella logistica, attraverso la sigmoide, la probabilità di una Bernoulli: y∼Bernoulli(s(φ⊤θ))y \sim \text{Bernoulli}\bigl(s(\varphi^\top\theta)\bigr).

Cambiando la distribuzione cambia la funzione di costo, ma il metodo per arrivarci è lo stesso.

  • La regressione logistica stima la probabilità della classe 1 come s(φ⊤θ)s(\varphi^\top\theta), sempre tra 0 e 1.
  • Si classifica con la soglia 0,5, che equivale a φ⊤θ≥0\varphi^\top\theta \ge 0: il confine è lineare.
  • La funzione di costo viene dalla massima verosimiglianza su dati di Bernoulli: punisce molto gli errori fatti con sicurezza.
  • Non ha soluzione in forma chiusa; si minimizza con la discesa del gradiente, con gradiente ∑φ (π−y)\sum \varphi\,(\pi - y).