K-Means Clustering med albuemetoden PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

K-Means Clustering med albuemetoden

K-means clustering er en uovervåget læringsalgoritme, der grupperer data baseret på hvert punkt euklidisk afstand til et centralt punkt kaldet tyngdepunkt. Centroiderne er defineret ved hjælp af alle punkter, der er i samme klynge. Algoritmen vælger først tilfældige punkter som tyngdepunkter og gentager derefter justering af dem indtil fuld konvergens.

En vigtig ting at huske, når du bruger K-betyder, er, at antallet af klynger er en hyperparameter, det vil blive defineret før kørsel af modellen.

K-means kan implementeres ved hjælp af Scikit-Learn med kun 3 linjer kode. Scikit-learn har også allerede en tyngdepunktsoptimeringsmetode tilgængelig, kmeans++, der hjælper modellen med at konvergere hurtigere.

For at anvende K-betyder klyngealgoritme, lad os indlæse Palmer pingviner datasæt, vælg de kolonner, der skal grupperes, og brug Seaborn til at plotte et scatterplot med farvekodede klynger.

Bemærk: Du kan downloade datasættet herfra link.

Lad os importere bibliotekerne og indlæse Penguins-datasættet, trimme det til de valgte kolonner og slippe rækker med manglende data (der var kun 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)

Vi kan bruge albuemetoden til at have en indikation af klynger for vores data. Det består i fortolkningen af ​​et linjeplot med en albueform. Antallet af klynger er var albuebøjningerne. Plottets x-akse er antallet af klynger, og y-aksen er Kvadratsummen inden for klynger (WCSS) for hvert antal klynger:

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);

Albuemetoden indikerer, at vores data har 2 klynger. Lad os plotte dataene før og efter klyngedannelse:

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 med albuemetoden PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Dette eksempel viser, hvordan albuemetoden kun er en reference, når den bruges til at vælge antallet af klynger. Vi ved allerede, at vi har 3 typer pingviner i datasættet, men hvis vi skulle bestemme deres antal ved at bruge albuemetoden, ville 2 klynger være vores resultat.

Da K-means er følsom over for datavarians, lad os se på den beskrivende statistik for de kolonner, vi grupperer:

df.describe().T 

Dette resulterer i:

 					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

Bemærk at middelværdien er langt fra standardafvigelsen (std), dette indikerer høj varians. Lad os prøve at reducere det ved at skalere dataene med Standard Scaler:

from sklearn.preprocessing import StandardScaler

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

Lad os nu gentage albuemetodeprocessen for de skalerede data:

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 med albuemetoden PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Tjek vores praktiske, praktiske guide til at lære Git, med bedste praksis, brancheaccepterede standarder og inkluderet snydeark. Stop med at google Git-kommandoer og faktisk lærer det!

Denne gang er det foreslåede antal klynger 3. Vi kan plotte dataene med klyngemærkerne igen sammen med de to tidligere plots til sammenligning:

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 med albuemetoden PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Når du bruger K-means Clustering, skal du forudbestemme antallet af klynger. Som vi har set, når du bruger en metode til at vælge vores k antallet af klynger, er resultatet kun et forslag og kan påvirkes af mængden af ​​varians i data. Det er vigtigt at foretage en dybdegående analyse og generere mere end én model med forskellige _k_s ved klyngedannelse.

Hvis der ikke er nogen forudgående indikation af, hvor mange klynger der er i dataene, skal du visualisere det, teste det og fortolke det for at se, om klyngeresultaterne giver mening. Hvis ikke, klynge igen. Se også på mere end én metrik og instantiér forskellige klyngemodeller – for K-betyder, se på silhuetresultat og måske Hierarkisk klyngedannelse for at se, om resultaterne forbliver de samme.

Tidsstempel:

Mere fra Stablemisbrug