K-Means albuemetode og silhuettanalyse med Yellowbrick og Scikit-Learn PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

K-Means albuemetode og silhuettanalyse med Yellowbrick og Scikit-Learn

Introduksjon

K-Means er en av de mest populære klyngealgoritmene. Ved å ha sentrale punkter til en klynge, grupperer den andre punkter basert på deres avstand til det sentrale punktet.

En ulempe med K-Means er å måtte velge antall klynger, K, før du kjører algoritmen som grupperer poeng.

Hvis du vil lese en grundig guide til K-Means Clustering, ta en titt på "K-Means Clustering med Scikit-Learn".

Albuemetode og silhuettanalyse

De mest brukte teknikkene for å velge antall K-er er Albuemetode og Silhuettanalyse.

For å lette valget av K-er Yellowbrick biblioteket pakker inn koden med for loops og et plott vi vanligvis ville skrevet inn i 4 linjer med kode.

For å installere Yellowbrick direkte fra en Jupyter-notisbok, kjør:

! pip install yellowbrick

La oss se hvordan det fungerer for et kjent datasett som allerede er en del av Scikit-learn, Iris datasett.

Det første trinnet er å importere datasettet, KMeans og yellowbrick biblioteker, og last inn dataene:

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

iris = load_iris()

Legg merke til at vi importerer KElbowVisualizer og SilhouetteVisualizer fra yellowbrick.cluster, det er modulene vi skal bruke for å visualisere albue- og silhuettresultater!

Etter å ha lastet inn datasettet, i data nøkkelen til gruppen (en datatype som er en utvidelse av en ordbok) er verdiene til punktene vi ønsker å gruppere. Hvis du vil vite hva tallene representerer, ta en titt på iris['feature_names'].

Det er kjent at Iris-datasettet inneholder tre typer iris: 'versicolor', 'virginica' og 'setosa'. Du kan også inspisere klassene i iris['target_names'] å godkjenne.

Så vi har 4 funksjoner å gruppere, og de bør deles i 3 forskjellige klynger i henhold til det vi allerede vet. La oss se om resultatene våre med albuemetoden og silhuettanalysen vil bekrefte det.

Først vil vi velge funksjonsverdiene:

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

X = iris['data']

Deretter kan vi lage en KMeans modell, a KElbowVisualizer() forekomst som vil motta den modellen sammen med antall ks som en metrikk vil bli beregnet for, i dette tilfellet fra 2 til 11 Ks.

Etter det tilpasser vi visualiseringen med dataene ved hjelp av fit() og vise plottet med show(). Hvis en beregning ikke er spesifisert, bruker visualiseringen forvrengning metrikk, som beregner summen av kvadrerte avstander fra hvert punkt til dets tildelte senter:

model = KMeans(random_state=42)

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

Nå har vi allerede en Distortion Score Albue for KMeans Clustering plott med en vertikal linjemarkering som ville være det beste antallet ks, i dette tilfellet, 4.

Ser ut til at albuemetoden med en forvrengningsmetrikk ikke var det beste valget hvis vi ikke visste det faktiske antallet klynger. Vil Silhouette også indikere at det er 4 klynger? For å svare på det trenger vi bare å gjenta den siste koden med en modell med 4 klynger og et annet visualiseringsobjekt:

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

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

silhouette score for k betyr klynge ved bruk av albuemetoden

Koden viser en Silhuettplott av KMeans-gruppering for 150 prøver i 4 sentre. For å analysere disse klyngene må vi se på verdien av silhuettkoeffisienten (eller poengsummen), dens beste verdi er nærmere 1. Gjennomsnittsverdien vi har er 0.5, markert med den vertikale linjen, og ikke så bra.

Vi må også se på fordelingen mellom klynger – en god tomt har tilsvarende størrelser på klyngeområder eller godt fordelte punkter. I denne grafen er det 3 mindre klynger (nummer 3, 2, 1) og en større klynge (nummer 0), som ikke er resultatet vi forventet.

Sjekk ut vår praktiske, praktiske guide for å lære Git, med beste praksis, bransjeaksepterte standarder og inkludert jukseark. Slutt å google Git-kommandoer og faktisk lære den!

La oss gjenta det samme plottet for 3 klynger for å se hva som skjer:

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

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

silhuett for kmeans klynger

Ved å endre antall klynger fikk silhuettpoengsummen 0.05 høyere og klyngene er mer balanserte. Hvis vi ikke visste det faktiske antallet klynger, ved å eksperimentere og kombinere begge teknikkene, ville vi ha valgt 3 istedenfor 2 som antall Ks.

Dette er et eksempel på hvordan det å kombinere og sammenligne ulike beregninger, visualisere data og eksperimentere med ulike verdier av klynger er viktig for å lede resultatet i riktig retning. Og også, hvordan det å ha et bibliotek som forenkler den analysen kan hjelpe i den prosessen!

Tidstempel:

Mer fra Stackabuse