K-Means Klaszterezés az Elbow módszerrel PlatoBlockchain Data Intelligence. Függőleges keresés. Ai.

K-Means Klaszterezés könyök módszerrel

A K-means klaszterezés egy nem felügyelt tanulási algoritmus, amely minden egyes pont euklideszi távolsága alapján csoportosítja az adatokat egy központi ponthoz, ún. súlypontja. A súlypontokat az ugyanabban a klaszterben lévő összes pont átlaga határozza meg. Az algoritmus először véletlenszerű pontokat választ ki súlypontoknak, majd a teljes konvergenciaig iterálja azokat.

A K-közép használatakor fontos megjegyezni, hogy a klaszterek száma hiperparaméter, amelyet a modell futtatása előtt kell meghatározni.

A K-means a Scikit-Learn segítségével valósítható meg mindössze 3 sornyi kóddal. A Scikit-learn már rendelkezik egy centroid optimalizálási módszerrel is, kmeans++, ami segít a modellnek gyorsabban konvergálni.

A K-közép klaszterezési algoritmus alkalmazásához töltsük be a Palmer pingvinek adatkészletet, válassza ki a fürtözendő oszlopokat, és a Seaborn segítségével rajzoljon meg egy színkódolt fürtöket tartalmazó szórást.

Megjegyzések: Innen töltheti le az adatkészletet link.

Importáljuk a könyvtárakat, és töltsük be a Penguins adatkészletet, vágjuk le a kiválasztott oszlopokra, és dobjuk el a hiányzó adatokat tartalmazó sorokat (csak 2 volt):

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)

Használhatjuk az Elbow módszert, hogy az adatainkhoz tartozó klasztereket jelezzük. Ez egy könyök alakú vonalrajz értelmezéséből áll. A klaszterek száma a könyökhajlatok száma. A diagram x tengelye a klaszterek száma, az y tengely pedig a klaszterek négyzetösszege (WCSS) értéke minden egyes számú klaszterhez:

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

A könyök módszer azt jelzi, hogy adataink 2 klaszterből állnak. Ábrázoljuk a klaszterezés előtti és utáni adatokat:

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 Klaszterezés az Elbow módszerrel PlatoBlockchain Data Intelligence. Függőleges keresés. Ai.

Ez a példa bemutatja, hogy az Elbow metódus csak referenciaként szolgál a fürtök számának kiválasztásához. Azt már tudjuk, hogy 3 fajta pingvin található az adathalmazban, de ha a számukat Könyök módszerrel határoznánk meg, akkor 2 klaszter lenne az eredmény.

Mivel a K-means érzékeny az adatvarianciára, nézzük meg az általunk klaszterezett oszlopok leíró statisztikáit:

df.describe().T 

Ennek eredményeként:

 					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

Figyeljük meg, hogy az átlag messze van a szórástól (std), ez nagy szórást jelez. Próbáljuk meg csökkenteni az adatok skálázásával a Standard Scalerrel:

from sklearn.preprocessing import StandardScaler

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

Most ismételjük meg a Könyök módszer folyamatát a skálázott adatokhoz:

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 Klaszterezés az Elbow módszerrel PlatoBlockchain Data Intelligence. Függőleges keresés. Ai.

Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!

A klaszterek javasolt száma ezúttal 3. Összehasonlítás céljából ismét ábrázolhatjuk az adatokat a klasztercímkékkel együtt a két korábbi diagrammal:

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 Klaszterezés az Elbow módszerrel PlatoBlockchain Data Intelligence. Függőleges keresés. Ai.

A K-means Clustering használatakor előre meg kell határoznia a fürtök számát. Amint láttuk, amikor egy módszert választunk a mi k a klaszterek számát, az eredmény csak javaslat, és befolyásolhatja az adatok eltérésének mértéke. Fontos, hogy mélyreható elemzést végezzünk, és több modellt állítsunk elő különböző _k_-kkal a klaszterezés során.

Ha nincs előzetes jelzés arra vonatkozóan, hogy hány fürt van az adatokban, akkor vizualizálja, tesztelje és értelmezze, hogy megtudja, van-e értelme a klaszterezési eredményeknek. Ha nem, csoportosítsa újra. Ezenkívül nézzen meg egynél több mérőszámot, és példányosítsa meg a különböző klaszterezési modelleket – a K-átlagok esetében nézze meg a sziluett pontszámot és esetleg a hierarchikus klaszterezést, hogy lássa, az eredmények ugyanazok maradnak-e.

Időbélyeg:

Még több Stackabus