Machine Learning: Hierarchical Clustering

Machine Learning: Hierarchical Clustering

STUDI KASUS

Sama dengan kasus yang dibahas di teknik K-Means, kita akan membantu pemilik mall untuk mengelompokkan pelanggannya ke dalam beberapa kluster. Dengan demikian, pemilik mall bisa menggunakan strategi bisnis yang tepat untuk masing-masing kluster.

Sebelum kita mulai pembahasan dengan dua bahasa yaitu Python dan R, silakan download dulu datasetnya di link ini.


Bahasa Python

# Mengimpor library
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Mengimpor dataset
dataset = pd.read_csv('Pengunjung_mall.csv')
X = dataset.iloc[:, [3, 4]].values

# Menggunakan dendrogram untuk menentukan angka cluster yang tepat
import scipy.cluster.hierarchy as sch
dendrogram = sch.dendrogram(sch.linkage(X, method = 'ward'))
plt.title('Dendrogram')
plt.xlabel('Pelanggan')
plt.ylabel('Jarak Euclidean')
plt.show()

# Menjalankan Hierarchical Clustering ke dataset
from sklearn.cluster import AgglomerativeClustering
hc = AgglomerativeClustering(n_clusters = 5, affinity = 'euclidean', linkage = 'ward')
y_hc = hc.fit_predict(X)

# Visualisasi hasil clusters
plt.scatter(X[y_hc == 0, 0], X[y_hc == 0, 1], s = 100, c = 'red', label = 'Cluster 1')
plt.scatter(X[y_hc == 1, 0], X[y_hc == 1, 1], s = 100, c = 'blue', label = 'Cluster 2')
plt.scatter(X[y_hc == 2, 0], X[y_hc == 2, 1], s = 100, c = 'green', label = 'Cluster 3')
plt.scatter(X[y_hc == 3, 0], X[y_hc == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4')
plt.scatter(X[y_hc == 4, 0], X[y_hc == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5')
plt.title('Clusters pelanggan')
plt.xlabel('Pendapatan tahunan (juta Rupiah)')
plt.ylabel('Rating pengeluaran (1-100)')
plt.legend()
plt.show()

Penjelasan:

  • Line 2 sampai 4 mengimpir library yang dibutuhkan.
  • Line 7 mengimpor dataset.
  • Line 8 melakukan slicing, dari dataset yang dimiliki. Kita hanya memerlukan kolom ke 3 (pendapatan) dan 4 (rating pengeluaran) saja.
  • Line 11 mengimpor library scipy.cluster.hierarchy untuk membuat dendrogram dengan menyingkatnya sebagai sch. Artinya untuk mengaktifkan library ini kita cukup tulis sch (tentunya pemilihan singkatan sch ini bebas, bisa diganti yang lain).
  • Line 12 mendefinisikan variabel dendrogam untuk membuat dendrogram. Perintahnya adalah sch.dendrogram kemudian diikuti dengan parameter sch.linkage. Linkage adalah algoritma python yang ada di hierarchical clustering. Perlu diketahui bahwa sch.linkage sebenarnya adalah parameter Z yang diperlukan. Tips: Arahkan kursor pada dendrogram kemudian ketik CTRL+i di keyboard, maka akan muncul semua parameter dendrogram yang diperlukan. Tampilan parameternya adalah sebagai berikut:
Parameter dendrogram di python

Untuk mengetahui parameter apa saja yang diperlukan oleh perintah linkage, arahkan kursor juga pada linkage kemudian ketik CTRL+i di keyboard. Tampilan parameter linkage sebagai berikut:

Parameter linkage di python

Yang kita tuliskan di parameter linkage adalah variabel X dengan method=ward. Mengapa kita memilih metode ward, karena kita ingin meminimasi variansi (variance) antar kluster. Hal ini mirip dengan metode elbow di K-Means, namun bukan meminimasi variansi, melainkan meminimkan sum of squares.

Bisa saja menggunakan metode lain (bisa dilihat di parameter method pada linkage), namun untuk contoh kali ini kita menggunakan ward.

  • Line 13-16 adalah perintah untuk memunculkan grafik dendrogram.

Hasil dari dendrogram tampak sebagai berikut:

Dendrogram data pelanggan

Melalui diagram dendrogram di atas, kita bisa lihat bahwa garis vertikal terpanjang adalah yang berwarna biru tua di kanan atas. Garis vertikal biru tua ini bertemu dengan garis horisontal hijau di sebelah kiri (visualisasikan bahwa garis vertikal biru tua paling kanan terpotong oleh 2 garis horisontal hijau tua paling kiri dan di bawahnya). Ilustrasinya bisa dilihat di gambar di bawah ini:

Ilustrasi pemilihan jumlah kluster dengan mencari garis vertikal terpanjang yang tidak terpotong agris horisontal di samping-sampingnya

Sekarang kita mulai visualisasikan garis biru vertikal setelah terpotong masih merupakan garis vertikal terpanjang. Maka kita tentukan di sinilah kita tetapkan batas klusternya. Dengan demikian, kita memiliki 5 kluster, karena ada 5 garis vertikal yang memotong batas klusternya.

  • Line 19 adalah perintah untuk mengimpor library AgglomerativeClustering dari sklearn.cluster.
  • Line 20 mendefinisikan variabel hc untuk membuat model HC nya. Untuk parameternya, kita tentukan jumlah klusternya adalah 5 (n=5) dengan jarak euclidean dan metode ward (dijelaskan di line 12).
  • Line 24-33 adalah perintah untuk membuat visualisasi hasil pembagian 5 kluster. Tampilan grafisnya tampak sebagai berikut:
Hasil kluster yang terbentuk

Melalui gambar di atas bisa dilihat pembagian data points ke dalam kluster yang sangat rapi, di mana terlihat semua data points masuk ke dalam kluster masing-masing. Selain itu pembagian kliusternya juga baik, tampak jarak yang tidak saling berdekatan. Hasilnya sangat mirip dengan K-Means walaupun ada sedikit perbedaan.

Untuk melanjutkan membaca, silakan klik halaman berikutnya di bawah ini.

Pages: 1 2 3 4

Subscribe
Notify of
guest

2 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Bams
Bams
5 years ago

Pak mau bertanya, jika di regression bisa pake MSE MAPE, klasifikasi pake confussion matrix dll, lalu apakah ada cara untuk mengecek keakuratan/keefektifan dari clustering?
Terima kasih