Hoe u de elbow-methode in python gebruikt om optimale clusters te vinden
Een van de meest voorkomende clusteralgoritmen bij machinaal leren staat bekend als k-means clustering .
K-means clustering is een techniek waarbij we elke waarneming uit een dataset in een van de K- clusters plaatsen.
Het einddoel is om K- clusters te hebben waarin waarnemingen binnen elke cluster behoorlijk op elkaar lijken, terwijl waarnemingen in verschillende clusters behoorlijk van elkaar verschillen.
Bij k-means clustering is de eerste stap het kiezen van een waarde voor K – het aantal clusters waarin we waarnemingen willen plaatsen.
Een van de meest gebruikelijke manieren om een waarde voor K te kiezen staat bekend als de elleboogmethode , waarbij een grafiek wordt gemaakt met het aantal clusters op de x-as en het totaal in de som van de kwadraten op de y-as. waar een „knie“ of draai in de plot verschijnt.
Het punt op de x-as waar de ‘knie’ voorkomt, vertelt ons het optimale aantal clusters dat we kunnen gebruiken in het k-means clusteringalgoritme.
Het volgende voorbeeld laat zien hoe u de elleboogmethode in Python gebruikt.
Stap 1: Importeer de benodigde modules
Eerst zullen we alle modules importeren die we nodig hebben om k-means clustering uit te voeren:
import pandas as pd
import numpy as np
import matplotlib. pyplot as plt
from sklearn. cluster import KMeans
from sklearn. preprocessing import StandardScaler
Stap 2: Maak het DataFrame
Vervolgens maken we een DataFrame met drie variabelen voor twintig verschillende basketbalspelers:
#createDataFrame
df = pd. DataFrame ({' points ': [18, np.nan, 19, 14, 14, 11, 20, 28, 30, 31,
35, 33, 29, 25, 25, 27, 29, 30, 19, 23],
' assists ': [3, 3, 4, 5, 4, 7, 8, 7, 6, 9, 12, 14,
np.nan, 9, 4, 3, 4, 12, 15, 11],
' rebounds ': [15, 14, 14, 10, 8, 14, 13, 9, 5, 4,
11, 6, 5, 5, 3, 8, 12, 7, 6, 5]})
#drop rows with NA values in any columns
df = df. dropna ()
#create scaled DataFrame where each variable has mean of 0 and standard dev of 1
scaled_df = StandardScaler(). fit_transform (df)
Stap 3: Gebruik de elleboogmethode om het optimale aantal clusters te vinden
Laten we zeggen dat we k-means-clustering willen gebruiken om vergelijkbare actoren te groeperen op basis van deze drie statistieken.
Om k-means-clustering in Python uit te voeren, kunnen we de KMeans- functie van de sklearn- module gebruiken.
Het belangrijkste argument voor deze functie is n_clusters , dat specificeert in hoeveel clusters waarnemingen moeten worden geplaatst.
Om het optimale aantal clusters te bepalen, zullen we een grafiek maken die het aantal clusters weergeeft, evenals de SSE (som van kwadratische fouten) van het model.
We gaan dan op zoek naar een ‘knie’ waar de som van de kwadraten begint te ‘buigen’ of te stabiliseren. Dit punt vertegenwoordigt het optimale aantal clusters.
De volgende code laat zien hoe u dit type plot maakt, waarin het aantal clusters op de x-as en de SSE op de y-as wordt weergegeven:
#initialize kmeans parameters kmeans_kwargs = { " init ": " random ", " n_init ": 10, " random_state ": 1, } #create list to hold SSE values for each k sse = [] for k in range(1, 11): kmeans = KMeans(n_clusters=k, ** kmeans_kwargs) kmeans. fit (scaled_df) sse. append (kmeans.inertia_) #visualize results plt. plot (range(1, 11), sse) plt. xticks (range(1, 11)) plt. xlabel (" Number of Clusters ") plt. ylabel (“ SSE ”) plt. show ()
In deze grafiek lijkt het erop dat er een knik of „knie“ is bij k = 3 clusters .
We zullen dus 3 clusters gebruiken bij het aanpassen van ons k-means clusteringmodel in de volgende stap.
Stap 4: Voer K-Means Clustering uit met Optimal K
De volgende code laat zien hoe u k-means-clustering op de dataset uitvoert met behulp van de optimale waarde voor k van 3:
#instantiate the k-means class, using optimal number of clusters
kmeans = KMeans(init=" random ", n_clusters= 3 , n_init= 10 , random_state= 1 )
#fit k-means algorithm to data
kmeans. fit (scaled_df)
#view cluster assignments for each observation
kmeans. labels_
array([1, 1, 1, 1, 1, 1, 2, 2, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0])
De resulterende tabel toont de clustertoewijzingen voor elke waarneming in het DataFrame.
Om deze resultaten gemakkelijker te kunnen interpreteren, kunnen we een kolom aan het DataFrame toevoegen waarin de clustertoewijzing van elke speler wordt weergegeven:
#append cluster assingments to original DataFrame
df[' cluster '] = kmeans. labels_
#view updated DataFrame
print (df)
points assists rebounds cluster
0 18.0 3.0 15 1
2 19.0 4.0 14 1
3 14.0 5.0 10 1
4 14.0 4.0 8 1
5 11.0 7.0 14 1
6 20.0 8.0 13 1
7 28.0 7.0 9 2
8 30.0 6.0 5 2
9 31.0 9.0 4 0
10 35.0 12.0 11 0
11 33.0 14.0 6 0
13 25.0 9.0 5 0
14 25.0 4.0 3 2
15 27.0 3.0 8 2
16 29.0 4.0 12 2
17 30.0 12.0 7 0
18 19.0 15.0 6 0
19 23.0 11.0 5 0
De clusterkolom bevat een clusternummer (0, 1 of 2) waaraan elke speler is toegewezen.
Spelers die tot hetzelfde cluster behoren, hebben ongeveer vergelijkbare waarden voor de kolommen punten , assists en rebounds .
Opmerking : u kunt hier de volledige documentatie voor de KMeans- functie van sklearn vinden.
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken in Python kunt uitvoeren:
Hoe lineaire regressie uit te voeren in Python
Hoe logistieke regressie uit te voeren in Python
Hoe K-Fold kruisvalidatie uit te voeren in Python