K-Means Clustering dengan metode Elbow PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

K-Means Clustering dengan metode Elbow

K-means clustering adalah algoritma pembelajaran tanpa pengawasan yang mengelompokkan data berdasarkan jarak euclidean setiap titik ke titik pusat yang disebut pusat. Centroid didefinisikan dengan cara semua titik yang berada di cluster yang sama. Algoritme pertama-tama memilih titik-titik acak sebagai centroid dan kemudian melakukan iterasi untuk menyesuaikannya hingga konvergensi penuh.

Hal penting yang perlu diingat ketika menggunakan K-means, jumlah cluster adalah hyperparameter, akan ditentukan sebelum menjalankan model.

K-means dapat diimplementasikan menggunakan Scikit-Learn hanya dengan 3 baris kode. Scikit-learn juga sudah memiliki metode optimasi centroid yang tersedia, kmeans++, yang membantu model konvergen lebih cepat.

Untuk menerapkan algoritma pengelompokan K-means, mari kita memuat Penguin Palmer dataset, pilih kolom yang akan dikelompokkan, dan gunakan Seaborn untuk memplot scatterplot dengan cluster kode warna.

Note: Anda dapat mengunduh kumpulan data dari ini link.

Mari impor perpustakaan dan muat kumpulan data Penguins, potong ke kolom yang dipilih dan hapus baris dengan data yang hilang (hanya ada 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)

Kita dapat menggunakan metode Elbow untuk memiliki indikasi cluster untuk data kita. Ini terdiri dari interpretasi plot garis dengan bentuk siku. Jumlah cluster adalah tikungan siku. Sumbu x dari plot adalah jumlah cluster dan sumbu y adalah Jumlah Kotak Dalam Cluster (WCSS) untuk setiap jumlah cluster:

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

Metode siku menunjukkan data kami memiliki 2 cluster. Mari kita plot data sebelum dan sesudah clustering:

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 dengan metode Elbow PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Contoh ini menunjukkan bagaimana metode Elbow hanya menjadi acuan ketika digunakan untuk memilih jumlah cluster. Kita sudah tahu bahwa kita memiliki 3 jenis penguin dalam dataset, tetapi jika kita menentukan jumlahnya dengan menggunakan metode Elbow, 2 cluster akan menjadi hasil kita.

Karena K-means sensitif terhadap varians data, mari kita lihat statistik deskriptif dari kolom yang kita kelompokkan:

df.describe().T 

Ini menghasilkan:

 					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

Perhatikan bahwa mean jauh dari standar deviasi (std), ini menunjukkan varians yang tinggi. Mari kita coba menguranginya dengan menskalakan data dengan Standard Scaler:

from sklearn.preprocessing import StandardScaler

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

Sekarang, mari kita ulangi proses metode Elbow untuk data yang diskalakan:

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 dengan metode Elbow PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Lihat panduan praktis dan praktis kami untuk mempelajari Git, dengan praktik terbaik, standar yang diterima industri, dan termasuk lembar contekan. Hentikan perintah Googling Git dan sebenarnya belajar itu!

Kali ini, jumlah cluster yang disarankan adalah 3. Kita dapat memplot data dengan label cluster lagi bersama dengan dua plot sebelumnya untuk perbandingan:

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 dengan metode Elbow PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Saat menggunakan K-means Clustering, Anda harus terlebih dahulu menentukan jumlah cluster. Seperti yang telah kita lihat saat menggunakan metode untuk memilih k jumlah cluster, hasilnya hanya saran dan dapat dipengaruhi oleh jumlah varians dalam data. Penting untuk melakukan analisis mendalam dan menghasilkan lebih dari satu model dengan _k_s yang berbeda saat pengelompokan.

Jika tidak ada indikasi sebelumnya tentang berapa banyak cluster dalam data, visualisasikan, uji dan interpretasikan untuk melihat apakah hasil clustering masuk akal. Jika tidak, klaster lagi. Juga, lihat lebih dari satu metrik dan buat contoh model pengelompokan yang berbeda โ€“ untuk K-means, lihat skor siluet dan mungkin Pengelompokan Hirarki untuk melihat apakah hasilnya tetap sama.

Stempel Waktu:

Lebih dari penyalahgunaan