Apprendimento delle reti bayesiane - parametri e struttura
In questa pagina 5
- apprendimento dei parametri (parameter learning): la struttura è nota, si stimano le CPT dai dati;
- apprendimento della struttura (structure learning): si ricava anche il grafo, con metodi globali (ricerca e punteggio) o locali (test di indipendenza condizionata).
Esempio di dati usato sotto: il golf delle slide, righe con attributi Outlook (sunny, overcast, rainy), Temperature (low, medium, high), Humidity (high, normal), Wind (yes, no) e classe Play ( = si gioca, = no). La rete è un classificatore bayesiano ingenuo (naive Bayes): è genitore di tutti gli attributi, che sono condizionalmente indipendenti dato (Incertezza - probabilità, regola di Bayes e indipendenza condizionataUn agente con osservazioni parziali non può usare regole logiche rigide ("mal di denti implica carie" è falso): usa la probabilità come grado di credenza e, con la teoria dell'utilità, sceglie l'azione con utilità attesa massima. Strumenti: distribuzione congiunta completa (tabella di $2^n$ valori), marginalizzazione $P(Y\mid e)=\alpha\sum_h P(Y,e,h)$ con costante di normalizzazione $\alpha=1/P(e)$, regola del prodotto $P(a,b)=P(a\mid b)P(b)$, regola di Bayes $P(\text{causa}\mid\text{effetto})=\frac{P(\text{effetto}\mid\text{causa})P(\text{causa})}{P(\text{effetto})}$ e indipendenza condizionata $P(a,b\mid c)=P(a\mid c)P(b\mid c)$, che permette di scomporre la congiunta in tabelle più piccole. Un test con sensibilità 73% e falsi positivi 12% su una malattia con prior 1/700 dà una probabilità a posteriori di appena 0,9%.Incertezza - probabilità, regola di Bayes e indipendenza condizionata →).
| Outlook | Temp | Humidity | Play |
|---|---|---|---|
| sunny | ? | high | N |
| sunny | high | high | N |
| overcast | high | high | P |
| rainy | medium | high | P |
| rainy | low | normal | P |
| rainy | low | normal | N |
| overcast | low | normal | P |
| sunny | medium | high | N |
| sunny | ? | normal | P |
| rainy | medium | normal | P |
| sunny | medium | normal | P |
| overcast | medium | high | P |
| overcast | high | normal | P |
| rainy | medium | high | N |
(Wind non è osservata in nessuna riga: è una variabile nascosta; due valori di Temperature sono mancanti.)
Apprendimento dei parametri con dati completi
Se i dati sono sufficienti e completi e la topologia è nota, la CPT di ogni nodo si stima dalle frequenze. È lo stimatore di massima verosimiglianza (maximum likelihood, ML): fra tutte le CPT possibili, la frequenza dei dati è quella che rende i dati più probabili.
Formula (stima ML). Per un nodo con genitori : dove conta le righe con e quelle con (qualunque ).
Esempio (golf). , . Per Outlook dato ci sono righe di classe (righe ): sunny, overcast, rainy, quindi , , .
Il vantaggio della scomposizione è anche statistico: con campioni, la congiunta di tre booleane ha combinazioni (circa campioni ciascuna), mentre , , hanno circa , , campioni per numero.
Smoothing di Laplace
Se un evento non compare nei dati, la sua stima è , che significa "impossibile": nel golf azzererebbe, nel prodotto del classificatore, ogni riga con overcast. Lo smoothing di Laplace parte da una distribuzione uniforme e la aggiorna con i dati.
Formula (Laplace). Variabile discreta con valori, campioni, in cui compare volte: (Per una CPT: = righe con quella configurazione dei genitori.)
Esempi. Moneta lanciata volte con sempre testa: , , , : , . Nel golf: , : , , (somma ). Più dati ci sono, meno la correzione pesa: con la stima .
Grafico interattivo: Stima di Laplace di P(testa) quando in N lanci esce sempre testa: (1+N)/(2+N); per N = 10 vale 11/12, e tende a 1 al crescere di N (la stima ML varrebbe sempre 1)
Dati incompleti
Due situazioni:
- valori mancanti: alcune celle di una o più variabili sono vuote (le due del golf);
- variabili nascoste: una variabile del modello non ha alcun dato (la del golf).
Valori mancanti
Alternative: eliminare la riga; usare un valore speciale "sconosciuto"; sostituire con il valore più frequente (moda); stimare il valore dalle altre variabili della riga, che è di solito la scelta migliore.
Procedura (completamento). (1) Stimare i parametri iniziali con le righe complete. (2) Per ogni riga con valori mancanti: istanziare le variabili note; con l'inferenza probabilistica calcolare la distribuzione a posteriori delle variabili mancanti; assegnare il valore più probabile. (3) Aggiungere la riga completata e ristimare i parametri.
Golf. Riga : . Poiché in un naive Bayes ogni attributo è indipendente dagli altri dato , vale . Le righe complete di classe sono (temperature high, low, medium, medium): , quindi . Riga : , dalle righe complete di classe (low , medium , high ): , di nuovo . Le slide completano entrambe con .
Variabili nascoste: l'algoritmo EM
Per stimare le CPT di una variabile nascosta si usa l'Expectation-Maximization (EM), che ripete due fasi:
- passo E (expectation): si stimano i valori mancanti con i parametri correnti, per inferenza;
- passo M (maximization): si aggiornano i parametri con i dati completati.
Algoritmo (EM). (1) Stimare con ML le CPT dei nodi completi (quelli per cui valore e genitori sono nei dati). (2) Inizializzare i parametri ignoti con valori casuali. (3) Con i parametri correnti stimare le variabili nascoste dalle altre, per inferenza. (4) Usare le stime per completare la tabella. (5) Ristimare i parametri delle nascoste. (6) Ripetere - finché i parametri non cambiano in modo significativo.
Golf, variabile . Si parte da . Con questa CPT si stima Wind in ogni riga e si sceglie il valore più probabile; nelle slide la tabella riempita ha Wind (righe -). Ristimando:
- righe (): Wind : , ;
- righe (): : , .
Nuova CPT (righe , ; colonne no, yes), come nelle slide. Osservazione: con una CPT uniforme tutte le righe hanno la stessa probabilità per i due valori di Wind, quindi la scelta del primo riempimento è arbitraria; inoltre, essendo Wind una foglia senza dati, la verosimiglianza dei dati osservati non dipende affatto da e la CPT non è identificabile. L'EM è utile quando la variabile nascosta ha come figli variabili osservate, che portano informazione.
Apprendimento della struttura
Obiettivo: ottenere il grafo dai dati. È difficile perché:
- il numero di strutture possibili cresce più che esponenzialmente nel numero di variabili: i DAG su nodi sono (già per superano );
- servono molti dati per misure statistiche affidabili.
Esistono tecniche per alberi, poli-alberi e DAG generici. Per il caso generale due classi:
- metodi globali: ricerca euristica nello spazio delle strutture a partire da una iniziale, con una variazione a ogni passo; la struttura migliore si sceglie con un punteggio (score, ad esempio BIC, MDL);
- metodi locali: si valutano le relazioni di (in)dipendenza tra sottoinsiemi di variabili, e si ricostruisce la rete passo passo. Il più noto è l'algoritmo PC, che si ritrova nella scoperta causale (Controfattuali e scoperta causaleUn controfattuale chiede «cosa sarebbe successo a questo individuo se X fosse stato x?»: $Y_x(u)$ è il valore di Y nel modello $M_x$ (equazione di X sostituita da X=x) con le esogene fissate al valore $u$ dell'individuo. Si calcola in tre passi: abduzione (aggiornare $P(U)$ con l'evidenza, nel caso deterministico ricavare $u$ dai dati), azione (sostituire l'equazione di X con la costante), predizione (calcolare Y in $M_x$). Differenza con gli interventi: $P(Y\mid do(x))\equiv P(Y_x)$ è a livello di popolazione, ma in generale $P(Y\mid do(x),z)\ne P(Y_x\mid z)$ perché nel secondo il condizionamento è prima dell'intervento. Nei modelli lineari gaussiani i coefficienti di regressione di ogni variabile sui suoi genitori sono i coefficienti strutturali, e l'effetto causale totale è la somma dei prodotti dei coefficienti lungo i cammini non backdoor. Scoperta causale (algoritmo PC): si parte dal grafo completo non orientato, si toglie ogni arco X−Y con $X\perp!!!\perp Y\mid Z$ a $|Z|$ crescente (test di Fisher), si orientano i collider (Z mai nell'insieme separatore), poi si propaga l'orientamento; catena e fork non sono distinguibili (stessa classe di equivalenza di Markov). Assunzioni: aciclicità, sufficienza, Markov, fedeltà. Argomento del corso da 9 CFU.Controfattuali e scoperta causale →).
Funzioni di punteggio e BIC
Il punteggio misura quanto bene una struttura spiega i dati e deve bilanciare precisione e complessità: la sola verosimiglianza premia sempre il grafo con più archi (più parametri adattano meglio i dati, fino all'overfitting, vedi Overfitting, ridge regression e cross-validationUna buona prestazione sul training non basta: serve stimare quella su dati nuovi. La cross-validation (K-fold: $k$ parti, ciascuna a turno come test, errore medio; Monte Carlo: $k$ divisioni casuali con quota di test $q$; leave-one-out se $k=n$) evita di dipendere da una sola divisione casuale. L'errore atteso si scompone in $\text{bias}^2+\text{varianza}+\sigma^2$: i modelli semplici fanno underfitting (bias alto), quelli complessi overfitting (varianza alta). La regolarizzazione aggiunge alla perdita una penalità: la ridge regression minimizza $|y-X\beta|^2+\lambda\sum_{j\ge1}\beta_j^2$ e ha soluzione $\beta=(X^TX+\lambda\tilde I)^{-1}X^Ty$ (l'intercetta non si penalizza, le feature si standardizzano): riduce i coefficienti, rende l'inversa stabile con feature collineari, e $\lambda$ è un iperparametro scelto con la validazione (cross-validation annidata per non contaminare il test).Overfitting, ridge regression e cross-validation →).
Formula (BIC). con numero di campioni e numero di parametri indipendenti del modello. Il secondo termine penalizza la complessità. Si sceglie il massimo.
Esempio svolto. Due booleane , campioni: , , , . Confrontare (nessun arco) e (), con naturale.
- : campioni con , con ; con , con . . Parametri ( e ): penalità . .
- : stesso termine per (); per con : ; con : ; . Parametri (): penalità . .
: i dati giustificano l'arco (la verosimiglianza guadagna , la penalità costa ). Con dati più deboli (per esempio campioni nelle quattro celle) la verosimiglianza guadagna solo e vince la rete senza arco ( contro ).
Ricerca: hill climbing
Algoritmo (hill climbing). (1) Generare una struttura iniziale (per esempio un albero). (2) Calcolarne il punteggio. (3) Aggiungere, togliere o invertire un arco. (4) Calcolare il punteggio della nuova struttura. (5) Se migliora, tenere la modifica; altrimenti tornare alla precedente. (6) Ripetere - finché non ci sono più miglioramenti.
È una ricerca locale (Ricerca informata - greedy best-first, A* ed euristicheLa ricerca informata usa una funzione euristica h(n) che stima il costo da n all'obiettivo. Greedy best-first espande il nodo con h minima (f = h): veloce ma non ottima né in generale completa. A∗ usa f = g + h e, con h ammissibile (mai sopra il costo vero) e, sul grafo con tabella dei raggiunti, consistente, è completa e ottima; il fattore di diramazione effettivo b∗ misura la qualità di h, e un'euristica che ne domina un'altra espande meno nodi. A∗ pesato (f = g + W h) rinuncia all'ottimalità per espandere meno nodi. Per i problemi in cui conta solo lo stato finale esiste la ricerca locale (hill climbing, simulated annealing, beam search, algoritmi genetici). In appendice, cenni di ricerca avversaria (minimax e potatura alfa-beta).Ricerca informata - greedy best-first, A* ed euristiche →): può fermarsi in un massimo locale. Fissare un ordinamento causale delle variabili (i genitori possono essere solo variabili precedenti) riduce il numero di strutture da valutare.
Codice
import math
from collections import Counter
# dati del golf (slide): Outlook, Temp (None = mancante), Humidity, Play; Wind non osservata
dati = [("sunny", None, "high", "N"), ("sunny", "high", "high", "N"),
("overcast", "high", "high", "P"), ("rainy", "medium", "high", "P"),
("rainy", "low", "normal", "P"), ("rainy", "low", "normal", "N"),
("overcast", "low", "normal", "P"), ("sunny", "medium", "high", "N"),
("sunny", None, "normal", "P"), ("rainy", "medium", "normal", "P"),
("sunny", "medium", "normal", "P"), ("overcast", "medium", "high", "P"),
("overcast", "high", "normal", "P"), ("rainy", "medium", "high", "N")]
valori = {0: ["sunny", "overcast", "rainy"], 1: ["low", "medium", "high"], 2: ["high", "normal"]}
def cpt(col, classe, laplace=False):
"""P(attributo | Play=classe) dalle righe complete; con laplace: (1+m)/(k+N)."""
righe = [r for r in dati if r[3] == classe and r[col] is not None]
n, k = len(righe), len(valori[col])
cont = Counter(r[col] for r in righe)
return {v: ((1 if laplace else 0) + cont[v]) / ((k if laplace else 0) + n)
for v in valori[col]}
print("ML P(Outlook|N):", cpt(0, "N"))
print("Laplace P(Outlook|N):", cpt(0, "N", laplace=True))
print("ML P(Temp|N) :", cpt(1, "N"))
def bic(dataset, genitori):
"""BIC = log P(D|m) - |m| log|D| / 2, per variabili binarie A, B (genitori di B: [] o [0])."""
N, ll, par = len(dataset), 0.0, 0
for var, gen in ((0, []), (1, genitori)):
conteggi = Counter((tuple(r[g] for g in gen), r[var]) for r in dataset)
for g in {c[0] for c in conteggi}:
tot = conteggi[(g, 0)] + conteggi[(g, 1)]
for x in (0, 1):
if conteggi[(g, x)]:
ll += conteggi[(g, x)] * math.log(conteggi[(g, x)] / tot)
par += 2 ** len(gen) # un parametro per ogni riga della CPT
return ll - par * math.log(N) / 2
D = [(1, 1)] * 7 + [(1, 0)] * 2 + [(0, 1)] * 3 + [(0, 0)] * 8 # (A, B), N = 20
print(bic(D, []), bic(D, [0])) # senza arco, con A -> BOutput: {'sunny': 0.6, 'overcast': 0.0, 'rainy': 0.4}, {'sunny': 0.5, 'overcast': 0.125, 'rainy': 0.375}, {'low': 0.25, 'medium': 0.5, 'high': 0.25}, -30.62145... -29.46920....
Domande d'esame
- Con lanci e , stimare con smoothing di Laplace. .
- A cosa serve il termine nel BIC? Penalizza il numero di parametri: evita di scegliere sempre la rete con più archi.
- Descrivere i due passi dell'algoritmo EM. E: con i parametri correnti si stimano (per inferenza) i valori delle variabili nascoste; M: si ristimano i parametri con i dati così completati; si ripete fino a convergenza.
- Perché si impiega lo smoothing nella stima delle CPT? Per evitare probabilità zero per eventi non osservati, che renderebbero impossibili casi solo rari.
Versione ripasso
- Due compiti: parametri (struttura nota, stima delle CPT) e struttura (metodi globali: ricerca con punteggio; metodi locali: test di indipendenza condizionata, algoritmo PC in Controfattuali e scoperta causaleUn controfattuale chiede «cosa sarebbe successo a questo individuo se X fosse stato x?»: $Y_x(u)$ è il valore di Y nel modello $M_x$ (equazione di X sostituita da X=x) con le esogene fissate al valore $u$ dell'individuo. Si calcola in tre passi: abduzione (aggiornare $P(U)$ con l'evidenza, nel caso deterministico ricavare $u$ dai dati), azione (sostituire l'equazione di X con la costante), predizione (calcolare Y in $M_x$). Differenza con gli interventi: $P(Y\mid do(x))\equiv P(Y_x)$ è a livello di popolazione, ma in generale $P(Y\mid do(x),z)\ne P(Y_x\mid z)$ perché nel secondo il condizionamento è prima dell'intervento. Nei modelli lineari gaussiani i coefficienti di regressione di ogni variabile sui suoi genitori sono i coefficienti strutturali, e l'effetto causale totale è la somma dei prodotti dei coefficienti lungo i cammini non backdoor. Scoperta causale (algoritmo PC): si parte dal grafo completo non orientato, si toglie ogni arco X−Y con $X\perp!!!\perp Y\mid Z$ a $|Z|$ crescente (test di Fisher), si orientano i collider (Z mai nell'insieme separatore), poi si propaga l'orientamento; catena e fork non sono distinguibili (stessa classe di equivalenza di Markov). Assunzioni: aciclicità, sufficienza, Markov, fedeltà. Argomento del corso da 9 CFU.Controfattuali e scoperta causale →). Esempio: golf, naive Bayes con Play genitore di Outlook, Temp, Humidity, Wind; righe, due Temp mancanti, Wind nascosta.
- ML con dati completi: , la frequenza che massimizza la verosimiglianza dei dati. Golf: ; , , . Con campioni, ha circa campioni per numero contro della congiunta.
- Smoothing di Laplace: , evita le probabilità zero. Moneta su testa: e . Golf: . Con più dati la correzione pesa meno.
- Valori mancanti: eliminare la riga, valore "sconosciuto", moda, oppure stima dagli altri valori della riga (la migliore): istanziare le note, inferenza per la posteriori, assegnare il valore più probabile, ristimare. Naive Bayes: per e per : medium in entrambe le righe.
- Variabili nascoste, EM: (1) ML sui nodi completi; (2) parametri nascosti casuali; (3) E: stimare le nascoste con i parametri correnti; (4) completare i dati; (5) M: ristimare; (6) ripetere fino a convergenza. Wind: da a (righe , ; colonne no, yes). Con CPT uniforme il primo riempimento è arbitrario, e una foglia senza dati non è identificabile: l'EM serve con nascoste che hanno figli osservati.
- Struttura: numero di DAG superesponenziale ( per ; già per nodi); servono molti dati.
- BIC , con numero di parametri: bilancia verosimiglianza e complessità (senza penalità vincerebbe sempre il grafo più ricco: Overfitting, ridge regression e cross-validationUna buona prestazione sul training non basta: serve stimare quella su dati nuovi. La cross-validation (K-fold: $k$ parti, ciascuna a turno come test, errore medio; Monte Carlo: $k$ divisioni casuali con quota di test $q$; leave-one-out se $k=n$) evita di dipendere da una sola divisione casuale. L'errore atteso si scompone in $\text{bias}^2+\text{varianza}+\sigma^2$: i modelli semplici fanno underfitting (bias alto), quelli complessi overfitting (varianza alta). La regolarizzazione aggiunge alla perdita una penalità: la ridge regression minimizza $|y-X\beta|^2+\lambda\sum_{j\ge1}\beta_j^2$ e ha soluzione $\beta=(X^TX+\lambda\tilde I)^{-1}X^Ty$ (l'intercetta non si penalizza, le feature si standardizzano): riduce i coefficienti, rende l'inversa stabile con feature collineari, e $\lambda$ è un iperparametro scelto con la validazione (cross-validation annidata per non contaminare il test).Overfitting, ridge regression e cross-validation →). Esempio : senza arco ; con : vince l'arco. Dati più deboli: vince l'assenza di arco ( contro ).
- Hill climbing (Ricerca informata - greedy best-first, A* ed euristicheLa ricerca informata usa una funzione euristica h(n) che stima il costo da n all'obiettivo. Greedy best-first espande il nodo con h minima (f = h): veloce ma non ottima né in generale completa. A∗ usa f = g + h e, con h ammissibile (mai sopra il costo vero) e, sul grafo con tabella dei raggiunti, consistente, è completa e ottima; il fattore di diramazione effettivo b∗ misura la qualità di h, e un'euristica che ne domina un'altra espande meno nodi. A∗ pesato (f = g + W h) rinuncia all'ottimalità per espandere meno nodi. Per i problemi in cui conta solo lo stato finale esiste la ricerca locale (hill climbing, simulated annealing, beam search, algoritmi genetici). In appendice, cenni di ricerca avversaria (minimax e potatura alfa-beta).Ricerca informata - greedy best-first, A* ed euristiche →): struttura iniziale (per esempio albero), punteggio, aggiungi/togli/inverti un arco, tieni se il punteggio sale, ripeti fino a nessun miglioramento (massimi locali); un ordine causale restringe la ricerca.
- Codice:
cpt(col, classe, laplace)conta le righe complete con ;bic(dataset, genitori)somma per ogni riga di CPT e sottrae . - Errori tipici: usare la sola verosimiglianza per scegliere la struttura; lasciare probabilità zero nelle CPT; credere che l'EM identifichi sempre la CPT di una variabile nascosta senza figli osservati; calcolare ML dividendo per totale invece di .
- Perché ML con la scomposizione: ogni CPT si stima da sola, con più campioni per numero; il naive Bayes del golf ha parametri liberi (Play, Outlook, Temp, Humidity, Wind) invece dei della congiunta.
- Calcolo di BIC in pratica: per ogni riga di CPT si somma sui valori con (la verosimiglianza ML), si conta un parametro per riga e si sottrae ; si confrontano le strutture e si prende il punteggio più alto.
- Quando conviene eliminare la riga: solo con pochissimi valori mancanti; altrimenti si perdono informazioni, e la moda o "sconosciuto" distorcono le frequenze.