K-Means Clustering z metodo Elbow PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

K-Means Clustering with the Elbow method

Združevanje v skupine K-means je nenadzorovan učni algoritem, ki združuje podatke na podlagi evklidske razdalje vsake točke do osrednje točke, imenovane središče. Težišča so definirana s sredstvi vseh točk, ki so v isti gruči. Algoritem najprej izbere naključne točke kot centroide in jih nato ponavlja do popolne konvergence.

Pomembna stvar, ki si jo morate zapomniti pri uporabi K-sredstev, je, da je število gruč hiperparameter, ki bo definiran pred zagonom modela.

K-means je mogoče implementirati s pomočjo Scikit-Learn s samo 3 vrsticami kode. Scikit-learn ima tudi že na voljo metodo optimizacije centroida, kmeans++, ki pomaga modelu hitreje konvergirati.

Če želite uporabiti algoritem združevanja v gruče K-means, naložimo Palmerjevi pingvini nabor podatkov, izberite stolpce, ki bodo združeni v gruče, in uporabite Seaborn, da narišete razpršeni grafikon z barvno kodiranimi grozdi.

Opombe: Nabor podatkov lahko prenesete s tega mesta povezava.

Uvozimo knjižnice in naložimo nabor podatkov Penguins, ga obrežemo na izbrane stolpce in izpustimo vrstice z manjkajočimi podatki (bila sta samo 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)

Metodo Elbow lahko uporabimo za navedbo grozdov za naše podatke. Sestavljen je iz interpretacije črtne ploskve z obliko komolca. Število grozdov je v upogibih komolcev. Os x grafa je število grozdov, os y pa vsota kvadratov znotraj grozdov (WCSS) za vsako število grozdov:

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

Metoda komolca kaže, da imajo naši podatki 2 skupini. Narišimo podatke pred in po združevanju v gruče:

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 z metodo Elbow PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Ta primer prikazuje, kako je metoda Elbow samo referenca, ko se uporablja za izbiro števila gruč. Že vemo, da imamo v naboru podatkov 3 vrste pingvinov, a če bi njihovo število ugotavljali z metodo Elbow, bi bil rezultat 2 grozda.

Ker je K-means občutljiv na varianco podatkov, si poglejmo opisno statistiko stolpcev, ki jih združujemo v gruče:

df.describe().T 

Rezultat tega je:

 					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

Upoštevajte, da je povprečje daleč od standardnega odklona (std), kar kaže na visoko varianco. Poskusimo ga zmanjšati s skaliranjem podatkov s standardnim merilnikom:

from sklearn.preprocessing import StandardScaler

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

Zdaj pa ponovimo postopek metode Elbow za pomanjšane podatke:

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 z metodo Elbow PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Oglejte si naš praktični, praktični vodnik za učenje Gita z najboljšimi praksami, standardi, sprejetimi v panogi, in priloženo goljufijo. Nehajte Googlati ukaze Git in pravzaprav naučiti it!

Tokrat je predlagano število gruč 3. Za primerjavo lahko ponovno narišemo podatke z oznakami gruč skupaj z obema prejšnjima grafoma:

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 z metodo Elbow PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Ko uporabljate K-means Clustering, morate vnaprej določiti število gruč. Kot smo videli pri uporabi metode za izbiro našega k število gruč, je rezultat le predlog in nanj lahko vpliva količina variance v podatkih. Pri združevanju v gruče je pomembno izvesti poglobljeno analizo in ustvariti več kot en model z različnimi _k_s.

Če ni predhodnega podatka o tem, koliko gruč je v podatkih, jih vizualizirajte, preizkusite in interpretirajte, da vidite, ali so rezultati združevanja v gruče smiselni. Če ne, znova združite. Oglejte si tudi več kot eno metriko in ustvarite različne modele združevanja v gruče – za K-srednje vrednosti si oglejte oceno silhuet in morda hierarhično združevanje v gruče, da vidite, ali rezultati ostanejo enaki.

Časovni žig:

Več od Stackabuse