Apa itu Clustering dalam Machine Learning (ML)? Inilah Definisi, Jenis, dan Cara Kerjanya dan Contohnya dalam Python

Assalamu‘alaikum wr. wb.

Halo gais! Clustering merupakan salah satu Algoritma Unsupervised dalam Machine Learning. Algoritma Clustering membagi Populasi atau Data Point dengan sifat yang sama  ke beberapa kelompok kecil untuk dikelompokkan.

Inilah Definisi, Jenis, dan Cara Kerja Clustering dalam ML

Sumber Artikel Materi : Geeksforgeeks.org, Javatpoint.comTechtarget.comDqlab.idRevou.co, dan Codingstudio.id (Blog)

Dalam ranah Data Science, terdapat sejumlah algoritma yang diterapkan untuk menyelesaikan beragam permasalahan, salah satunya adalah algoritma clustering. Algoritma machine learning ini bertujuan untuk mengelompokkan titik-titik data berdasarkan kesamaan karakteristiknya. Dalam prinsipnya, titik-titik data yang tergabung dalam satu kelompok seharusnya memiliki atribut atau ciri-ciri yang mirip, sedangkan yang berada di kelompok berbeda harus memiliki perbedaan yang signifikan.

A. Pengertian Clustering

Clustering adalah sebuah metode Unsupervised Learning yang diterapkan luas di berbagai bidang. Dalam ranah data science, analisis clustering digunakan untuk mengungkap wawasan berharga. Di dunia machine learning, terdapat berbagai algoritma clustering yang dapat digunakan untuk tujuan dan jenis data yang berbeda. Ragam algoritma ini mencakup yang sederhana hingga yang sangat kompleks. Artikel ini akan menjelaskan berbagai algoritma clustering yang ada dalam domain data science.

Tujuan dari penggunaan clustering adalah untuk membagi kumpulan data menjadi berbagai kelompok (kluster), di mana data dalam satu kluster memiliki karakteristik yang mirip satu sama lain, sementara berbeda dari data di kluster lainnya.

Penting untuk dicatat bahwa clustering tidak memerlukan data pelatihan (training data) untuk mengelompokkan atau mengklasifikasikan objek data, sehingga masuk dalam kategori unsupervised machine learning. Sebaliknya, clustering mengidentifikasi pola intrinsik dalam data dan mengelompokkannya berdasarkan kesamaan tertentu.

Sebagai ilustrasi, jika kita memiliki kumpulan data yang berisi berbagai jenis buah seperti apel, pisang, dan jeruk, teknik clustering akan mengorganisasi buah-buahan tersebut ke dalam kelompok berdasarkan jenisnya. Dengan demikian, semua apel akan dikelompokkan dalam satu kluster, semua pisang dalam kluster lainnya, dan seterusnya.

B. Manfaat Clustering

Clustering memiliki sejumlah keuntungan penting untuk Bisnis dan segala Bidang, termasuk :

1. Pengenalan Mendalam terhadap Data

Dengan membagi data menjadi kelompok yang terpisah, analis dapat lebih mudah mengeksplorasi pola, tren, dan hubungan di antara data tersebut. Pengelompokan ini memungkinkan mereka untuk mendalami data perusahaan, sehingga analisis yang dilakukan juga menjadi lebih rinci.

2. Pembentukan Segmen

Clustering merupakan alat yang sangat berguna untuk menciptakan segmen. Sebagai contoh, dalam analisis pelanggan, clustering dapat digunakan untuk mengidentifikasi kelompok pelanggan yang memiliki perilaku atau preferensi serupa. Prinsip segmentasi ini membantu dalam merancang strategi pemasaran yang lebih efektif.

3. Identifikasi Anomali

Teknik clustering juga dapat diterapkan untuk mendeteksi anomali, yang berarti mengenali titik data yang tidak sesuai dengan pola data umumnya. Menemukan data yang tidak biasa atau tidak sesuai sangat berguna dalam berbagai konteks, seperti mendeteksi penipuan dan memonitoring jaringan.

4. Pengurangan Dimensi

Manfaat lain dari clustering adalah bahwa itu dapat digunakan sebagai metode pengurangan dimensi. Dengan mengelompokkan variabel yang serupa, analis dapat mengurangi jumlah variabel yang harus dianalisis tanpa kehilangan terlalu banyak informasi.

C. Metode Clustering

Dikutip dari EDUCBA, Berikut beberapa teknik pengelompokan (clustering) yang ada :

1. Partitional Clustering

Metode pengelompokan partisional adalah pendekatan yang memecah data menjadi beberapa subset atau kelompok yang tidak tumpang tindih tanpa struktur hierarki tertentu. Teknik ini mencakup algoritma-algoritma seperti K-Means, K-Medoids, dan CLARA sebagai contoh.

Misalnya, K-Means beroperasi dengan mengelompokkan data menjadi 'K' kelompok berdasarkan jarak terdekat antara setiap titik data dan pusat kelompok (centroid).

2. Hierarchical Clustering

Pengelompokan Hierarki adalah metode yang menciptakan hierarki dari kelompok-kelompok menggunakan Dendrogram. Pendekatan ini dapat dilakukan secara Aglomeratif (Bottom-up) atau Divisif (Top-down).

Proses Aglomeratif mengawali setiap titik data sebagai kelompok individu dan menggabungkannya berdasarkan kesamaan. Sebaliknya, pendekatan Divisif memulai dengan semua titik data dalam satu kelompok dan memisahkannya hingga tiap kelompok hanya berisi satu titik data.

3. Density-Based Clustering

Pengelompokan berbasis kepadatan berdasarkan pembentukan kelompok-kelompok berdasarkan kepadatan titik data. Kelompok-kelompok ini terbentuk berdasarkan jumlah titik data dalam suatu radius tertentu. Metode ini dapat menghasilkan kelompok-kelompok dengan bentuk yang lebih bebas atau sesuai dengan analisis yang dilakukan.

4. Grid-Based Clustering

Pengelompokan berbasis grid mengubah ruang data menjadi sel-sel grid terbatas dan melakukan operasi pada sel-sel ini. Teknik ini memiliki kecepatan pemrosesan yang tetap dan tidak tergantung pada jumlah objek data.

5. Model-Based Clustering

Pengelompokan berbasis model melibatkan pembentukan model untuk setiap kelompok dan mencari model terbaik yang sesuai dengan data. Pendekatan ini sering digunakan dalam statistik dan pembelajaran mesin.

6. Constraint-Based Clustering

Pengelompokan berbasis kendala melibatkan pembentukan kelompok dengan mempertimbangkan kendala-kendala yang telah ditentukan sebelumnya, seperti batasan waktu, jarak, atau batas-batas geografis.

7. Distribution Model-Based Clustering

Pada metode pengelompokan berbasis model distribusi, data dibagi berdasarkan probabilitas sejauh mana dataset termasuk dalam distribusi tertentu. Pengelompokan dilakukan dengan mengasumsikan beberapa distribusi, biasanya Distribusi Gaussian.

Contoh dari jenis ini adalah algoritma Pengelompokan Expectation-Maximization yang menggunakan Model Campuran Gaussian (GMM).

D. Jenis-jenis Algoritma Clustering

Ada banyak jenis Algoritma Clustering, tetapi K-means dan pengelompokan hierarki adalah yang paling banyak tersedia dalam alat Data Science. Inilah beberapa diantaranya :

1. Algoritma K-Means

Algoritma k-means adalah salah satu algoritma pengelompokan yang paling populer. Ini mengklasifikasikan dataset dengan membagi sampel menjadi berbagai kelompok dengan varians yang sama. Jumlah kelompok harus ditentukan dalam algoritma ini. Algoritma ini cepat dengan jumlah perhitungan yang lebih sedikit, dengan kompleksitas linear O(n).

2. Algoritma Mean-shift

Algoritma mean-shift mencoba menemukan area padat dalam densitas data yang halus. Ini adalah contoh model berbasis centroid yang bekerja dengan memperbarui kandidat untuk centroid menjadi pusat dari titik-titik dalam suatu wilayah yang diberikan.

3. Algoritma DBSCAN

Singkatan dari Density-Based Spatial Clustering of Applications with Noise. Ini adalah contoh model berbasis densitas mirip dengan mean-shift, tetapi dengan beberapa keunggulan yang luar biasa. Dalam algoritma ini, area densitas tinggi dipisahkan oleh area densitas rendah. Karena itu, kelompok dapat ditemukan dalam bentuk apa pun yang sewenang-wenang.

4. Pengelompokan Expectation-Maximization menggunakan GMM

Algoritma ini dapat digunakan sebagai alternatif untuk algoritma k-means atau untuk kasus-kasus di mana k-means dapat gagal. Dalam GMM, diasumsikan bahwa titik-titik data memiliki distribusi Gaussian.

5. Algoritma Hirarki Aglomeratif

Algoritma Hirarki Aglomeratif melakukan pengelompokan hirarki dari bawah ke atas. Dalam hal ini, setiap titik data diperlakukan sebagai satu kelompok tunggal pada awalnya dan kemudian digabungkan secara berurutan. Hirarki kelompok dapat direpresentasikan sebagai struktur pohon.

6. Propagasi Afinitas

Ini berbeda dari algoritma pengelompokan lainnya karena tidak memerlukan penentuan jumlah kelompok. Dalam algoritma ini, setiap titik data mengirimkan pesan antara pasangan titik data sampai konvergensi. Ini memiliki kompleksitas waktu O(N2T), yang merupakan kelemahan utama dari algoritma ini.

E. Contoh Penerapan Clustering

Penerapan Pengelompokan dalam Berbagai Bidang :

  • Pemasaran : Ini dapat digunakan untuk menggambarkan dan menemukan segmen pelanggan untuk tujuan pemasaran.
  • Biologi : Ini dapat digunakan untuk klasifikasi antara berbagai jenis tanaman dan hewan.
  • Perpustakaan : Ini digunakan dalam pengelompokan buku berdasarkan topik dan informasi.
  • Asuransi : Ini digunakan untuk mengakui pelanggan, kebijakan mereka, dan mengidentifikasi penipuan.
  • Perencanaan Kota : Ini digunakan untuk membuat kelompok rumah dan mempelajari nilainya berdasarkan lokasi geografis dan faktor lain yang ada.
  • Studi Gempa Bumi : Dengan mempelajari daerah yang terkena dampak gempa bumi, kita dapat menentukan zona berbahaya.
  • Pemrosesan Gambar : Pengelompokan dapat digunakan untuk mengelompokkan gambar yang mirip, mengklasifikasikan gambar berdasarkan konten, dan mengidentifikasi pola dalam data gambar.
  • Genetika : Pengelompokan digunakan untuk mengelompokkan gen yang memiliki pola ekspresi yang mirip dan mengidentifikasi jaringan gen yang bekerja bersama dalam proses biologis.
  • Keuangan : Pengelompokan digunakan untuk mengidentifikasi segmen pasar berdasarkan perilaku pelanggan, mengidentifikasi pola dalam data pasar saham, dan menganalisis risiko dalam portofolio investasi.
  • Layanan Pelanggan : Pengelompokan digunakan untuk mengelompokkan pertanyaan dan keluhan pelanggan ke dalam kategori, mengidentifikasi masalah umum, dan mengembangkan solusi yang ditargetkan.
  • Manufaktur : Pengelompokan digunakan untuk mengelompokkan produk serupa bersama, mengoptimalkan proses produksi, dan mengidentifikasi cacat dalam proses manufaktur.
  • Diagnosis Medis : Pengelompokan digunakan untuk mengelompokkan pasien dengan gejala atau penyakit yang mirip, yang membantu dalam membuat diagnosis yang akurat dan mengidentifikasi pengobatan yang efektif.
  • Deteksi Penipuan : Pengelompokan digunakan untuk mengidentifikasi pola atau anomali yang mencurigakan dalam transaksi keuangan, yang dapat membantu dalam mendeteksi penipuan atau kejahatan keuangan lainnya.
  • Analisis Lalu Lintas : Pengelompokan digunakan untuk mengelompokkan pola-pola serupa dari data lalu lintas, seperti jam sibuk, rute, dan kecepatan, yang dapat membantu dalam meningkatkan perencanaan transportasi dan infrastruktur.
  • Analisis Jaringan Sosial : Pengelompokan digunakan untuk mengidentifikasi komunitas atau kelompok dalam jaringan sosial, yang dapat membantu dalam memahami perilaku sosial, pengaruh, dan tren.
  • Keamanan Siber : Pengelompokan digunakan untuk mengelompokkan pola-pola serupa dari lalu lintas jaringan atau perilaku sistem, yang dapat membantu dalam mendeteksi dan mencegah serangan siber.
  • Analisis Iklim : Pengelompokan digunakan untuk mengelompokkan pola-pola serupa dari data iklim, seperti suhu, curah hujan, dan angin, yang dapat membantu dalam memahami perubahan iklim dan dampaknya pada lingkungan.
  • Analisis Olahraga : Pengelompokan digunakan untuk mengelompokkan pola-pola serupa dari data kinerja pemain atau tim, yang dapat membantu dalam menganalisis kekuatan dan kelemahan pemain atau tim dan membuat keputusan strategis.
  • Analisis Kejahatan : Pengelompokan digunakan untuk mengelompokkan pola-pola serupa dari data kejahatan, seperti lokasi, waktu, dan jenis, yang dapat membantu dalam mengidentifikasi titik-titik panas kejahatan, memprediksi tren kejahatan masa depan, dan meningkatkan strategi pencegahan kejahatan.

F. Contoh Clustering dalam Python

Sumber : Menggunakan ChatGPT

Kali ini kita akan memberikan salah satu Contoh Algoritma Clustering yang kami gunakan adalah K-Means, dengan menggunakan Python. 

1. Instalasi Library Kneed

Sebelum memulai, lakukanlah Instalasi Library Kneed dengan mengetik Perintah berikut ini :

pip install kneed

2. Memasukkan Library dan Membuat Data Buatan (Artificial Data)

Pertama, masukkan beberapa Library seperti Matplotlib, Scikit-Learn, dan KneeLocator.

import matplotlib.pyplot as plt # For Plotting
from sklearn.datasets import make_blobs # To generate artificial data
from sklearn.cluster import KMeans, DBSCAN # K-Means & DBSCAN Algorithm
from sklearn.metrics import silhouette_score # Quality Evaluation
from sklearn.preprocessing import StandardScaler # Standardarization
from kneed import KneeLocator # to determine number of clusters (need to install kneed)

features, true_labels = make_blobs(
    n_samples=100,
    centers=3,
    cluster_std=2,
    random_state=42
)

Setelah itu, buatlah Fungsi make_blobs, yang digunakan untuk menghasilkan dataset buatan dengan jumlah sampel (n_samples) sebanyak 100, 3 pusat kelompok (centers), dan deviasi standar kluster sebesar 2. Parameter random_state digunakan agar hasilnya konsisten.

3. Menampilkan Data Awal

Ini adalah langkah untuk menampilkan lima label pertama dari dataset yang telah dibuat sebelumnya (true_labels). Label ini sesuai dengan kelompok/tempat klaster dari setiap sampel.

true_labels[:5]

Output :

array([2, 1, 0, 1, 2])

4. Standardisasi Fitur-fitur

StandardScaler digunakan untuk menormalkan (standardize) fitur-fitur dalam dataset. Standardisasi adalah proses mengubah distribusi setiap fitur sehingga memiliki rata-rata 0 dan deviasi standar 1.

fit_transform digunakan untuk menghitung rata-rata dan deviasi standar dari setiap fitur di dataset (features) dan kemudian melakukan transformasi standardisasi pada dataset tersebut.

scaler = StandardScaler()
scaled_features = scaler.fit_transform(features)
scaled_features[:5]

Hasil dari standardisasi disimpan dalam variabel scaled_features. scaled_features[:5] menampilkan 5 (Lima) Sampel pertama setelah proses standardisasi.

Output :

array([[-1.35011158, -1.7341846 ],
       [ 1.62569787, -0.30276124],
       [-0.32240976,  1.30592854],
       [ 1.86202687, -0.35471922],
       [-0.86701551, -1.10345952]])

5. Menentukan Jumlah Klaster dan Menampilkan Grafik dengan Metode Elbow

Dalam blok ini, kita menggunakan K-Means dengan variasi jumlah klaster dari 1 hingga 10. kmeans_kwargs adalah parameter yang akan digunakan untuk menginisialisasi model K-Means. Parameter ini mencakup inisialisasi dengan metode "random", jumlah iterasi maksimum sebanyak 300, dan seed acak (random_state).

Sebuah loop for digunakan untuk mengiterasi melalui jumlah klaster dari 1 hingga 10. Pada setiap iterasi, model K-Means dilatih dengan jumlah klaster yang berbeda dan SSE (Sum of Squared Errors) dihitung dan disimpan dalam list sse.

kmeans_kwargs = {
    "init": "random",
    "n_init": 10,
    "max_iter": 300,
    "random_state": 42,
}
sse = []

Setelah itu, Grafik ini menunjukkan jumlah klaster (sumbu x) versus SSE (sumbu y). Tujuannya adalah untuk menemukan "elbow point" di mana penurunan SSE mulai melambat. "Elbow point" ini dapat menjadi indikasi jumlah klaster yang optimal untuk dataset tersebut.

for k in range(1, 11):
    kmeans = KMeans(n_clusters=k, **kmeans_kwargs)
    kmeans.fit(scaled_features)
    sse.append(kmeans.inertia_)

plt.style.use("fivethirtyeight")
plt.plot(range(1, 11), sse)
plt.xticks(range(1, 11))
plt.xlabel("Number of Clusters")
plt.ylabel("SSE")
plt.show()

Output :

6. Menentukan Jumlah Klaster Optimal

Dalam blok ini, kita menggunakan pustaka KneeLocator untuk menentukan "elbow point" pada kurva SSE.

kl = KneeLocator(
    range(1, 11), sse, curve="convex", direction="decreasing"
)
optimal_k = kl.elbow

KneeLocator menerima tiga parameter: nilai x (dalam hal ini, range jumlah klaster dari 1 hingga 10), nilai y (SSE), dan beberapa opsi tambahan. curve="convex" mengindikasikan bahwa kita sedang mencari elbow pada kurva konveks, dan direction="decreasing" menunjukkan bahwa kita mencari elbow pada bagian kurva yang menurun.

Nilai optimal_k kemudian berisi jumlah klaster optimal yang ditemukan menggunakan metode elbow.

7. Menampilkan Plot K-Means Clustering

Dalam blok ini, kita menerapkan algoritma K-Means clustering dengan jumlah klaster optimal yang telah ditentukan sebelumnya.

Kemudian, kita menghitung skor siluet untuk hasil K-Means clustering menggunakan fungsi silhouette_score. Skor siluet memberikan indikasi seberapa baik klaster telah dibentuk; nilai tinggi menunjukkan klaster yang lebih baik.

Terakhir, kita memvisualisasikan hasil clustering dengan menyertakan scatter plot data yang diwarnai berdasarkan label klaster yang diberikan oleh K-Means. Pusat klaster ditandai dengan simbol 'X' berwarna merah.

# Apply K-Means with the optimal number of clusters
kmeans = KMeans(n_clusters=optimal_k, **kmeans_kwargs)
kmeans.fit(scaled_features)

# Compute silhouette score for K-Means
kmeans_silhouette = silhouette_score(scaled_features, kmeans.labels_).round(2)
print(f"K-Means Silhouette Score: {kmeans_silhouette}")

# Plot the results of K-Means clustering
plt.scatter(scaled_features[:, 0], scaled_features[:, 1], c=kmeans.labels_, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='red', marker='X')
plt.title("K-Means Clustering")
plt.show()

Output :

8. Menampilkan Plot DBSCAN Clustering

Dalam blok ini, kita melakukan pencarian terhadap kombinasi nilai epsilon (eps) dan jumlah minimum sampel (min_samples) yang memberikan skor siluet tertinggi pada DBSCAN. Proses pencarian dilakukan dengan iterasi melalui nilai epsilon dan jumlah minimum sampel yang telah ditentukan.

Setelah menemukan parameter terbaik, kita menerapkan algoritma DBSCAN dengan parameter tersebut dan menghitung skor siluet untuk hasil clustering. Akhirnya, kita memvisualisasikan hasil clustering DBSCAN dengan menyertakan scatter plot data yang diwarnai berdasarkan label klaster yang diberikan oleh DBSCAN.

import numpy as np

eps_values = np.linspace(0.1, 1.0, 10)
min_samples_values = range(2, 11)

silhouette_scores = []

for eps in eps_values:
    for min_samples in min_samples_values:
        dbscan = DBSCAN(eps=eps, min_samples=min_samples)
        dbscan_labels = dbscan.fit_predict(scaled_features)

        if len(np.unique(dbscan_labels)) > 1:  # Ensure more than one cluster is formed
            silhouette = silhouette_score(scaled_features, dbscan_labels)
            silhouette_scores.append((eps, min_samples, silhouette))

#Find the parameters with the highest silhouette score
best_params = max(silhouette_scores, key=lambda x: x[2])
best_eps, best_min_samples, best_silhouette = best_params

# Apply DBSCAN clustering
dbscan = DBSCAN(eps=best_eps, min_samples=best_min_samples)
dbscan_labels = dbscan.fit_predict(scaled_features)

# Compute silhouette score for DBSCAN
dbscan_silhouette = silhouette_score(scaled_features, dbscan_labels).round(2)
print(f"DBSCAN Silhouette Score: {dbscan_silhouette}")

# Plot the results of DBSCAN clustering
plt.scatter(scaled_features[:, 0], scaled_features[:, 1], c=dbscan_labels, cmap='viridis')
plt.title("DBSCAN Clustering")
plt.show()

Output :


Itulah Penjelasan mengenai Clustering dalam Kecerdasan Buatan (AI) dan Machine Learning (ML). Mohon maaf apabila ada kesalahan apapun. Terima Kasih 😄😘👌👍 :)

Wassalamu‘alaikum wr. wb. 

Post a Comment

Previous Post Next Post