K-Means Clustering med albuemetoden PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

K-Means Clustering med albuemetoden

K-means clustering er en uovervåket læringsalgoritme som grupperer data basert på hvert punkt euklidisk avstand til et sentralt punkt kalt Tyngdepunktet. Sentroidene er definert ved hjelp av alle punkter som er i samme klynge. Algoritmen velger først tilfeldige punkter som centroider og itererer deretter og justerer dem til full konvergens.

En viktig ting å huske på når du bruker K-betyr, er at antall klynger er en hyperparameter, den vil bli definert før du kjører modellen.

K-means kan implementeres ved hjelp av Scikit-Learn med bare 3 linjer med kode. Scikit-learn har også allerede en tyngdepunktoptimaliseringsmetode tilgjengelig, kmeans++, som hjelper modellen med å konvergere raskere.

For å bruke K-betyr klyngealgoritmen, la oss laste inn Palmerpingviner datasett, velg kolonnene som skal grupperes, og bruk Seaborn til å plotte et spredningsplott med fargekodede klynger.

Merknader: Du kan laste ned datasettet fra denne link.

La oss importere bibliotekene og laste inn Penguins-datasettet, trimme det til de valgte kolonnene og slippe rader med manglende data (det var bare 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 bruke albuemetoden for å ha en indikasjon på klynger for våre data. Den består i tolkningen av et linjeplott med en albueform. Antall klynger er var albuebøyningene. X-aksen til plottet er antall klynger og y-aksen er Kvadratsummen innen klynger (WCSS) for hvert antall 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 dataene våre har 2 klynger. La oss plotte dataene før og etter klynging:

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. Vertikalt søk. Ai.

Dette eksemplet viser hvordan albuemetoden bare er en referanse når den brukes til å velge antall klynger. Vi vet allerede at vi har 3 typer pingviner i datasettet, men hvis vi skulle bestemme antallet ved å bruke albuemetoden, ville 2 klynger vært vårt resultat.

Siden K-means er sensitiv for datavarians, la oss se på den beskrivende statistikken for kolonnene 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

Legg merke til at gjennomsnittet er langt fra standardavviket (std), dette indikerer høy varians. La oss prøve å redusere det ved å skalere dataene med Standard Scaler:

from sklearn.preprocessing import StandardScaler

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

La oss nå gjenta albuemetoden for de skalerte dataene:

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. Vertikalt søk. Ai.

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!

Denne gangen er det foreslåtte antallet klynger 3. Vi kan plotte dataene med klyngeetikettene igjen sammen med de to tidligere plottene for 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. Vertikalt søk. Ai.

Når du bruker K-betyr Clustering, må du forhåndsbestemme antall klynger. Som vi har sett når du bruker en metode for å velge vår k antall klynger, er resultatet bare et forslag og kan påvirkes av mengden variasjon i data. Det er viktig å gjennomføre en dybdeanalyse og generere mer enn én modell med forskjellige _k_s ved klynging.

Hvis det ikke er noen forhåndsindikasjon på hvor mange klynger som er i dataene, visualiser det, test det og tolk det for å se om klyngeresultatene gir mening. Hvis ikke, cluster igjen. Se også på mer enn én beregning og instansier forskjellige klyngemodeller – for K-betyr, se på silhuettscore og kanskje hierarkisk klynging for å se om resultatene forblir de samme.

Tidstempel:

Mer fra Stackabuse