Efficienti strategie per affrontare le sfide dell’inizializzazione di K-Means

Efficienti strategie per affrontare le sfide dell'inizializzazione di K-Means con successo

Utilizzo di n_init e K-Means++

immagine di Flo

Introduzione

K-Means è un algoritmo di clustering ampiamente utilizzato nell’apprendimento automatico, che vanta numerosi vantaggi ma presenta anche significative sfide. In questo articolo, approfondiremo le sue limitazioni e offriremo soluzioni semplici per affrontarle.

Come funziona K-Means?

K-Means è un algoritmo di clustering che partiziona i dati in K cluster. Inizializza casualmente K centroidi e poi assegna ogni punto dati al centroide più vicino. I centroidi vengono ricalcolati sulla base della media dei punti assegnati e il processo si ripete fino alla convergenza.

Lo illustrerò di seguito utilizzando la riduzione dimensionale con t-distributed stochastic neighbor embedding. Ogni cluster è rappresentato da un colore.

Clustering K-Means tramite T-SNE, immagine di Flo

K-Means inizia selezionando centroidi in modo casuale, il che implica che l’esito può variare in base a questa selezione iniziale. Se questi centroidi non vengono scelti saggiamente, potrebbero produrre cluster inaccurati. Per contrastare questo problema, possono essere adottate due strategie: “n_init” e “K-means++”.

<p+nella 'k'="" all'addestramento="" dalla="" del="" determinazione="" di="" illustreremo="" l'intero="" migliore="" modello.

Scelta del K ottimale

K rappresenta il numero di cluster, che è cruciale nell’algoritmo K-Means. Un K subottimale può portare a un clustering impreciso. La determinazione del K corretto spesso non è semplice e richiede solitamente una combinazione di conoscenze di dominio e tecniche analitiche. Utilizzeremo due tecniche chiamate metodo del gomito e punteggio Silhouette.

Metodo del gomito

Un metodo comune è il “metodo del gomito”, ma ci sono anche varie altre tecniche e considerazioni da tenere presente. Approfondiamo come selezionare al meglio il K per i tuoi dati.

from sklearn.metrics import silhouette_scorecost = []silhouettes = []K = range(2, 20)for k in K:    kmeans = KMeans(n_clusters=k, n_init=10)...