Metoda K-Means Elbow și analiza siluetei cu Yellowbrick și Scikit-Learn PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Metoda K-Means Elbow și analiza siluetei cu Yellowbrick și Scikit-Learn

Introducere

K-Means este unul dintre cei mai populari algoritmi de grupare. Având puncte centrale față de un cluster, grupează alte puncte în funcție de distanța lor față de acel punct central.

Un dezavantaj al K-Means este nevoia de a alege numărul de clustere, K, înainte de a rula algoritmul care grupează punctele.

Dacă doriți să citiți un ghid aprofundat despre K-Means Clustering, aruncați o privire la „K-Means Clustering cu Scikit-Learn”.

Metoda cotului și analiza siluetei

Cele mai frecvent utilizate tehnici pentru alegerea numărului de K sunt Metoda cotului si Analiza siluetei.

Pentru a facilita alegerea Ks, the Yellowbrick biblioteca împachetează codul cu bucle for și o diagramă pe care am scrie de obicei în 4 linii de cod.

Pentru a instala Yellowbrick direct de pe un notebook Jupyter, rulați:

! pip install yellowbrick

Să vedem cum funcționează pentru un set de date familiar care face deja parte din Scikit-learn, the Iris set de date.

Primul pas este să importați setul de date, KMeans și yellowbrick biblioteci și încărcați datele:

from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer

iris = load_iris()

Observați aici, importăm KElbowVisualizer și SilhouetteVisualizer din yellowbrick.cluster, acestea sunt modulele pe care le vom folosi pentru a vizualiza rezultatele Elbow și Silhouette!

După încărcarea setului de date, în data cheia grupului (un tip de date care este o extensie a unui dicționar) sunt valorile punctelor pe care vrem să le grupăm. Dacă vrei să știi ce reprezintă numerele, aruncă o privire la iris['feature_names'].

Se știe că setul de date Iris conține trei tipuri de iris: „versicolor”, „virginica” și „setosa”. De asemenea, puteți inspecta clasele din iris['target_names'] a verifica.

Deci, avem 4 caracteristici de grupat și ar trebui să fie separate în 3 clustere diferite, în funcție de ceea ce știm deja. Să vedem dacă rezultatele noastre cu metoda cotului și analiza siluetei vor corobora acest lucru.

Mai întâi, vom selecta valorile caracteristicilor:

print(iris['feature_names']) 
print(iris['target_names']) 

X = iris['data']

Apoi, putem crea un KMeans model, a KElbowVisualizer() instanță care va primi acel model împreună cu numărul de ks pentru care va fi calculată o metrică, în acest caz de la 2 la 11 Ks.

După aceea, potrivim vizualizatorul cu datele utilizate fit() și afișați complotul cu show(). Dacă nu este specificată o valoare, vizualizatorul folosește denaturare metrica, care calculează suma distanțelor pătrate de la fiecare punct la centrul său atribuit:

model = KMeans(random_state=42)

elb_visualizer = KElbowVisualizer(model, k=(2,11))
elb_visualizer.fit(X)    
elb_visualizer.show()  

Acum, avem deja un Scor de distorsiune Elbow pentru KMeans Clustering diagramă cu o linie verticală marcată care ar fi cel mai bun număr de ks, în acest caz, 4.

Se pare că metoda Elbow cu o metrică de distorsiune nu a fost cea mai bună alegere dacă nu știam numărul real de clustere. Va indica și Silhouette că există 4 grupuri? Pentru a răspunde la asta, trebuie doar să repetăm ​​ultimul cod cu un model cu 4 clustere și un obiect de vizualizare diferit:

model_4clust = KMeans(n_clusters = 4, random_state=42)

sil_visualizer = SilhouetteVisualizer(model_4clust)
sil_visualizer.fit(X)    
sil_visualizer.show()

scorul siluetei pentru k înseamnă grup folosind metoda cotului

Codul afișează a Siluetă grafică a grupării KMeans pentru 150 de mostre în 4 centre. Pentru a analiza aceste clustere, trebuie să ne uităm la valoarea coeficientului de siluetă (sau scorul), cea mai bună valoare a acestuia este mai aproape de 1. Valoarea medie pe care o avem este 0.5, marcat de linia verticală, și nu atât de bun.

De asemenea, trebuie să ne uităm la distribuția dintre grupuri – o parcelă bună are dimensiuni similare ale zonelor grupate sau puncte bine distribuite. În acest grafic, există 3 clustere mai mici (numărul 3, 2, 1) și un cluster mai mare (numărul 0), care nu este rezultatul la care ne așteptam.

Consultați ghidul nostru practic și practic pentru a învăța Git, cu cele mai bune practici, standarde acceptate de industrie și fisa de cheat incluse. Opriți căutarea pe Google a comenzilor Git și de fapt învăţa aceasta!

Să repetăm ​​același diagramă pentru 3 grupuri pentru a vedea ce se întâmplă:

model_3clust = KMeans(n_clusters = 3, random_state=42)

sil_visualizer = SilhouetteVisualizer(model_3clust)
sil_visualizer.fit(X)    
sil_visualizer.show()

silueta pentru clustere kmeans

Prin schimbarea numărului de clustere, scorul siluetei a primit 0.05 mai înalt și clusterele sunt mai echilibrate. Dacă nu am fi știut numărul real de clustere, experimentând și combinând ambele tehnici, am fi ales 3 în loc de 2 ca număr de Ks.

Acesta este un exemplu în care este importantă combinarea și compararea diferitelor valori, vizualizarea datelor și experimentarea cu diferite valori ale clusterelor pentru a conduce rezultatul în direcția corectă. Și, de asemenea, cum poate ajuta în acest proces o bibliotecă care facilitează această analiză!

Timestamp-ul:

Mai mult de la Stackabuse