Esercizio - Regressione logistica one-vs-one e one-vs-all sul dataset iris
Questa pagina non ha ancora la versione ripasso: qui sotto c'è il testo completo.
In questa pagina 4
Testo (laboratorio LAB4, classificazione multiclasse). Dataset iris con due sole feature (sepal length, sepal width) e target a tre classi (setosa, versicolor, virginica). Dividere con campionamento stratificato ( training, test) e:
- addestrare con la regressione logistica (discesa del gradiente, , decadimento , 10 000 iterazioni) una strategia one-vs-one;
- addestrare una strategia one-vs-all;
- calcolare l'accuracy sul test per entrambe e commentare.
Teoria usata: Regressione logistica e softmaxLa regressione lineare non è adatta alla classificazione (valori fuori da [0,1], retta tirata dai punti lontani). La regressione logistica passa il predittore lineare dalla sigmoide $\sigma(z)=1/(1+e^{-z})$ e interpreta $\hat y=\sigma(x^T\beta)$ come $P(y=1\mid x)$: si predice la classe 1 se $\hat y\ge0{,}5$, cioè $x^T\beta\ge0$ (bordo lineare). L'errore quadratico dà una funzione non convessa; si usa la log-verosimiglianza negativa $-\sum[y\log\hat y+(1-y)\log(1-\hat y)]$, convessa, con gradiente $X^T(\hat y-y)$ e nessuna formula chiusa (discesa del gradiente). Per più classi: one-vs-one ($C(C-1)/2$ classificatori, voto), one-vs-all ($C$ classificatori, massima probabilità), o la softmax $p_c=e^{z_c}/\sum_ke^{z_k}$ con cross-entropia. Si può regolarizzare (ridge, LASSO, Elastic Net) e la cross-validation si fa stratificata. Approfondimento: non nel programma di Telecomunicazioni.Regressione logistica e softmax → (logistica binaria, one-vs-one, one-vs-all); Metriche di classificazioneIn classificazione binaria ogni previsione è vero positivo (TP), vero negativo (TN), falso positivo (FP, errore di tipo I) o falso negativo (FN, errore di tipo II). Da queste quattro quantità: accuracy $=\frac{TP+TN}{TP+TN+FP+FN}$, specificità $=\frac{TN}{TN+FP}$, precision $=\frac{TP}{TP+FP}$, recall $=\frac{TP}{TP+FN}$, e la loro media armonica $F_1=\frac{2PR}{P+R}$. Con dati sbilanciati l'accuracy inganna (un modello che predice sempre la classe maggioritaria ha 99%): si usano precision, recall, F1, ROC-AUC, la cross-validation stratificata e il riequilibrio con undersampling o oversampling (non SMOTE). Cambiando la soglia sulla probabilità si ottiene la curva ROC (TPR contro FPR) e l'area AUC. Approfondimento: non nel programma di Telecomunicazioni.Metriche di classificazione → (accuracy, matrice di confusione).
Numero di classificatori e dati usati
Con classi:
- one-vs-one: classificatori (setosa-versicolor, versicolor-virginica, virginica-setosa); ciascuno è addestrato solo sui campioni delle due classi coinvolte ( su ), con etichetta per la prima classe e per la seconda;
- one-vs-all: classificatori (ciascuna classe contro le altre due); ciascuno è addestrato su tutti i campioni, con positivi e negativi: un po' sbilanciato (il difetto tipico: la classe «resto» è più numerosa).
La divisione stratificata dà training e test campioni ( per classe).
Previsione
- One-vs-one: ogni classificatore binario vota per la prima o per la seconda classe; per ogni campione si contano i voti e vince la classe con più voti; i pareggi si risolvono a caso (altre scelte: conoscenza del dominio o media delle probabilità).
- One-vs-all: si calcolano le tre probabilità e si sceglie la classe con probabilità massima.
Risultati (seme 0)
Entrambe le strategie danno accuracy sul test ( campioni su ). Matrice di confusione dell'one-vs-all (le righe sono le classi vere):
| setosa | versicolor | virginica | |
|---|---|---|---|
| setosa | |||
| versicolor | |||
| virginica |
La setosa è separata perfettamente (le sue feature del sepalo sono molto diverse). Versicolor e virginica si sovrappongono nelle due variabili del sepalo, quindi un classificatore lineare le confonde ( errori su ). I coefficienti one-vs-all sono circa: setosa (sepalo corto e largo), versicolor (si associa solo alla larghezza, con segno negativo), virginica (sepalo lungo).
Commento. I due schemi coincidono nell'accuracy, perché il difetto è nelle feature, non nella strategia: aggiungendo le due variabili del petalo (che separano bene versicolor e virginica) l'accuracy sale molto (con LogisticRegression di scikit-learn e le stesse partizioni: con le due variabili del sepalo, con tutte e quattro le feature). Con la regressione softmax si addestrerebbe un solo modello con vettori di parametri e perdita cross-entropia.
Codice (struttura)
pairs = [(c0, c1), (c1, c2), (c2, c0)]
for a, b in pairs: # one-vs-one
m = (y_tr == a) | (y_tr == b)
beta[(a, b)] = train_logreg(X_tr[m], (y_tr[m] == a).astype(int), 0.1, 1e-4, 10000)
# previsione: per ogni campione, voto di ciascun classificatore, classe con più voti (pareggio a caso)
for c in classes: # one-vs-all
beta[c] = train_logreg(X_tr, (y_tr == c).astype(int), 0.1, 1e-4, 10000)
pred = classes[np.argmax([sigmoid(X_te1 @ beta[c]) for c in classes], axis=0)] # probabilità massima