Introduzione
K-Means è uno degli algoritmi di clustering più popolari. Avendo punti centrali in un cluster, raggruppa altri punti in base alla loro distanza da quel punto centrale.
Uno svantaggio di K-Means è dover scegliere il numero di cluster, K, prima di eseguire l'algoritmo che raggruppa i punti.
Se desideri leggere una guida approfondita al clustering K-Means, dai un'occhiata a "K-Means Clustering con Scikit-Learn".
Metodo del gomito e analisi della silhouette
Le tecniche più comunemente utilizzate per la scelta del numero di K sono le Metodo del gomito e la Analisi della sagoma.
Per facilitare la scelta delle K, il mattone giallo la libreria avvolge il codice con cicli for e una trama che di solito scriviamo in 4 righe di codice.
Per installare Yellowbrick direttamente da un notebook Jupyter, eseguire:
! pip install yellowbrick
Vediamo come funziona per un set di dati familiare che fa già parte di Scikit-learn, il Iris set di dati.
Il primo passo è importare il set di dati, KMeans
ed yellowbrick
librerie e caricare i dati:
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer
iris = load_iris()
Nota qui, importiamo il file KElbowVisualizer
ed SilhouetteVisualizer
da yellowbrick.cluster
, questi sono i moduli che useremo per visualizzare i risultati di Elbow e Silhouette!
Dopo aver caricato il set di dati, nel file data
chiave del gruppo (un tipo di dati che è un'estensione di un dizionario) sono i valori dei punti che vogliamo raggruppare. Se vuoi sapere cosa rappresentano i numeri, dai un'occhiata iris['feature_names']
.
È noto che il dataset di Iris contiene tre tipi di iris: 'versicolor', 'virginica' e 'setosa'. Puoi anche ispezionare le classi in iris['target_names']
verificare.
Quindi, abbiamo 4 funzionalità da raggruppare e dovrebbero essere separate in 3 diversi cluster in base a ciò che già sappiamo. Vediamo se i nostri risultati con il metodo Elbow e l'analisi della silhouette lo confermeranno.
Innanzitutto, selezioneremo i valori delle funzionalità:
print(iris['feature_names'])
print(iris['target_names'])
X = iris['data']
Quindi, possiamo creare un KMeans
modello, a KElbowVisualizer()
istanza che riceverà quel modello insieme al numero di ks per cui verrà calcolata una metrica, in questo caso da da 2 a 11 Ks.
Successivamente, adattiamo il visualizzatore ai dati utilizzati fit()
e visualizzare la trama con show()
. Se non viene specificata una metrica, il visualizzatore utilizza il distorsione metrica, che calcola la somma delle distanze al quadrato da ciascun punto al centro assegnato:
model = KMeans(random_state=42)
elb_visualizer = KElbowVisualizer(model, k=(2,11))
elb_visualizer.fit(X)
elb_visualizer.show()
Ora, abbiamo già un Gomito del punteggio di distorsione per il clustering di KMeans tracciare con una linea di marcatura verticale che sarebbe il miglior numero di ks, in questo caso, 4
.
Sembra che il metodo Elbow con una metrica di distorsione non fosse la scelta migliore se non conoscessimo il numero effettivo di cluster. Silhouette indicherà anche che ci sono 4 cluster? Per rispondere, dobbiamo solo ripetere l'ultimo codice con un modello con 4 cluster e un diverso oggetto visualizzatore:
model_4clust = KMeans(n_clusters = 4, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_4clust)
sil_visualizer.fit(X)
sil_visualizer.show()
Il codice visualizza a Silhouette plot di KMeans Clustering per 150 campioni in 4 centri. Per analizzare questi cluster, dobbiamo guardare il valore del coefficiente di silhouette (o punteggio), il suo valore migliore è più vicino a 1. Il valore medio che abbiamo è 0.5
, segnato dalla linea verticale, e non così buono.
Dobbiamo anche esaminare la distribuzione tra i cluster: una buona trama ha dimensioni simili di aree raggruppate o punti ben distribuiti. In questo grafico, ci sono 3 cluster più piccoli (numero 3, 2, 1) e un cluster più grande (numero 0), che non è il risultato che ci aspettavamo.
Dai un'occhiata alla nostra guida pratica e pratica per l'apprendimento di Git, con le migliori pratiche, gli standard accettati dal settore e il cheat sheet incluso. Smetti di cercare su Google i comandi Git e in realtà imparare esso!
Ripetiamo la stessa trama per 3 cluster per vedere cosa succede:
model_3clust = KMeans(n_clusters = 3, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_3clust)
sil_visualizer.fit(X)
sil_visualizer.show()
Modificando il numero di cluster, si ottiene il punteggio della silhouette 0.05
più alto e i grappoli sono più equilibrati. Se non avessimo conosciuto il numero effettivo di cluster, sperimentando e combinando entrambe le tecniche, avremmo scelto 3
invece di 2
come il numero di Ks.
Questo è un esempio di come la combinazione e il confronto di diverse metriche, la visualizzazione dei dati e la sperimentazione con diversi valori di cluster siano importanti per portare il risultato nella giusta direzione. E inoltre, come avere una libreria che faciliti tale analisi può aiutare in quel processo!