K-Meansi rühmitamine küünarnuki meetodil PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

K-Means Klasterdamine küünarnuki meetodil

K-keskmiste klasterdamine on järelevalveta õppimisalgoritm, mis rühmitab andmed iga punkti eukleidilise kauguse alusel keskpunktini, mida nimetatakse tsentroid. Keskpunktid on määratletud kõigi samas klastris olevate punktide abil. Algoritm valib esmalt tsentroididena juhuslikud punktid ja seejärel korrigeerib neid kuni täieliku lähenemiseni.

K-keskmiste kasutamisel on oluline meeles pidada, et klastrite arv on hüperparameeter, see defineeritakse enne mudeli käivitamist.

K-vahendeid saab Scikit-Learni abil rakendada vaid 3 koodireaga. Scikit-learnis on juba saadaval ka tsentroidide optimeerimise meetod, kmeans++, mis aitab mudelil kiiremini läheneda.

K-keskmiste klasterdamisalgoritmi rakendamiseks laadime alla Palmeri pingviinid andmekomplekt, valige veerud, mis klastritakse, ja kasutage Seaborni värvikoodiga klastritega hajuvusdiagrammi joonistamiseks.

märkused: saate andmestiku siit alla laadida link.

Impordime teegid ja laadime Penguinsi andmestiku, kärpides selle valitud veergudeni ja kaotame puuduvate andmetega read (neid oli ainult 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)

Saame kasutada küünarnuki meetodit, et oma andmete jaoks näidata klastreid. See seisneb küünarnukikujulise joonejoonise tõlgendamises. Klastrite arv on küünarnukkide kõverad. Graafiku x-telg on klastrite arv ja y-telg on klastrite ruutude summa (WCSS) iga klastrite arvu kohta:

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

Küünarnuki meetod näitab, et meie andmetel on 2 klastrit. Joonistame andmed enne ja pärast rühmitamist:

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-Meansi rühmitamine küünarnuki meetodil PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

See näide näitab, kuidas küünarnuki meetod on ainult viide, kui seda kasutatakse klastrite arvu valimiseks. Teame juba, et meil on andmekogumis 3 tüüpi pingviine, kuid kui me määraksime nende arvu küünarnuki meetodil, oleks tulemuseks 2 klastrit.

Kuna K-keskmine on andmete dispersiooni suhtes tundlik, vaatame klastrites veergude kirjeldavat statistikat:

df.describe().T 

Selle tulemuseks on:

 					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

Pange tähele, et keskmine on standardhälbest (std) kaugel, see näitab suurt dispersiooni. Proovime seda vähendada, skaleerides andmeid standardskaalariga:

from sklearn.preprocessing import StandardScaler

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

Nüüd kordame skaleeritud andmete jaoks küünarnuki meetodi protsessi:

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-Meansi rühmitamine küünarnuki meetodil PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

Seekord on soovitatav klastrite arv 3. Andmed saame koos kahe varasema graafikuga võrdluseks uuesti joonistada klastri siltidega:

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-Meansi rühmitamine küünarnuki meetodil PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

K-means Clusteringi kasutamisel peate eelnevalt määrama klastrite arvu. Nagu oleme näinud, kui kasutate meetodit meie valimiseks k klastrite arv, on tulemus vaid soovitus ja seda võib mõjutada andmete dispersioon. Klasterdamisel on oluline läbi viia süvaanalüüs ja genereerida rohkem kui üks erinevate _k_-dega mudel.

Kui andmetes ei ole eelnevat viidet, kui palju klastreid on, visualiseerige see, testige ja tõlgendage, et näha, kas klastrite tulemused on mõttekad. Kui ei, siis klastri uuesti. Lisaks vaadake rohkem kui ühte mõõdikut ja looge erinevad klastrite mudelid – K-keskmiste jaoks vaadake silueti skoori ja võib-olla ka hierarhilist klasterdamist, et näha, kas tulemused jäävad samaks.

Ajatempel:

Veel alates Stackabus