K-Means Clustering Elbow-menetelmällä PlatoBlockchain Data Intelligence. Pystysuuntainen haku. Ai.

K-Means Clustering kyynärpäämenetelmällä

K-keskiarvoklusterointi on valvomaton oppimisalgoritmi, joka ryhmittelee tiedot kunkin pisteen euklidisen etäisyyden perusteella keskipisteeseen ns. sentroidi. Centroidit määritellään kaikkien samassa klusterissa olevien pisteiden avulla. Algoritmi valitsee ensin satunnaiset pisteet sentroidiksi ja toistaa sitten säätämällä niitä, kunnes ne ovat täydellisessä konvergenssissa.

Tärkeä asia K-keskiarvoa käytettäessä on muistaa, että klusterien määrä on hyperparametri, se määritellään ennen mallin ajoa.

K-means voidaan toteuttaa Scikit-Learnin avulla vain 3 rivillä koodia. Scikit-learnillä on myös jo sentroidin optimointimenetelmä, kmeans++, mikä auttaa mallia lähentymään nopeammin.

Käyttääksesi K-keskiarvojen klusterointialgoritmia, ladataan Palmer Penguins tietojoukko, valitse sarakkeet, jotka klusteroidaan, ja käytä Seabornia piirtämään sirontakaavio värikoodattujen klustereiden kanssa.

Huomautuksia: Voit ladata tietojoukon tästä linkkiä.

Tuodaan kirjastot ja ladataan Penguins-tietojoukko, leikataan se valittuihin sarakkeisiin ja pudotetaan puuttuvia tietoja sisältäviä rivejä (niitä oli vain 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)

Voimme käyttää Elbow-menetelmää saadaksemme osoituksen tietojemme klusteista. Se koostuu kyynärpään muotoisen viivakuvan tulkinnasta. Klusterien määrä on ollut kyynärpään mutkissa. Kaavion x-akseli on klusterien lukumäärä ja y-akseli on klustereiden sisällä oleva neliösumma (WCSS) jokaiselle klusterimäärälle:

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

Kyynärpäämenetelmä osoittaa, että tiedoissamme on 2 klusteria. Piirretään tiedot ennen ja jälkeen klusteroinnin:

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 Elbow-menetelmällä PlatoBlockchain Data Intelligence. Pystysuuntainen haku. Ai.

Tämä esimerkki osoittaa, kuinka kyynärpäämenetelmä on vain viite, kun sitä käytetään klusterien lukumäärän valinnassa. Tiedämme jo, että tietojoukossamme on 3 tyyppistä pingviinejä, mutta jos määrittäisimme niiden lukumäärän Elbow-menetelmällä, tuloksenamme olisi 2 klusteria.

Koska K-means on herkkä datan varianssille, katsotaanpa klusteroimiemme sarakkeiden kuvaavia tilastoja:

df.describe().T 

Tämä johtaa:

 					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

Huomaa, että keskiarvo on kaukana keskihajonnasta (std), mikä osoittaa suurta varianssia. Yritetään pienentää sitä skaalaamalla tiedot Standard Scalerilla:

from sklearn.preprocessing import StandardScaler

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

Toistetaan nyt kyynärpäämenetelmä skaalatuille tiedoille:

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 Elbow-menetelmällä PlatoBlockchain Data Intelligence. Pystysuuntainen haku. Ai.

Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!

Tällä kertaa ehdotettu klusterien lukumäärä on 3. Voimme piirtää tiedot uudelleen klusteritunnisteilla kahden edellisen kaavion kanssa vertailua varten:

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 Elbow-menetelmällä PlatoBlockchain Data Intelligence. Pystysuuntainen haku. Ai.

Kun käytät K-means Clusteringia, sinun on määritettävä klusterien määrä etukäteen. Kuten olemme nähneet, kun käytämme menetelmää valitaksemme k klustereiden määrä, tulos on vain ehdotus, ja siihen voi vaikuttaa tietojen varianssin määrä. Klusteroinnissa on tärkeää suorittaa syvällinen analyysi ja luoda useampi kuin yksi malli, jolla on erilaiset _k_s.

Jos tiedossa ei ole etukäteen ilmoitettua klustereiden määrää, visualisoi se, testaa se ja tulkitse se nähdäksesi, ovatko klusterointitulokset järkeviä. Jos ei, klusteri uudelleen. Tarkastele myös useampaa kuin yhtä mittaria ja luo erilaisia ​​klusterointimalleja – K-keskiarvojen osalta katso siluettipisteitä ja ehkä hierarkkista klusterointia nähdäksesi, pysyvätkö tulokset samoina.

Aikaleima:

Lisää aiheesta Stackabus