Esercizio - k-means a mano e gap statistic su cinque gruppi
Questa pagina non ha ancora la versione ripasso: qui sotto c'è il testo completo.
In questa pagina 4
Testo.
- Eseguire a mano il k-means con sui punti partendo dai centroidi e poi da ; confrontare le dispersioni e commentare.
- Calcolare per e dire quale indica il metodo del gomito.
- (Laboratorio) Su punti generati da gruppi gaussiani (centri , , , , , deviazione standard ) scegliere con il gomito e con la gap statistic.
Teoria usata: Clustering e k-meansIl clustering raggruppa osservazioni simili senza etichette, come preprocessing (un modello per ogni cluster) o come obiettivo (segmentazione clienti, organizzazione di documenti). K-means: si sceglie $K$, si inizializzano $K$ centroidi, si alterna assegnazione di ogni punto al centroide più vicino e aggiornamento di ogni centroide alla media dei suoi punti, fino a convergenza; minimizza $\mathrm{MSE}{\text{within}}=\frac1N\sum_k\sum{x_i\in C_k}|x_i-\mu_k|^2$ ma solo fino a un minimo locale, quindi dipende dall'inizializzazione. Il numero di cluster si sceglie col metodo del gomito (la dispersione cala sempre, si cerca dove rallenta) o con la gap statistic $\mathrm{Gap}(K)=E[\log W_K^{ref}]-\log W_K$ (si prende il più piccolo $K$ con $\mathrm{Gap}(K)\ge\mathrm{Gap}(K+1)-s_{K+1}$). Il clustering gerarchico agglomerativo parte da un cluster per punto e fonde i due più vicini (linkage single, complete, average, Ward) costruendo un dendrogramma; quello divisivo parte da un solo cluster. Programma di Telecomunicazioni: clustering.Clustering e k-means → (algoritmo, dispersione, gomito, gap statistic); la media come minimizzatore: Valore attesoIl valore atteso E[X] = Σ x p_X(x) è la media dei valori di X pesata con le loro probabilità (esiste se la serie converge assolutamente); per una funzione g vale E[g(X)] = Σ g(x) p_X(x) senza trovare la legge di g(X), ed E è lineare: E[aX + bY + c] = aE[X] + bE[Y] + c.Valore atteso →; logaritmi in Esponenziale e logaritmoLa funzione esponenziale a^x (base positiva diversa da 1) e la sua inversa, il logaritmo in base a, con grafici e proprietà.Esponenziale e logaritmo →.
1. k-means a mano ()
La dispersione è (in una dimensione la distanza è il valore assoluto della differenza).
Partenza A: centroidi e .
- Assegnazione. Ogni punto va al centroide più vicino: sono più vicini a (per esempio : distanza da e da , pareggio: si assegna al primo; : contro ), il punto va al secondo.
- Aggiornamento. , .
- Nuova assegnazione. Con centroidi e : dista da e da : va al primo; tutto è invariato: convergenza.
- .
Partenza B: centroidi e .
- Assegnazione. vanno a (distanze contro ); : distanza da e da : va a ; così , e .
- Aggiornamento. , .
- Nuova assegnazione. : dista da e da : resta nel secondo; : contro : secondo. Nulla cambia: convergenza.
- .
Commento. Due inizializzazioni portano a due minimi locali diversi: (il punto da solo) e (migliore). Il k-means non garantisce il minimo globale: si ripete da più inizializzazioni e si tiene la soluzione con minore.
2. Gomito
- : unico centroide, la media e (la varianza totale per ).
- migliore: .
- con centroidi iniziali : cluster , , con e .
scende da a a : il calo da a è ancora enorme e un aggiungerebbe quasi nulla (con , sempre). Il gomito è a , che corrisponde ai tre gruppi visibili (, , ): anche un punto isolato è un cluster.
3. Cinque gruppi: gomito e gap statistic
Gomito. Errore medio entro i cluster per : . Il calo da a è enorme (), poi quasi nulla: gomito a , il numero vero di gruppi. (Per ogni il k-means è stato lanciato più volte tenendo il minimo.)
Gap statistic.
- Per ogni : sui dati reali.
- Si generano 10 dataset di riferimento con punti uniformi nel rettangolo dei dati ( per ciascuna coordinata) e per ciascuno si calcola .
- e deviazione standard dei .
Risultati (una replica): per (), cioè lo stesso andamento del notebook (). Scelta: il più piccolo con :
- : ? No. : ? No. : ? No. : ? No.
- : ? Sì: .
Gomito e gap statistic concordano. Il vantaggio della gap statistic è un criterio oggettivo (il gomito è un criterio visivo): compara con dati senza struttura.
Codice
def wk(X, labels, centroids): # dispersione entro i cluster
return sum(((X[labels == j] - centroids[j]) ** 2).sum() for j in range(len(centroids)))
def gap(X, K, n_ref=10):
lo, hi = X.min(0), X.max(0)
logw = np.log(best_of_runs(X, K)) # k-means ripetuto, tiene W minimo
ref = [np.log(best_of_runs(np.random.uniform(lo, hi, X.shape), K)) for _ in range(n_ref)]
return np.mean(ref) - logw, np.std(ref)