K-Means armbågsmetod och siluettanalys med Yellowbrick och Scikit-Learn PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

K-Means armbågsmetod och siluettanalys med Yellowbrick och Scikit-Learn

Beskrivning

K-Means är en av de mest populära klustringsalgoritmerna. Genom att ha centrala punkter till ett kluster grupperar det andra punkter baserat på deras avstånd till den centrala punkten.

En nackdel med K-Means är att behöva välja antalet kluster, K, innan du kör algoritmen som grupperar poäng.

Om du vill läsa en djupgående guide till K-Means Clustering, ta en titt på "K-Means Clustering med Scikit-Learn".

Armbågsmetod och siluettanalys

De mest använda teknikerna för att välja antalet K är Armbågsmetod och Siluettanalys.

För att underlätta valet av Ks, den Yellowbrick biblioteket avslutar koden med for loops och en plot vi vanligtvis skulle skriva in i 4 rader kod.

För att installera Yellowbrick direkt från en Jupyter-anteckningsbok, kör:

! pip install yellowbrick

Låt oss se hur det fungerar för en välbekant datauppsättning som redan är en del av Scikit-learn, Iris datasätt.

Det första steget är att importera datamängden, KMeans och yellowbrick bibliotek och ladda data:

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

iris = load_iris()

Observera här, vi importerar KElbowVisualizer och SilhouetteVisualizer från yellowbrick.cluster, det är de moduler vi kommer att använda för att visualisera resultat av armbåge och siluetter!

Efter att ha laddat datauppsättningen, i data gängets nyckel (en datatyp som är en förlängning av en ordbok) är värdena för de punkter vi vill klustra. Om du vill veta vad siffrorna representerar, ta en titt på iris['feature_names'].

Det är känt att Iris-datasetet innehåller tre typer av iris: 'versicolor', 'virginica' och 'setosa'. Du kan också inspektera klasserna i iris['target_names'] att verifiera.

Så vi har 4 funktioner att klustera och de bör separeras i 3 olika kluster enligt vad vi redan vet. Låt oss se om våra resultat med armbågsmetoden och siluettanalys kommer att bekräfta det.

Först väljer vi funktionsvärdena:

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

X = iris['data']

Sedan kan vi skapa en KMeans modell, a KElbowVisualizer() instans som kommer att ta emot den modellen tillsammans med antalet ks för vilka ett mått kommer att beräknas, i detta fall från 2 till 11 Ks.

Efter det passar vi visualiseraren med data med hjälp av fit() och visa handlingen med show(). Om ett mått inte anges, använder visualizern förvrängning metrisk, som beräknar summan av kvadratiska avstånd från varje punkt till dess tilldelade centrum:

model = KMeans(random_state=42)

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

Nu har vi redan en Distorsion Score Armbow för KMeans Clustering plotta med en vertikal linjemarkering som skulle vara det bästa antalet ks, i detta fall, 4.

Det verkar som att armbågsmetoden med en distorsionsmetrik inte var det bästa valet om vi inte visste det faktiska antalet kluster. Kommer Silhouette också att indikera att det finns 4 kluster? För att svara på det behöver vi bara upprepa den sista koden med en modell med 4 kluster och ett annat visualiseringsobjekt:

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

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

siluettpoäng för k betyder kluster med armbågsmetoden

Koden visar en Silhouette Plot of KMeans Clustering för 150 Samples i 4 Centers. För att analysera dessa kluster måste vi titta på värdet av siluettkoefficienten (eller poängen), dess bästa värde är närmare 1. Det genomsnittliga värdet vi har är 0.5, markerad med den vertikala linjen, och inte så bra.

Vi måste också titta på fördelningen mellan kluster – en bra tomt har liknande storlek på klustrade områden eller väl fördelade punkter. I den här grafen finns det 3 mindre kluster (nummer 3, 2, 1) och ett större kluster (nummer 0), vilket inte är det resultat vi förväntade oss.

Kolla in vår praktiska, praktiska guide för att lära dig Git, med bästa praxis, branschaccepterade standarder och medföljande fuskblad. Sluta googla Git-kommandon och faktiskt lära Det!

Låt oss upprepa samma plot för 3 kluster för att se vad som händer:

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

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

siluett för kmeans kluster

Genom att ändra antalet kluster fick siluettpoängen 0.05 högre och klustren är mer balanserade. Om vi ​​inte visste det faktiska antalet kluster, genom att experimentera och kombinera båda teknikerna, skulle vi ha valt 3 istället för 2 som antalet Ks.

Det här är ett exempel på hur det är viktigt att kombinera och jämföra olika mätvärden, visualisera data och experimentera med olika värden på kluster för att leda resultatet i rätt riktning. Och också, hur ett bibliotek som underlättar den analysen kan hjälpa till i den processen!

Tidsstämpel:

Mer från Stackabuse