K-Means Clustering met de Elleboogmethode PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

K-Means Clustering met de Elleboogmethode

K-means clustering is een niet-gesuperviseerd leeralgoritme dat gegevens groepeert op basis van elk punt euclidische afstand tot een centraal punt genaamd zwaartepunt. De zwaartepunten worden gedefinieerd door middel van alle punten die zich in hetzelfde cluster bevinden. Het algoritme kiest eerst willekeurige punten als zwaartepunten en past ze vervolgens aan tot volledige convergentie.

Een belangrijk ding om te onthouden bij het gebruik van K-means, is dat het aantal clusters een hyperparameter is, het zal worden gedefinieerd voordat het model wordt uitgevoerd.

K-means kan worden geรฏmplementeerd met Scikit-Learn met slechts 3 regels code. Scikit-learn heeft ook al een centroid-optimalisatiemethode beschikbaar, kbetekent++, waardoor het model sneller convergeert.

Om het K-means clustering-algoritme toe te passen, laden we de Palmer Pinguรฏns dataset, kies de kolommen die zullen worden geclusterd en gebruik Seaborn om een โ€‹โ€‹scatterplot met kleurgecodeerde clusters te plotten.

Note: U kunt de dataset hieruit downloaden link.

Laten we de bibliotheken importeren en de Penguins-gegevensset laden, deze bijsnijden tot de gekozen kolommen en rijen met ontbrekende gegevens laten vallen (er waren er maar 2):

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

df = pd.read_csv('penguins.csv')
print(df.shape) 
df = df[['bill_length_mm', 'flipper_length_mm']]
df = df.dropna(axis=0)

We kunnen de Elbow-methode gebruiken om een โ€‹โ€‹indicatie te krijgen van clusters voor onze gegevens. Het bestaat uit de interpretatie van een lijnplot met een elleboogvorm. Het aantal clusters zijn de elleboogbochten. De x-as van de plot is het aantal clusters en de y-as is de Within Clusters Sum of Squares (WCSS) voor elk aantal clusters:

wcss = []

for i in range(1, 11):
    clustering = KMeans(n_clusters=i, init='k-means++', random_state=42)
    clustering.fit(df)
    wcss.append(clustering.inertia_)
    
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss);

De elleboogmethode geeft aan dat onze gegevens 2 clusters hebben. Laten we de gegevens voor en na het clusteren plotten:

fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without clustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('Using the elbow method');

K-Means Clustering met de Elleboogmethode PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Dit voorbeeld laat zien hoe de Elbow-methode alleen een referentie is wanneer deze wordt gebruikt om het aantal clusters te kiezen. We weten al dat we 3 soorten pinguรฏns in de dataset hebben, maar als we hun aantal zouden bepalen met behulp van de Elbow-methode, zouden 2 clusters ons resultaat zijn.

Aangezien K-means gevoelig is voor gegevensvariantie, laten we eens kijken naar de beschrijvende statistieken van de kolommen die we clusteren:

df.describe().T 

Dit resulteert in:

 					count 	mean 		std 		min 	25% 	50% 	75% 	max
bill_length_mm 		342.0 	43.921930 	5.459584 	32.1 	39.225 	44.45 	48.5 	59.6
flipper_length_mm 	342.0 	200.915205 	14.061714 	172.0 	190.000 197.00 	213.0 	231.0

Merk op dat het gemiddelde ver van de standaarddeviatie (std) ligt, dit duidt op een hoge variantie. Laten we proberen het te verminderen door de gegevens te schalen met Standard Scaler:

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
scaled = ss.fit_transform(df)

Laten we nu het Elbow-methodeproces herhalen voor de geschaalde gegevens:

wcss_sc = []

for i in range(1, 11):
    clustering_sc = KMeans(n_clusters=i, init='k-means++', random_state=42)
    clustering_sc.fit(scaled)
    wcss_sc.append(clustering_sc.inertia_)
    
ks = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sns.lineplot(x = ks, y = wcss_sc);

K-Means Clustering met de Elleboogmethode PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Bekijk onze praktische, praktische gids voor het leren van Git, met best-practices, door de industrie geaccepteerde normen en bijgevoegd spiekbriefje. Stop met Googlen op Git-commando's en eigenlijk leren het!

Dit keer is het voorgestelde aantal clusters 3. We kunnen de gegevens met de clusterlabels opnieuw plotten, samen met de twee eerdere plots ter vergelijking:

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15,5))
sns.scatterplot(ax=axes[0], data=df, x='bill_length_mm', y='flipper_length_mm').set_title('Without cliustering')
sns.scatterplot(ax=axes[1], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering.labels_).set_title('With the Elbow method')
sns.scatterplot(ax=axes[2], data=df, x='bill_length_mm', y='flipper_length_mm', hue=clustering_sc.labels_).set_title('With the Elbow method and scaled data');

K-Means Clustering met de Elleboogmethode PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Wanneer u K-means Clustering gebruikt, moet u vooraf het aantal clusters bepalen. Zoals we hebben gezien bij het gebruik van een methode om onze k aantal clusters, het resultaat is slechts een suggestie en kan worden beรฏnvloed door de hoeveelheid variantie in gegevens. Het is belangrijk om bij clustering een diepgaande analyse uit te voeren en meer dan รฉรฉn model met verschillende _k_s te genereren.

Als er vooraf geen indicatie is van het aantal clusters in de gegevens, visualiseer het, test het en interpreteer het om te zien of de clusterresultaten zinvol zijn. Zo niet, cluster dan opnieuw. Kijk ook naar meer dan รฉรฉn metriek en concretiseer verschillende clustermodellen - voor K-means, kijk naar silhouetscore en misschien hiรซrarchische clustering om te zien of de resultaten hetzelfde blijven.

Tijdstempel:

Meer van Stapelmisbruik