Algoritma K-Means Python: Panduan Lengkap untuk Clustering

Algoritma K-Means adalah salah satu algoritma clustering paling populer dan mudah dipahami. Tujuannya adalah untuk mempartisi sekumpulan data menjadi K klaster yang berbeda, di mana setiap titik data hanya termasuk dalam klaster yang memiliki rata-rata terdekat (centroid).

Dalam artikel ini, kita akan membahas konsep dasar algoritma K-Means, bagaimana cara kerjanya, dan yang terpenting, bagaimana mengimplementasikannya menggunakan Python dengan pustaka populer seperti scikit-learn.

Apa Itu Clustering?

Clustering, atau pengelompokan, adalah tugas dalam pembelajaran mesin yang bertujuan untuk menemukan kelompok-kelompok alami dalam sebuah data. Data yang berada dalam satu kelompok (klaster) seharusnya memiliki kesamaan satu sama lain, sementara data dari kelompok yang berbeda seharusnya berbeda satu sama lain.

Contoh aplikasi clustering meliputi:

Bagaimana Algoritma K-Means Bekerja?

Algoritma K-Means beroperasi dalam beberapa langkah iteratif. Mari kita uraikan prosesnya:

  1. Inisialisasi Centroid: Pertama, kita perlu menentukan berapa banyak klaster yang kita inginkan, yang dinotasikan sebagai K. Kemudian, K titik pusat (centroids) diinisialisasi. Ini bisa dilakukan secara acak atau menggunakan metode yang lebih canggih seperti K-Means++.
  2. Penetapan Titik Data ke Centroid Terdekat: Setiap titik data dalam kumpulan data dihitung jaraknya ke setiap centroid. Titik data kemudian ditetapkan ke centroid terdekat.
  3. Perhitungan Ulang Centroid: Setelah semua titik data ditetapkan ke klaster, posisi centroid diperbarui. Centroid baru dihitung sebagai rata-rata dari semua titik data yang termasuk dalam klaster tersebut.
  4. Iterasi: Langkah 2 dan 3 diulang hingga posisi centroid tidak lagi berubah secara signifikan, atau hingga jumlah iterasi maksimum tercapai. Ini berarti bahwa titik data tidak lagi berpindah klaster.

Tujuan utama algoritma ini adalah untuk meminimalkan variasi intra-klaster (jarak total dari setiap titik data ke centroid klaster masing-masing) dan memaksimalkan variasi antar-klaster (jarak antara centroid klaster yang berbeda).

Implementasi Algoritma K-Means dengan Python

scikit-learn adalah pustaka yang sangat kuat untuk pembelajaran mesin di Python, dan ia menyediakan implementasi K-Means yang efisien dan mudah digunakan.

Langkah-langkah Implementasi:

  1. Impor Pustaka: Kita memerlukan KMeans dari sklearn.cluster dan pustaka lain seperti numpy untuk manipulasi data dan matplotlib untuk visualisasi.
  2. Persiapkan Data: Pastikan data Anda dalam format numerik yang sesuai. Jika data Anda memiliki fitur kategorikal, Anda perlu melakukan encoding terlebih dahulu.
  3. Buat Objek KMeans: Inisialisasikan objek KMeans, tentukan jumlah klaster n_clusters.
  4. Latih Model: Gunakan metode fit() pada objek KMeans untuk melatih model dengan data Anda.
  5. Prediksi Klaster: Gunakan metode predict() untuk menetapkan setiap titik data ke klaster yang sesuai.

Contoh Kode Sederhana:

Berikut adalah contoh kode dasar untuk menggunakan K-Means di Python:


import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 1. Buat Data Sampel
# Misalnya, kita punya 2 fitur dan 100 titik data
np.random.seed(42) # untuk reproduktibilitas
X = np.random.rand(100, 2) * 10 # Data acak antara 0 dan 10

# 2. Tentukan Jumlah Klaster (K)
k = 3 # Kita ingin membagi data menjadi 3 klaster

# 3. Buat dan Latih Model KMeans
kmeans = KMeans(n_clusters=k, random_state=42, n_init=10) # n_init=10 untuk menghindari hasil acak yang buruk
kmeans.fit(X)

# 4. Dapatkan Hasil Clustering
labels = kmeans.labels_ # Label klaster untuk setiap titik data
centroids = kmeans.cluster_centers_ # Posisi centroid

# 5. Visualisasi Hasil
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', marker='o', edgecolor='k', s=50)
plt.scatter(centroids[:, 0], centroids[:, 1], c='red', marker='X', s=200, label='Centroids')
plt.title('Hasil Clustering K-Means')
plt.xlabel('Fitur 1')
plt.ylabel('Fitur 2')
plt.legend()
plt.grid(True)
plt.show()

print("Centroids:\n", centroids)
print("Labels:\n", labels)
        

Dalam kode di atas:

Menentukan Nilai K yang Optimal

Salah satu tantangan terbesar dalam K-Means adalah memilih nilai K yang tepat. Terdapat beberapa metode untuk membantu menentukan nilai K yang optimal:

Contoh Menggunakan Metode Elbow:


inertia_values = []
k_range = range(1, 11) # Coba K dari 1 sampai 10

for k_iter in k_range:
    kmeans_iter = KMeans(n_clusters=k_iter, random_state=42, n_init=10)
    kmeans_iter.fit(X)
    inertia_values.append(kmeans_iter.inertia_)

plt.figure(figsize=(8, 6))
plt.plot(k_range, inertia_values, marker='o')
plt.title('Metode Elbow untuk Menentukan K Optimal')
plt.xlabel('Jumlah Klaster (K)')
plt.ylabel('Inertia')
plt.xticks(k_range)
plt.grid(True)
plt.show()
        

Dengan mengamati plot dari metode elbow, Anda dapat mencari titik di mana laju penurunan Inertia melambat secara signifikan, menunjukkan bahwa penambahan klaster tambahan tidak memberikan peningkatan yang berarti dalam hal mengurangi variasi dalam klaster.

Keuntungan dan Keterbatasan K-Means

Keuntungan:

Keterbatasan:

Kesimpulan

Algoritma K-Means adalah alat yang ampuh dan fundamental dalam unsupervised learning untuk tugas pengelompokan. Dengan pemahaman yang baik tentang cara kerjanya dan implementasinya yang mudah menggunakan Python dan scikit-learn, Anda dapat mulai mengeksplorasi pola tersembunyi dalam data Anda. Ingatlah untuk mempertimbangkan metode penentuan nilai K yang optimal dan menyadari keterbatasan algoritma ini saat menerapkannya pada skenario dunia nyata.

Eksplorasilah lebih lanjut dengan dataset yang berbeda dan berbagai parameter KMeans untuk mendapatkan hasil yang paling sesuai dengan kebutuhan analisis Anda.

K 1 2 3

Visualisasi sederhana dari konsep K-Means dengan 3 klaster.

🏠 Homepage