Metodo K-Means Elbow e analisi della silhouette con Yellowbrick e Scikit-Learn PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Metodo K-Means gomito e analisi della silhouette con Yellowbrick e Scikit-Learn

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 punteggio della silhouette per k indica il cluster utilizzando il metodo del gomito

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()

sagoma per i cluster kmeans

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!

Timestamp:

Di più da Impilamento