Modelli generativi e discriminativi e probabilità condizionate
Modelli generativi e discriminativi: due modi diversi di descrivere lo stesso problema
Nel confronto tra modelli discriminativi e modelli generativi è facile avere inizialmente l’impressione che i due approcci procedano semplicemente in direzioni opposte. Un modello discriminativo parte da un’osservazione e cerca di determinare lo stato che più probabilmente l’ha prodotta; un modello generativo, invece, parte idealmente dallo stato e descrive quali osservazioni ci si dovrebbe attendere.
Se indichiamo con \(O\) l’osservazione e con \(S\) lo stato, il modello discriminativo cerca direttamente una distribuzione della forma
\[ P(S\mid O), \]
mentre il modello generativo descrive tipicamente
\[ P(O\mid S) \]
insieme alla probabilità a priori degli stati,
\[ P(S). \]
La differenza, tuttavia, non consiste semplicemente nel fatto che uno percorra la relazione in un verso e l’altro nel verso opposto. La distinzione più profonda riguarda quale quantità di informazione probabilistica viene effettivamente modellata.
Un esempio: classificare email come spam o non spam
Supponiamo di voler classificare delle email distinguendo tra due stati:
\[ S\in\{\text{spam},\text{non spam}\}. \]
L’osservazione \(O\) può comprendere il testo dell’email, la presenza di determinate parole, il mittente, il numero di link, la lunghezza del messaggio, la presenza di allegati e molte altre caratteristiche.
Un classificatore discriminativo cerca direttamente di imparare, per una certa email osservata,
\[ P(\text{spam}\mid O) \]
e
\[ P(\text{non spam}\mid O). \]
Il suo problema fondamentale è quindi:
Data questa osservazione, qual è lo stato più probabile?
Un modello generativo affronta invece un problema più ampio. Cerca di rappresentare, per esempio,
\[ P(O\mid \text{spam}), \]
cioè quali tipi di osservazioni sono plausibili quando sappiamo che un’email appartiene alla classe spam, e analogamente
\[ P(O\mid \text{non spam}). \]
A queste distribuzioni si aggiungono le probabilità a priori delle classi:
\[ P(\text{spam}) \qquad\text{e}\qquad P(\text{non spam}). \]
Il ruolo del teorema di Bayes
Le due prospettive sono collegate dal teorema di Bayes:
\[ P(S\mid O) = \frac{P(O\mid S)P(S)} {P(O)}. \]
Nel caso dello spam:
\[ P(\text{spam}\mid O) = \frac{ P(O\mid\text{spam})P(\text{spam}) }{ P(O) }. \]
Questo significa che, se un modello generativo conosce \(P(O\mid S)\) e \(P(S)\), può ricavare la probabilità discriminativa \(P(S\mid O)\).
La probabilità dell’osservazione può infatti essere ottenuta marginalizzando sugli stati:
\[ P(O) = \sum_s P(O\mid s)P(s). \]
Nel caso di due classi:
\[ P(O) = P(O\mid\text{spam})P(\text{spam}) + P(O\mid\text{non spam})P(\text{non spam}). \]
Il modello generativo possiede quindi, almeno idealmente, abbastanza informazione da costruire anche il classificatore discriminativo.
La distribuzione congiunta come oggetto fondamentale
Il modo più chiaro di comprendere la relazione tra i due approcci consiste nel considerare la distribuzione congiunta:
\[ P(O,S). \]
Essa può essere fattorizzata in due modi:
\[ P(O,S) = P(O\mid S)P(S) \]
oppure
\[ P(O,S) = P(S\mid O)P(O). \]
Queste due espressioni sono matematicamente equivalenti. La differenza tra modello generativo e discriminativo non deriva quindi da un’asimmetria fondamentale delle leggi della probabilità. L’asimmetria deriva da quali termini il modello decide di apprendere.
Un modello generativo che apprende
\[ P(O\mid S) \quad\text{e}\quad P(S) \]
dispone implicitamente della distribuzione congiunta:
\[ P(O,S)=P(O\mid S)P(S). \]
Un modello puramente discriminativo, invece, può limitarsi ad apprendere
\[ P(S\mid O) \]
senza modellare affatto \(P(O)\).
Una lettura geometrica: intersezioni, misure e probabilità condizionate
La differenza può essere compresa anche geometricamente.
Se interpretiamo \(S\) e \(O\) come eventi, cioè come sottoinsiemi di uno spazio campionario, allora la probabilità condizionata è definita da
\[ P(S\mid O) = \frac{P(S\cap O)} {P(O)}. \]
Questa formula mostra immediatamente che \(P(S\mid O)\) non rappresenta la misura assoluta dell’intersezione tra \(S\) e \(O\). Rappresenta invece la misura relativa dell’intersezione rispetto alla misura di \(O\).
In termini geometrici, possiamo pensare a una relazione del tipo
\[ \frac{\operatorname{area}(S\cap O)} {\operatorname{area}(O)} = 0.8. \]
Questa informazione ci dice che l’80% dell’insieme \(O\) appartiene anche a \(S\), ma non ci dice quanto sia grande \(O\).
Potremmo infatti avere
\[ \operatorname{area}(O)=10, \qquad \operatorname{area}(S\cap O)=8, \]
oppure
\[ \operatorname{area}(O)=1000, \qquad \operatorname{area}(S\cap O)=800. \]
In entrambi i casi vale
\[ P(S\mid O)=0.8. \]
La probabilità condizionata rimane identica, pur essendo completamente diversa la misura assoluta dell’intersezione.
Ma nemmeno la misura di \(S\) è determinata da \(P(S\mid O)\), perché \(S\) può estendersi fuori da \(O\) in modi differenti.
Per questo, dalla sola quantità
\[ P(S\mid O) \]
non possiamo ricostruire né
\[ P(O), \]
né
\[ P(S), \]
né, di conseguenza,
\[ P(S\cap O). \]
La condizionata è una proporzione, non una misura assoluta
Introducendo una misura probabilistica \(\mu\), possiamo scrivere
\[ P(S\mid O) = \frac{\mu(S\cap O)} {\mu(O)}. \]
La probabilità condizionata dice dunque:
Presa tutta la massa probabilistica contenuta in \(O\), quale frazione appartiene anche a \(S\)?
Si tratta di una conoscenza normalizzata rispetto a \(O\).
Una volta condizionato lo spazio su \(O\), l’evento \(O\) stesso viene assunto come nuovo universo probabilistico e vale
\[ P(O\mid O)=1. \]
È come se restringessimo lo spazio campionario all’insieme \(O\) e rinormalizzassimo tutta la sua massa a 1.
Questa rinormalizzazione conserva le proporzioni interne, ma elimina l’informazione sulla dimensione assoluta di \(O\) nello spazio originario.
È proprio qui che si può vedere geometricamente una parte dell’asimmetria informativa del modello discriminativo.
Il condizionamento perde la scala dell’osservazione
Il passaggio dalla distribuzione congiunta alla condizionata è
\[ P(s,o) \longrightarrow P(s\mid o) = \frac{P(s,o)} {P(o)}. \]
In questo passaggio tutta la massa associata alla particolare osservazione \(o\) viene normalizzata dividendo per
\[ P(o). \]
Se gli stati possibili sono \(s_1,\ldots,s_k\), vale
\[ P(s_i\mid o) = \frac{P(s_i,o)} {\sum_j P(s_j,o)}. \]
Il discriminativo conosce quindi le proporzioni relative
\[ P(s_1\mid o), P(s_2\mid o), \ldots, P(s_k\mid o), \]
ma non è necessario che conosca la quantità totale
\[ \sum_jP(s_j,o)=P(o). \]
Un’analogia semplice è quella delle percentuali. Sapere che un contenitore è composto per il 70% da acqua e per il 30% da un’altra sostanza non ci dice se contiene 10 millilitri oppure 10.000 litri.
Analogamente,
\[ P(S\mid O) \]
descrive la composizione probabilistica degli stati all’interno dell’osservazione \(O\), ma non ci dice quanto \(O\) pesi nella distribuzione complessiva del mondo.
La quantità
\[ P(O) \]
rappresenta precisamente questa scala mancante.
Dall’intersezione non si ricostruiscono gli insiemi
L’intuizione geometrica può essere formulata anche in un altro modo.
Conoscere l’intersezione di due insiemi non permette, in generale, di ricostruire i due insiemi originari. Ancora meno informativo è conoscere soltanto il rapporto tra la misura dell’intersezione e la misura di uno dei due insiemi.
Nel caso probabilistico,
\[ P(S\mid O) = \frac{P(S\cap O)} {P(O)}. \]
Conosciamo quindi un rapporto, non i due termini separatamente.
La relazione
\[ P(S\cap O) = P(S\mid O)P(O) \]
mostra chiaramente che, senza \(P(O)\), non possiamo determinare neppure la misura dell’intersezione.
E poiché non conosciamo quanto \(S\) si estenda fuori da \(O\), non possiamo ricostruire nemmeno \(P(S)\).
Quindi la frase
Dall’intersezione non risalgo ai due insiemi.
può essere resa ancora più precisa:
Da \(P(S\mid O)\) non conosco neppure la misura assoluta dell’intersezione \(S\cap O\); conosco soltanto quale frazione di \(O\) cade nell’intersezione.
Anche conoscere perfettamente tutte le condizionate non determina \(P(O)\)
Il punto diventa ancora più importante se consideriamo non una sola osservazione, ma l’intera funzione discriminativa
\[ P(s\mid o) \]
per ogni possibile stato \(s\) e ogni possibile osservazione \(o\).
Potremmo pensare che una conoscenza perfetta di tutte queste probabilità sia sufficiente a determinare l’intero modello probabilistico.
Non è così.
Supponiamo di scegliere una qualsiasi distribuzione marginale sulle osservazioni,
\[ q(o)\geq0, \qquad \sum_o q(o)=1. \]
Possiamo allora costruire una distribuzione congiunta:
\[ P_q(s,o) = P(s\mid o)q(o). \]
La condizionata risultante sarà ancora
\[ \frac{P_q(s,o)} {P_q(o)} = \frac{P(s\mid o)q(o)} {q(o)} = P(s\mid o). \]
Quindi distribuzioni marginali delle osservazioni diverse possono produrre lo stesso identico modello discriminativo.
Possono esistere, in altre parole, molti mondi probabilistici diversi nei quali vale la stessa funzione
\[ P(s\mid o), \]
pur essendo diverse
\[ P(o), \qquad P(s), \qquad P(s,o). \]
Questa è una formulazione particolarmente forte dell’asimmetria informativa.
Due mondi con lo stesso classificatore discriminativo
Consideriamo un caso semplice. In due mondi diversi vale
\[ P(\text{spam}\mid o)=0.9. \]
Nel primo mondo l’osservazione \(o\) è frequente:
\[ P(o)=0.2. \]
Nel secondo è invece molto rara:
\[ P(o)=0.00001. \]
Il classificatore discriminativo si comporta nello stesso modo nei due mondi: quando vede \(o\), assegna il 90% di probabilità alla classe spam.
Eppure la probabilità congiunta è diversa:
\[ P(\text{spam},o) = P(\text{spam}\mid o)P(o). \]
Nel primo mondo:
\[ P(\text{spam},o) = 0.9\cdot0.2 = 0.18. \]
Nel secondo:
\[ P(\text{spam},o) = 0.9\cdot0.00001 = 0.000009. \]
Lo stesso valore discriminativo è quindi compatibile con due distribuzioni congiunte radicalmente differenti.
Dove nasce realmente l’asimmetria informativa
Si potrebbe pensare che l’asimmetria dipenda principalmente dal fatto che i dati di addestramento costituiscono soltanto un campione finito del mondo. Questa considerazione è importante nella pratica, ma non è la ragione fondamentale della differenza.
Anche disponendo idealmente di una quantità infinita di dati e imparando perfettamente \(P(S\mid O)\), la sola conoscenza della probabilità condizionata
\[ P(S\mid O) \]
non sarebbe sufficiente a determinare
\[ P(O\mid S). \]
Per invertire la condizionata con Bayes occorre infatti conoscere anche la distribuzione marginale delle osservazioni:
\[ P(O\mid S) = \frac{P(S\mid O)P(O)} {P(S)}. \]
A sua volta,
\[ P(S) = \sum_oP(S\mid o)P(o) \]
nel caso discreto, oppure
\[ P(S) = \int P(S\mid o)p(o)\,do \]
nel caso continuo.
Il punto essenziale è dunque che un modello discriminativo puro non è obbligato a rappresentare \(P(O)\). Non si tratta semplicemente di una quantità che non è stata stimata abbastanza precisamente: può essere una quantità che il modello non tenta proprio di apprendere.
Che cosa accade se stimiamo anche \(P(O)\) nel modello discriminativo?
A questo punto nasce una domanda naturale: se ciò che manca al discriminativo è \(P(O)\), perché non stimarla direttamente a partire dai dati?
In linea di principio è perfettamente possibile.
Supponiamo di avere imparato
\[ P(S\mid O) \]
con un classificatore discriminativo e di stimare separatamente
\[ P(O). \]
Possiamo allora costruire la distribuzione congiunta:
\[ P(O,S) = P(S\mid O)P(O). \]
Una volta disponibile la congiunta, possiamo ricavare
\[ P(S) = \sum_o P(S\mid o)P(o) \]
e quindi applicare Bayes:
\[ P(O\mid S) = \frac{P(S\mid O)P(O)} {P(S)}. \]
Dal punto di vista matematico, quindi,
\[ \boxed{ P(S\mid O)+P(O) \Longrightarrow P(O,S) \Longrightarrow P(O\mid S) } \]
esattamente come
\[ \boxed{ P(O\mid S)+P(S) \Longrightarrow P(O,S) \Longrightarrow P(S\mid O) }. \]
Non esiste dunque un’impossibilità matematica di passare dal discriminativo al generativo. Occorre semplicemente possedere anche la marginale che manca.
Conoscere \(P(S,O)\): quando si ha davvero tutta l’informazione?
È importante distinguere tra conoscere un singolo valore
\[ P(s,o) \]
e conoscere l’intera distribuzione congiunta
\[ P(S,O). \]
Se conosciamo soltanto un singolo valore \(P(s,o)\) e inoltre conosciamo \(P(s)\), possiamo calcolare
\[ P(o\mid s) = \frac{P(s,o)} {P(s)}. \]
Ma non possiamo ancora calcolare
\[ P(s\mid o) \]
perché ci manca
\[ P(o). \]
Se invece conosciamo l’intera distribuzione congiunta
\[ P(S,O), \]
allora possediamo già tutta l’informazione probabilistica necessaria.
Possiamo ricavare la marginale degli stati:
\[ P(s) = \sum_o P(s,o), \]
e la marginale delle osservazioni:
\[ P(o) = \sum_s P(s,o). \]
Da queste otteniamo entrambe le condizionate:
\[ P(s\mid o) = \frac{P(s,o)} {P(o)} \]
e
\[ P(o\mid s) = \frac{P(s,o)} {P(s)}. \]
Pertanto:
\[ \boxed{ P(S,O) \Longrightarrow P(S),P(O),P(S\mid O),P(O\mid S) } \]
Se è nota l’intera distribuzione congiunta, conoscere separatamente \(P(S)\) non aggiunge informazione: \(P(S)\) è già ottenibile per marginalizzazione.
Stimare \(P(O)\) tramite le frequenze
Se \(O\) rappresenta una caratteristica discreta relativamente semplice, \(P(O)\) può essere stimata attraverso la frequenza empirica.
Supponiamo, per esempio, che l’osservazione sia:
L’email contiene la parola “viagra”.
Possiamo stimare
\[ \widehat{P}(O) = \frac{ \text{numero di email contenenti la parola} }{ \text{numero totale di email} }. \]
Se la caratteristica compare in 1.000 email su un insieme di 10.000 messaggi, avremo
\[ \widehat{P}(O)=0.1. \]
Supponiamo poi che il classificatore discriminativo abbia imparato
\[ P(\text{spam}\mid O)=0.8 \]
e che
\[ P(\text{spam})=0.2. \]
Possiamo allora calcolare
\[ P(O\mid\text{spam}) = \frac{ P(\text{spam}\mid O)P(O) }{ P(\text{spam}) } = \frac{0.8\cdot0.1}{0.2} = 0.4. \]
Secondo queste stime, quindi, il 40% delle email spam possiede quella caratteristica.
Perché il problema diventa difficile quando l’osservazione è complessa
La difficoltà nasce quando \(O\) non indica una singola caratteristica, ma rappresenta l’intera osservazione.
Un’email può essere descritta attraverso un vettore ad altissima dimensionalità:
\[ O= (O_1,O_2,\ldots,O_d), \]
dove le componenti possono rappresentare parole, sequenze di parole, lunghezza del testo, numero di link, dominio del mittente, struttura sintattica, allegati, caratteristiche grafiche e così via.
In questo caso non basta conoscere separatamente la frequenza di ciascuna caratteristica.
In generale,
\[ P(O_1,O_2,\ldots,O_d) \neq P(O_1)P(O_2)\cdots P(O_d), \]
a meno di assumere indipendenza tra tutte le caratteristiche, ipotesi spesso irrealistica.
Occorrerebbe quindi modellare la distribuzione congiunta
\[ P(O_1,O_2,\ldots,O_d), \]
che può essere immensamente complessa.
Una determinata email completa potrebbe inoltre comparire una sola volta nell’intero dataset, oppure non comparire affatto.
Una stima puramente empirica assegnerebbe a un’email mai osservata probabilità
\[ \widehat{P}(O)=0. \]
Ma il fatto che una particolare email non sia mai comparsa nel campione non significa naturalmente che sia impossibile nel mondo reale.
Qui emerge uno dei problemi centrali della modellazione generativa: non basta memorizzare la frequenza delle osservazioni viste. Occorre imparare una struttura probabilistica capace di generalizzare anche a osservazioni mai incontrate esattamente durante il training.
Frequenza di una feature e probabilità dell’intera osservazione non sono la stessa cosa
È quindi importante distinguere tra
\[ P(O_i), \]
cioè la probabilità marginale di una singola caratteristica, e
\[ P(O_1,O_2,\ldots,O_d), \]
cioè la probabilità dell’intera configurazione di caratteristiche.
Conoscere la frequenza con cui compare ogni singola parola, ogni singolo link o ogni singola proprietà non è in generale sufficiente per conoscere la probabilità dell’intera email.
Per esempio, conoscere separatamente
\[ P(\text{“gratis”}) \]
e
\[ P(\text{“clicca qui”}) \]
non permette automaticamente di conoscere
\[ P(\text{“gratis”},\text{“clicca qui”}). \]
Le due caratteristiche possono essere correlate.
È proprio la necessità di rappresentare queste dipendenze che rende la modellazione della distribuzione delle osservazioni molto più impegnativa.
Il discriminativo può conoscere meno e classificare meglio
Il fatto che il modello generativo rappresenti una quantità maggiore di struttura probabilistica non significa necessariamente che debba essere migliore in classificazione.
Per decidere se una certa email è spam, potrebbe essere del tutto inutile conoscere molti aspetti della distribuzione generale delle email.
Supponiamo, per esempio, che esistano numerose caratteristiche stilistiche, grammaticali o grafiche che variano moltissimo tra le email ma che non aiutano affatto a distinguere spam e non spam.
Un modello generativo che cerca di rappresentare
\[ P(O\mid S) \]
deve comunque tenere conto anche di questi aspetti, perché il suo obiettivo consiste nel descrivere come sono distribuite le osservazioni sotto ciascuno stato.
Un classificatore discriminativo può invece concentrarsi direttamente sulle caratteristiche utili per determinare
\[ P(S\mid O). \]
Da questo punto di vista il discriminativo può essere considerato più mirato: apprende solamente ciò che serve per stabilire il confine decisionale tra le classi.
Interpretazione geometrica nello spazio delle caratteristiche
La differenza può essere visualizzata anche in uno spazio delle caratteristiche.
Immaginiamo che le osservazioni siano punti e che appartengano a due classi, per esempio punti rossi e punti blu.
Un modello discriminativo può limitarsi a imparare una frontiera decisionale:
\[ f(O)=0, \]
capace di separare efficacemente le due classi.
Non ha necessariamente bisogno di sapere come siano distribuiti tutti i punti rossi e tutti i punti blu all’interno dello spazio.
Un modello generativo cerca invece di descrivere distribuzioni come
\[ P(O\mid S=\text{rosso}) \]
e
\[ P(O\mid S=\text{blu}). \]
Una volta conosciute queste distribuzioni e le rispettive probabilità a priori, la frontiera di classificazione può essere ottenuta confrontando
\[ P(O\mid S=\text{rosso})P(S=\text{rosso}) \]
con
\[ P(O\mid S=\text{blu})P(S=\text{blu}). \]
Il discriminativo cerca quindi soprattutto il confine; il generativo cerca di modellare le regioni di probabilità da cui quel confine può essere derivato.
L’asimmetria non è matematica, ma modellistica
Arriviamo così al punto fondamentale.
Le due fattorizzazioni
\[ P(O,S)=P(S\mid O)P(O) \]
e
\[ P(O,S)=P(O\mid S)P(S) \]
sono perfettamente simmetriche dal punto di vista matematico.
Se conoscessimo esattamente una condizionata e la relativa marginale, potremmo passare in entrambe le direzioni.
Pertanto:
\[ \boxed{ P(S\mid O)\text{ da sola non determina }P(O\mid S) } \]
ma
\[ \boxed{ P(S\mid O)+P(O) \text{ determina la distribuzione congiunta} } \]
e analogamente
\[ \boxed{ P(O\mid S)+P(S) \text{ determina la distribuzione congiunta}. } \]
L’asimmetria nasce dunque dagli obiettivi di apprendimento.
Il modello discriminativo dice:
Voglio imparare direttamente come cambia la probabilità dello stato quando conosco l’osservazione.
Il modello generativo dice invece:
Voglio imparare come sono distribuite le osservazioni sotto ciascuno stato e quanto sono probabili gli stati stessi.
Il secondo problema contiene quindi una descrizione più ampia della struttura probabilistica dei dati.
Il ruolo della quantità di dati
La quantità di dati rimane naturalmente molto importante, ma per una ragione diversa.
Poiché le vere distribuzioni del mondo non sono generalmente note, sia i modelli discriminativi sia quelli generativi devono stimarle a partire da campioni finiti.
Possiamo quindi distinguere due problemi.
Il primo è un problema strutturale: quali distribuzioni decide di modellare il sistema?
Il secondo è un problema statistico: quanto bene riesce a stimarle con i dati disponibili?
Nel discriminativo puro si cerca di stimare
\[ P(S\mid O). \]
Nel generativo si cerca invece di stimare quantità sufficienti a rappresentare la congiunta, per esempio
\[ P(O\mid S) \quad\text{e}\quad P(S). \]
Il fatto che il dataset sia finito introduce inevitabilmente errori di stima in entrambi i casi, ma non è ciò che crea originariamente la differenza informativa tra i due approcci.
Una formulazione sintetica
Possiamo sintetizzare l’intera distinzione nella seguente catena.
Modello discriminativo puro:
\[ O \longrightarrow P(S\mid O). \]
Esso apprende come classificare un’osservazione, ma non è tenuto a sapere quanto quell’osservazione sia probabile nel mondo.
Modello generativo:
\[ S \longrightarrow P(O\mid S), \]
insieme a
\[ P(S). \]
Da queste informazioni costruisce
\[ P(O,S), \]
da cui può ottenere anche
\[ P(S\mid O). \]
Discriminativo arricchito con la marginale:
\[ P(S\mid O)+P(O) \longrightarrow P(O,S) \longrightarrow P(O\mid S). \]
In quest’ultimo caso l’asimmetria informativa scompare, perché abbiamo aggiunto al discriminativo proprio l’informazione probabilistica che normalmente non è tenuto a modellare.
Conclusione teorica
La distinzione tra modello generativo e modello discriminativo non deve quindi essere interpretata come l’esistenza di due leggi probabilistiche opposte. Il teorema di Bayes mostra che le due direzioni sono parti della stessa distribuzione congiunta.
La vera differenza consiste nella quantità e nel tipo di informazione che il modello sceglie di rappresentare.
Un modello discriminativo può conoscere perfettamente
\[ P(S\mid O) \]
senza conoscere
\[ P(O). \]
Geometricamente, ciò significa conoscere la proporzione
\[ \frac{P(S\cap O)}{P(O)} \]
senza conoscere né la misura assoluta di \(O\) né quella dell’intersezione \(S\cap O\).
Il condizionamento conserva quindi le proporzioni interne relative a \(O\), ma perde la sua scala probabilistica assoluta.
Per questa ragione non si può, dalla sola distribuzione discriminativa, ricostruire
\[ P(O\mid S). \]
Se però viene fornita o stimata anche la marginale \(P(O)\), allora si può ricostruire
\[ P(O,S)=P(S\mid O)P(O) \]
e da essa risalire alla distribuzione generativa.
Se invece si conosce già l’intera distribuzione congiunta
\[ P(S,O), \]
allora si possiede l’oggetto probabilistico completo: da essa si ricavano per marginalizzazione \(P(S)\) e \(P(O)\), e da queste entrambe le distribuzioni condizionate.
La relazione fondamentale può quindi essere riassunta così:
\[ \boxed{ P(S\mid O)+P(O) \;\Longleftrightarrow\; P(S,O) \;\Longleftrightarrow\; P(O\mid S)+P(S) } \]
Quando è nota la distribuzione congiunta, generativo e discriminativo sono semplicemente due modi diversi di interrogare la stessa struttura probabilistica.
Quando invece si conosce soltanto una distribuzione condizionata, si conserva una descrizione relativa ma si perde una parte dell’informazione assoluta sulla distribuzione del mondo.
È precisamente questa perdita di scala dovuta alla normalizzazione condizionata a spiegare, in termini geometrici e probabilistici, perché da \(P(S\mid O)\) da sola non si possa risalire né a \(P(O)\), né a \(P(S)\), né alla distribuzione generativa completa.
Applicazione pratica: come si costruiscono un modello discriminativo e uno generativo
La distinzione teorica appena descritta diventa particolarmente chiara osservando come i due modelli vengono effettivamente addestrati.
Un punto fondamentale è che modello discriminativo e modello generativo possono partire dallo stesso identico dataset supervisionato. Ciò che cambia non è necessariamente la tabella iniziale dei dati, ma la struttura probabilistica che il modello cerca di apprendere da essa.
La struttura del dataset: caratteristiche \(O\) e target \(S\)
Supponiamo ancora di voler classificare le email come spam o non spam.
Per semplicità utilizziamo soltanto due caratteristiche binarie:
\[ O_1=\text{“l’email contiene la parola gratis”} \]
e
\[ O_2=\text{“l’email contiene almeno un link”}. \]
Lo stato da prevedere sarà
\[ S= \begin{cases} 1 & \text{spam},\\ 0 & \text{non spam}. \end{cases} \]
Un piccolo dataset di esempio può essere rappresentato dalla seguente tabella:
| \(O_1\): contiene “gratis” | \(O_2\): ha link | \(S\): spam | |
|---|---|---|---|
| 1 | 1 | 1 | 1 |
| 2 | 1 | 1 | 1 |
| 3 | 1 | 0 | 1 |
| 4 | 1 | 1 | 1 |
| 5 | 0 | 1 | 1 |
| 6 | 0 | 1 | 1 |
| 7 | 0 | 0 | 0 |
| 8 | 0 | 1 | 0 |
| 9 | 1 | 0 | 0 |
| 10 | 0 | 0 | 0 |
| 11 | 0 | 0 | 0 |
| 12 | 1 | 1 | 0 |
Ogni riga della tabella rappresenta una coppia
\[ (O,S), \]
dove l’osservazione è in realtà un vettore di caratteristiche:
\[ O=(O_1,O_2). \]
Per esempio, la prima riga corrisponde a
\[ O=(1,1), \qquad S=1. \]
Durante il training conosciamo sia le caratteristiche \(O\) sia il target \(S\). La differenza tra approccio discriminativo e generativo nasce da ciò che scegliamo di stimare a partire da queste coppie.
Il modello discriminativo: apprendere direttamente \(P(S\mid O)\)
Nel modello discriminativo vogliamo stimare direttamente
\[ P(S\mid O). \]
Nel nostro caso:
\[ P(S=\text{spam}\mid O_1,O_2). \]
Una scelta classica è la regressione logistica.
La regressione logistica assume che
\[ P(S=1\mid O) = \sigma(\beta_0+\beta^TO), \]
dove
\[ \sigma(z)=\frac{1}{1+e^{-z}} \]
è la funzione logistica.
Con due caratteristiche:
\[ P(S=1\mid O_1,O_2) = \frac{1} { 1+e^{-(\beta_0+\beta_1O_1+\beta_2O_2)} }. \]
I coefficienti
\[ \beta_0,\beta_1,\beta_2 \]
vengono stimati dai dati.
Il modello costruisce così direttamente la relazione
\[ (O_1,O_2) \longrightarrow P(S\mid O_1,O_2). \]
Non è necessario che costruisca un modello di
\[ P(O_1,O_2) \]
né di
\[ P(O_1,O_2\mid S). \]
Perché la regressione logistica può rappresentare \(P(S\mid O)\)
Supponiamo che
\[ S\in\{0,1\} \]
e che l’osservazione generale sia
\[ O=x=(x_1,\ldots,x_d). \]
Vogliamo stimare
\[ P(S=1\mid O=x). \]
Una semplice combinazione lineare delle caratteristiche,
\[ z= \beta_0+\beta_1x_1+\cdots+\beta_dx_d = \beta_0+\beta^Tx, \]
può assumere qualsiasi valore reale:
\[ -\infty<z<+\infty. \]
Non può quindi essere utilizzata direttamente come probabilità, perché una probabilità deve appartenere all’intervallo
\[ [0,1]. \]
La funzione logistica trasforma invece qualsiasi numero reale in un valore compreso tra 0 e 1:
\[ \sigma(z) = \frac{1}{1+e^{-z}}. \]
Possiamo quindi porre
\[ \boxed{ P(S=1\mid x) = \sigma(\beta_0+\beta^Tx) }. \]
Poiché gli stati sono soltanto due,
\[ P(S=0\mid x) = 1-P(S=1\mid x). \]
La regressione logistica costruisce quindi una vera distribuzione condizionata
\[ P(S\mid O=x). \]
La vera ipotesi della regressione logistica: linearità dei log-odds
La funzione logistica non viene scelta soltanto perché produce numeri compresi tra 0 e 1.
La giustificazione più profonda riguarda gli odds.
Se poniamo
\[ p(x)=P(S=1\mid x), \]
gli odds dello stato \(S=1\) sono
\[ \operatorname{odds}(x) = \frac{p(x)} {1-p(x)}. \]
Gli odds possono assumere valori compresi tra zero e infinito:
\[ 0<\operatorname{odds}(x)<+\infty. \]
Prendendone il logaritmo otteniamo invece una quantità che può assumere qualsiasi valore reale:
\[ \log \frac{p(x)} {1-p(x)}. \]
La regressione logistica assume che questi log-odds dipendano linearmente dalle caratteristiche:
\[ \boxed{ \log \frac{P(S=1\mid x)} {P(S=0\mid x)} = \beta_0+\beta^Tx }. \]
Questa è l’ipotesi centrale del modello.
Possiamo ricavare da essa la funzione logistica.
Poniamo
\[ p=P(S=1\mid x). \]
Abbiamo:
\[ \log\frac{p}{1-p} = \beta_0+\beta^Tx. \]
Esponenziando:
\[ \frac{p}{1-p} = e^{\beta_0+\beta^Tx}. \]
Moltiplicando:
\[ p = e^{\beta_0+\beta^Tx}(1-p). \]
Quindi
\[ p+pe^{\beta_0+\beta^Tx} = e^{\beta_0+\beta^Tx}. \]
Raccogliendo \(p\):
\[ p \left( 1+e^{\beta_0+\beta^Tx} \right) = e^{\beta_0+\beta^Tx}. \]
Pertanto:
\[ p = \frac{ e^{\beta_0+\beta^Tx} }{ 1+e^{\beta_0+\beta^Tx} } \]
che equivale a
\[ \boxed{ p = \frac{1} { 1+e^{-(\beta_0+\beta^Tx)} } }. \]
La funzione logistica emerge dunque direttamente dall’ipotesi di linearità dei log-odds.
Interpretazione probabilistica: una Bernoulli condizionata
Per ciascuna osservazione \(x_i\), poniamo
\[ p_i=P(S_i=1\mid x_i). \]
Poiché il target può assumere soltanto i valori 0 e 1, possiamo scrivere
\[ S_i\mid x_i \sim \operatorname{Bernoulli}(p_i). \]
La probabilità di osservare il target \(s_i\) è quindi
\[ P(S_i=s_i\mid x_i) = p_i^{s_i} (1-p_i)^{1-s_i}. \]
Se
\[ s_i=1, \]
la formula restituisce
\[ P(S_i=1\mid x_i)=p_i. \]
Se invece
\[ s_i=0, \]
restituisce
\[ P(S_i=0\mid x_i)=1-p_i. \]
La regressione logistica può quindi essere descritta formalmente come
\[ \boxed{ S\mid O=x \sim \operatorname{Bernoulli} \left( \sigma(\beta_0+\beta^Tx) \right) }. \]
È dunque un vero modello probabilistico discriminativo di
\[ P(S\mid O). \]
Come vengono imparati i coefficienti: massima verosimiglianza
Supponiamo di avere il dataset
\[ D= \{(x_1,s_1),\ldots,(x_n,s_n)\}. \]
Per ogni osservazione definiamo
\[ p_i = \sigma(\beta_0+\beta^Tx_i). \]
Assumendo indipendenza tra le osservazioni del dataset, la probabilità condizionata di osservare tutti i target è
\[ L(\beta) = \prod_{i=1}^{n} P(s_i\mid x_i;\beta). \]
Utilizzando la distribuzione di Bernoulli:
\[ L(\beta) = \prod_{i=1}^{n} p_i^{s_i} (1-p_i)^{1-s_i}. \]
Questa è la likelihood condizionata.
È particolarmente importante osservare che in questa funzione compare
\[ P(S\mid O;\beta), \]
ma non compare
\[ P(O). \]
Il modello cerca quindi i parametri che spiegano gli stati osservati condizionatamente alle caratteristiche, senza dover modellare la distribuzione delle caratteristiche stesse.
La stima dei coefficienti avviene scegliendo
\[ \hat{\beta} = \arg\max_\beta L(\beta). \]
Poiché è più comodo lavorare con somme anziché con prodotti, prendiamo il logaritmo:
\[ \ell(\beta) = \log L(\beta). \]
Otteniamo
\[ \ell(\beta) = \sum_{i=1}^{n} \left[ s_i\log p_i + (1-s_i)\log(1-p_i) \right]. \]
La stima di massima verosimiglianza è quindi
\[ \boxed{ \hat{\beta} = \arg\max_\beta \sum_i \left[ s_i\log p_i + (1-s_i)\log(1-p_i) \right] }. \]
Equivalentemente si può minimizzare il negativo della log-likelihood:
\[ -\ell(\beta) = -\sum_i \left[ s_i\log p_i + (1-s_i)\log(1-p_i) \right]. \]
Questa quantità è precisamente la binary cross-entropy:
\[ \boxed{ \mathcal L = -\sum_i \left[ s_i\log p_i + (1-s_i)\log(1-p_i) \right] }. \]
La cross-entropy non è quindi una scelta arbitraria: è la negative log-likelihood della distribuzione Bernoulli condizionata.
Che cosa significa concretamente la loss?
Supponiamo che il target reale sia
\[ s=1. \]
Il contributo alla loss diventa
\[ -\log p. \]
Se il modello assegna
\[ p=0.99, \]
la penalità è molto piccola:
\[ -\log(0.99)\approx0.01. \]
Se invece assegna
\[ p=0.1, \]
la penalità diventa
\[ -\log(0.1)\approx2.30. \]
Se assegna quasi zero:
\[ p=0.001, \]
la penalità è ancora maggiore:
\[ -\log(0.001)\approx6.91. \]
La massima verosimiglianza spinge dunque il modello ad assegnare probabilità elevate agli stati realmente osservati e penalizza fortemente previsioni molto sicure ma sbagliate.
Il percorso completo del training discriminativo
Possiamo ora descrivere l’apprendimento della regressione logistica come la catena:
\[ (O_i,S_i) \]
dati di training,
\[ \downarrow \]
si assume
\[ P(S=1\mid O) = \sigma(\beta_0+\beta^TO), \]
\[ \downarrow \]
si costruisce la likelihood condizionata
\[ L(\beta) = \prod_iP(S_i\mid O_i;\beta), \]
\[ \downarrow \]
si trovano i parametri
\[ \hat{\beta} = \arg\max_\beta L(\beta), \]
\[ \downarrow \]
ottenendo
\[ \boxed{ \widehat{P}(S=1\mid O) = \sigma(\hat{\beta}_0+\hat{\beta}^TO) }. \]
Il modello non passa attraverso
\[ P(O\mid S) \]
né attraverso
\[ P(O). \]
Stima direttamente la distribuzione condizionata.
Implementazione Python della regressione logistica
import pandas as pd
from sklearn.linear_model import LogisticRegression
# Dataset
df = pd.DataFrame({
"contiene_gratis": [1,1,1,1,0,0,0,0,1,0,0,1],
"ha_link": [1,1,0,1,1,1,0,1,0,0,0,1],
"spam": [1,1,1,1,1,1,0,0,0,0,0,0]
})
# O = vettore delle osservazioni / caratteristiche
X = df[["contiene_gratis", "ha_link"]]
# S = stato / target
y = df["spam"]
# Modello discriminativo
model = LogisticRegression()
# Training
model.fit(X, y)
# Nuova osservazione:
# contiene "gratis" e contiene un link
nuova_email = pd.DataFrame(
[[1, 1]],
columns=["contiene_gratis", "ha_link"]
)
# Stima di P(S | O)
probabilita = model.predict_proba(nuova_email)
print("P(non spam | O):", probabilita[0, 0])
print("P(spam | O):", probabilita[0, 1])
print("Intercetta:", model.intercept_)
print("Coefficienti:", model.coef_)
Con questo piccolo dataset si ottiene, a seconda dei dettagli dell’implementazione e della regolarizzazione, una probabilità indicativamente vicina a
\[ P(\text{spam}\mid O_1=1,O_2=1)\approx0.65. \]
Il punto essenziale non è il valore numerico preciso, ma il fatto che il modello restituisca direttamente
\[ P(S\mid O). \]
Interpretazione dei coefficienti della regressione logistica
Supponiamo, a titolo illustrativo, che il training abbia prodotto coefficienti circa pari a
\[ \beta_0=-0.756, \]
\[ \beta_1=0.524, \]
\[ \beta_2=0.843. \]
Il modello sarebbe allora
\[ P(S=1\mid O_1,O_2) = \frac{1}{ 1+ e^{-(-0.756+0.524O_1+0.843O_2)} }. \]
Per una email con
\[ O_1=1, \qquad O_2=1, \]
abbiamo
\[ z = -0.756+0.524+0.843 = 0.611. \]
Quindi
\[ P(S=1\mid O_1=1,O_2=1) = \frac{1}{1+e^{-0.611}} \approx0.648. \]
Il modello restituisce quindi direttamente
\[ \boxed{ P(\text{spam}\mid \text{gratis}=1, \text{link}=1) \approx0.648 }. \]
Perché \(e^{\beta_j}\) moltiplica gli odds
La forma logit della regressione logistica è
\[ \log \frac{P(S=1\mid O)} {P(S=0\mid O)} = \beta_0+\beta_1O_1+\cdots+\beta_jO_j+\cdots. \]
Definiamo
\[ \operatorname{odds}(O) = \frac{P(S=1\mid O)} {P(S=0\mid O)}. \]
Se \(O_j\) aumenta di una unità mantenendo costanti tutte le altre caratteristiche, il log-odds aumenta di
\[ \beta_j. \]
Quindi:
\[ \log(\operatorname{odds}_{\text{nuovi}}) = \log(\operatorname{odds}_{\text{vecchi}}) + \beta_j. \]
Esponenziando:
\[ \operatorname{odds}_{\text{nuovi}} = e^{ \log(\operatorname{odds}_{\text{vecchi}}) + \beta_j }. \]
Usando
\[ e^{a+b}=e^ae^b \]
e
\[ e^{\log x}=x, \]
otteniamo
\[ \operatorname{odds}_{\text{nuovi}} = \operatorname{odds}_{\text{vecchi}}e^{\beta_j}. \]
Pertanto:
\[ \boxed{ \frac{ \operatorname{odds}_{\text{nuovi}} }{ \operatorname{odds}_{\text{vecchi}} } = e^{\beta_j} }. \]
La quantità
\[ e^{\beta_j} \]
è dunque l’odds ratio associato a un incremento unitario della caratteristica \(O_j\), mantenendo fisse le altre caratteristiche.
Per esempio, se
\[ \beta_j=0.7, \]
allora
\[ e^{0.7}\approx2.01. \]
Un aumento unitario della feature moltiplica quindi gli odds dello stato \(S=1\) per circa 2.
Se invece
\[ \beta_j<0, \]
allora
\[ e^{\beta_j}<1, \]
e l’aumento della caratteristica riduce gli odds dello stato positivo.
Perché il confine decisionale della regressione logistica è lineare
Se classifichiamo come spam quando
\[ P(S=1\mid O)>0.5, \]
poiché
\[ \sigma(z)>0.5 \iff z>0, \]
otteniamo
\[ \beta_0+\beta^TO>0. \]
Il confine decisionale è quindi
\[ \boxed{ \beta_0+\beta^TO=0 }. \]
Con due caratteristiche questo confine è una retta; con tre caratteristiche è un piano; in dimensioni superiori è un iperpiano.
La probabilità è una funzione non lineare delle feature a causa della sigmoide, ma il log-odds è lineare.
La regressione logistica può emergere anche da un modello generativo
Esiste un collegamento particolarmente interessante tra la regressione logistica e i modelli generativi.
Supponiamo che le caratteristiche continue abbiano, nelle due classi, distribuzioni gaussiane:
\[ O\mid S=0 \sim \mathcal N(\mu_0,\Sigma) \]
e
\[ O\mid S=1 \sim \mathcal N(\mu_1,\Sigma), \]
con la stessa matrice di covarianza \(\Sigma\).
Dal teorema di Bayes:
\[ \frac{ P(S=1\mid O) }{ P(S=0\mid O) } = \frac{ p(O\mid S=1)P(S=1) }{ p(O\mid S=0)P(S=0) }. \]
Prendendo il logaritmo:
\[ \log \frac{ P(S=1\mid O) }{ P(S=0\mid O) } = \log \frac{ p(O\mid S=1) }{ p(O\mid S=0) } + \log \frac{ P(S=1) }{ P(S=0) }. \]
Inserendo le densità gaussiane con la stessa matrice di covarianza, i termini quadratici in \(O\) si cancellano e rimane una funzione lineare:
\[ \log \frac{ P(S=1\mid O) }{ P(S=0\mid O) } = \beta_0+\beta^TO. \]
Da questa relazione segue nuovamente
\[ P(S=1\mid O) = \sigma(\beta_0+\beta^TO). \]
La forma logistica della probabilità discriminativa emerge quindi naturalmente anche da un particolare modello generativo.
La differenza sta nel modo in cui vengono stimati i parametri.
Il modello generativo stimerebbe:
\[ \mu_0,\mu_1,\Sigma,P(S), \]
per ricavare successivamente
\[ P(S\mid O). \]
La regressione logistica evita invece di modellare queste distribuzioni e stima direttamente:
\[ \beta_0,\beta. \]
Questo esempio mostra in modo particolarmente chiaro la distinzione tra approccio generativo e discriminativo.
Lo stesso dataset visto generativamente
Riprendiamo ora esattamente la stessa tabella di email.
Questa volta non vogliamo imparare direttamente
\[ P(S\mid O). \]
Vogliamo imparare
\[ P(S) \]
e
\[ P(O\mid S). \]
Poiché l’osservazione è formata da due caratteristiche,
\[ O=(O_1,O_2), \]
in linea generale dovremmo stimare
\[ P(O_1,O_2\mid S). \]
Per semplificare introduciamo l’ipotesi tipica del Naive Bayes:
\[ O_1\perp O_2\mid S. \]
Significa che assumiamo che, una volta noto lo stato \(S\), le due caratteristiche siano condizionalmente indipendenti.
Possiamo quindi fattorizzare:
\[ P(O_1,O_2\mid S) = P(O_1\mid S) P(O_2\mid S). \]
Questa è un’ipotesi semplificatrice del modello, non una legge generale della probabilità.
Che cosa impara concretamente il modello generativo?
Nel nostro dataset ci sono 12 email, delle quali 6 sono spam e 6 non spam.
Pertanto:
\[ P(S=1) = \frac{6}{12} = 0.5 \]
e
\[ P(S=0) = 0.5. \]
Consideriamo ora soltanto le email spam.
Tra le 6 email spam, 4 contengono la parola “gratis”:
\[ P(O_1=1\mid S=1) = \frac46. \]
Cinque contengono almeno un link:
\[ P(O_2=1\mid S=1) = \frac56. \]
Per le email non spam troviamo invece:
\[ P(O_1=1\mid S=0) = \frac26 \]
e
\[ P(O_2=1\mid S=0) = \frac26. \]
Il modello ha dunque imparato qualcosa di diverso rispetto alla regressione logistica.
Possiede una descrizione di
\[ P(O\mid S=1) \]
e
\[ P(O\mid S=0). \]
In termini intuitivi:
Se so già che un’email è spam, quali caratteristiche mi aspetto di osservare?
Dal modello generativo alla classificazione
Supponiamo ora che arrivi una nuova email con
\[ O=(1,1). \]
Essa contiene quindi la parola “gratis” e almeno un link.
Con l’ipotesi Naive Bayes:
\[ P(O\mid S=1) = P(O_1=1\mid S=1) P(O_2=1\mid S=1). \]
Pertanto:
\[ P(O\mid S=1) = \frac46\frac56. \]
Moltiplicando per la probabilità a priori dello spam:
\[ P(O,S=1) = P(O\mid S=1)P(S=1). \]
Otteniamo:
\[ P(O,S=1) = \frac46 \frac56 \frac12 \approx0.278. \]
Per il caso non spam:
\[ P(O,S=0) = \frac26 \frac26 \frac12 \approx0.0556. \]
A questo punto possiamo normalizzare:
\[ P(S=1\mid O) = \frac{ P(O,S=1) }{ P(O,S=1)+P(O,S=0) }. \]
Quindi:
\[ P(S=1\mid O) = \frac{ 0.278 }{ 0.278+0.0556 } \approx0.833. \]
Il percorso del modello generativo è stato quindi:
\[ P(S) + P(O\mid S) \]
\[ \downarrow \]
\[ P(O,S) \]
\[ \downarrow \]
\[ P(S\mid O). \]
È esattamente il percorso descritto teoricamente dal teorema di Bayes.
Implementazione Python con Bernoulli Naive Bayes
import pandas as pd
from sklearn.naive_bayes import BernoulliNB
df = pd.DataFrame({
"contiene_gratis": [1,1,1,1,0,0,0,0,1,0,0,1],
"ha_link": [1,1,0,1,1,1,0,1,0,0,0,1],
"spam": [1,1,1,1,1,1,0,0,0,0,0,0]
})
X = df[["contiene_gratis", "ha_link"]]
y = df["spam"]
# Modello generativo
model = BernoulliNB(alpha=1.0)
# Training
model.fit(X, y)
nuova_email = pd.DataFrame(
[[1, 1]],
columns=["contiene_gratis", "ha_link"]
)
probabilita = model.predict_proba(nuova_email)
print("P(non spam | O):", probabilita[0, 0])
print("P(spam | O):", probabilita[0, 1])
Nel codice viene utilizzato
\[ \texttt{alpha}=1, \]
cioè il cosiddetto Laplace smoothing.
Lo smoothing evita che una caratteristica mai osservata in una determinata classe riceva probabilità esattamente zero.
Con Laplace smoothing, per una caratteristica binaria:
\[ P(O_i=1\mid S) = \frac{ N_{i,S}+1 }{ N_S+2 }. \]
Nel nostro esempio:
\[ P(O_1=1\mid S=1) = \frac{4+1}{6+2} = \frac58 = 0.625, \]
\[ P(O_2=1\mid S=1) = \frac{5+1}{6+2} = \frac68 = 0.75, \]
mentre per il non spam:
\[ P(O_1=1\mid S=0) = \frac{2+1}{6+2} = \frac38 = 0.375 \]
e
\[ P(O_2=1\mid S=0) = \frac38 = 0.375. \]
Con queste probabilità, il risultato finale per \(O=(1,1)\) è circa
\[ P(S=1\mid O)\approx0.769. \]
Il valore differisce dal calcolo manuale senza smoothing proprio perché sono stati introdotti pseudoconteggi.
Osservare direttamente ciò che il modello generativo ha imparato
Possiamo visualizzare i parametri stimati da Bernoulli Naive Bayes:
import numpy as np
print("P(S):")
print(np.exp(model.class_log_prior_))
print("\nP(O_i = 1 | S):")
print(np.exp(model.feature_log_prob_))
L’output è sostanzialmente:
P(S):
[0.5 0.5]
P(O_i = 1 | S):
[[0.375 0.375]
[0.625 0.750]]
Le righe corrispondono agli stati
\[ S=0 \qquad\text{e}\qquad S=1, \]
mentre le colonne corrispondono alle caratteristiche
\[ O_1 \qquad\text{e}\qquad O_2. \]
La seconda riga significa quindi:
\[ P(O_1=1\mid S=1)=0.625 \]
e
\[ P(O_2=1\mid S=1)=0.75. \]
Questa tabella mostra chiaramente che il modello ha imparato come tendono a presentarsi le osservazioni all’interno di ciascuno stato.
Stessi dati, obiettivi probabilistici diversi
La tabella iniziale è identica nei due casi:
\[ (O,S). \]
Non sono quindi necessariamente diversi i dati forniti al modello.
È diversa la struttura probabilistica che si cerca di estrarre da quei dati.
Nel modello discriminativo:
\[ \boxed{ (O,S)_{\text{training}} \longrightarrow P(S\mid O) } \]
e, nel caso della regressione logistica,
\[ P(S=1\mid O) = \sigma(\beta_0+\beta^TO). \]
Nel modello generativo:
\[ \boxed{ (O,S)_{\text{training}} \longrightarrow P(S),P(O\mid S) } \]
da cui:
\[ P(O,S) = P(O\mid S)P(S) \]
e successivamente:
\[ P(S\mid O) = \frac{ P(O\mid S)P(S) }{ \sum_{s’}P(O\mid s’)P(s’) }. \]
La differenza geometrica ricompare nel calcolo pratico
Nel modello discriminativo, per una determinata osservazione \(o\), otteniamo direttamente qualcosa del tipo
\[ P(S=1\mid o)=0.65. \]
Il modello conosce cioè la ripartizione della probabilità tra gli stati una volta fissata l’osservazione:
\[ P(S=0\mid o)+P(S=1\mid o)=1. \]
Ma non è necessario che conosca
\[ P(o). \]
Di conseguenza non può ricostruire automaticamente
\[ P(S=1,o) = P(S=1\mid o)P(o). \]
È precisamente la perdita di scala descritta nella parte geometrica.
Il generativo, invece, costruisce direttamente quantità del tipo
\[ P(o\mid S)P(S) = P(o,S). \]
Possiede quindi la massa congiunta prima della normalizzazione.
Quando calcola
\[ P(S\mid o) = \frac{ P(o,S) }{ \sum_sP(o,s) }, \]
sta normalizzando rispetto a
\[ P(o) = \sum_sP(o,s). \]
Nel modello generativo possiamo quindi osservare esplicitamente il passaggio
\[ \boxed{ \text{massa congiunta} \longrightarrow \text{normalizzazione} \longrightarrow \text{probabilità discriminativa} } \]
mentre il modello discriminativo cerca direttamente il risultato normalizzato.
I due algoritmi riassunti
Regressione logistica, modello discriminativo:
training:
O1 O2 -> S
1 1 1
1 0 1
0 0 0
...
↓
stima β0, β1, β2
↓
P(S | O)
Il modello non costruisce necessariamente
\[ P(O). \]
Naive Bayes, modello generativo:
training:
O1 O2 -> S
1 1 1
1 0 1
0 0 0
...
↓
stima
P(S)
P(O1 | S)
P(O2 | S)
↓
costruisce
P(O | S)P(S)
↓
Bayes
↓
P(S | O)
I due modelli possono quindi partire dagli stessi esempi di training ma costruire rappresentazioni probabilistiche differenti.
Il limite dell’ipotesi Naive Bayes
Nel nostro esempio generativo abbiamo utilizzato:
\[ P(O_1,O_2\mid S) = P(O_1\mid S)P(O_2\mid S). \]
Questa uguaglianza deriva dall’ipotesi di indipendenza condizionale:
\[ O_1\perp O_2\mid S. \]
Non è valida in generale.
Se la presenza della parola “gratis” e la presenza di un link fossero correlate anche una volta fissato lo stato spam/non spam, un modello generativo più accurato dovrebbe rappresentare direttamente
\[ P(O_1,O_2\mid S) \]
senza fattorizzarla nel prodotto delle due marginali condizionate.
Con due caratteristiche questo problema è ancora semplice. Con migliaia o milioni di caratteristiche, invece, rappresentare tutte le dipendenze può diventare estremamente difficile.
Ed è proprio questo uno dei motivi per cui la modellazione generativa dell’intera osservazione può essere molto più impegnativa della modellazione discriminativa del solo confine tra le classi.
Conclusione dell’applicazione pratica
L’esempio pratico permette di rendere concreta l’intera distinzione.
Il modello discriminativo parte da coppie
\[ (O,S) \]
e cerca direttamente una funzione parametrica per
\[ P(S\mid O). \]
Nella regressione logistica questa funzione è
\[ P(S=1\mid O) = \sigma(\beta_0+\beta^TO), \]
e i parametri vengono stimati massimizzando la likelihood condizionata
\[ \prod_iP(S_i\mid O_i). \]
Il modello generativo, usando gli stessi dati, cerca invece di stimare
\[ P(S) \]
e
\[ P(O\mid S). \]
Da queste quantità costruisce
\[ P(O,S) = P(O\mid S)P(S) \]
e soltanto successivamente ricava
\[ P(S\mid O) \]
mediante normalizzazione e teorema di Bayes.
La distinzione può essere condensata nelle due espressioni:
\[ \boxed{ \text{discriminativo: } (O,S) \longrightarrow \text{apprende direttamente }P(S\mid O) } \]
e
\[ \boxed{ \text{generativo: } (O,S) \longrightarrow \text{apprende }P(O\mid S),P(S) \longrightarrow P(S\mid O) }. \]
Il punto decisivo è quindi che la natura discriminativa o generativa non dipende semplicemente dalla forma della tabella di training. Entrambi i modelli possono utilizzare le stesse coppie osservazione-target.
Ciò che cambia è la funzione probabilistica che viene parametrizzata e ottimizzata.
La regressione logistica massimizza direttamente una likelihood della forma
\[ P(S\mid O), \]
mentre un modello generativo cerca di descrivere la distribuzione congiunta attraverso la fattorizzazione
\[ P(O,S) = P(O\mid S)P(S). \]
In questo senso la distinzione teorica vista all’inizio del saggio coincide perfettamente con ciò che avviene nel codice: il discriminativo impara direttamente la probabilità normalizzata dello stato data l’osservazione; il generativo impara invece una struttura probabilistica più ampia dalla quale quella stessa probabilità può essere derivata.