Unsupervised Learning (pembelajaran tanpa pengawasan) adalah cabang dari pembelajaran mesin di mana model-model belajar pola dari data yang tersedia daripada diberikan label yang sebenarnya. Kita membiarkan algoritma menemukan jawabannya sendiri.
Dalam pembelajaran tanpa pengawasan, ada dua teknik utama; pengelompokan (clustering) dan reduksi dimensi (dimensionality reduction). Teknik pengelompokan menggunakan algoritma untuk belajar pola agar dapat mengelompokkan data. Sebaliknya, teknik reduksi dimensi berusaha mengurangi jumlah fitur dengan menjaga informasi sebenarnya tetap utuh sebanyak mungkin.
Sebagai contoh, algoritma untuk pengelompokan adalah K-Means, dan untuk reduksi dimensi adalah PCA. Ini adalah algoritma yang paling banyak digunakan untuk pembelajaran tanpa pengawasan. Namun, kita jarang membahas tentang metrik untuk mengevaluasi pembelajaran tanpa pengawasan. Seberapa berguna pun, kita masih perlu mengevaluasi hasil untuk mengetahui apakah keluarannya tepat.
Artikel ini akan membahas tentang metrik yang digunakan untuk mengevaluasi algoritma pembelajaran mesin tanpa pengawasan dan akan dibagi menjadi dua bagian; metrik algoritma pengelompokan dan metrik reduksi dimensi. Mari kita mulai.
Metrik Algoritma Pengelompokan (Clustering)
Kami tidak akan membahas secara detail tentang algoritma pengelompokan karena itu bukan pokok utama dari artikel ini. Sebagai gantinya, kami akan fokus pada contoh-contoh metrik yang digunakan untuk evaluasi dan bagaimana menilai hasilnya.
Artikel ini akan menggunakan Dataset Anggur dari Kaggle sebagai contoh dataset kami. Mari kita baca data terlebih dahulu dan gunakan algoritma K-Means untuk mengelompokkan data.
import pandas as pd
from sklearn.cluster import KMeans
df = pd.read_csv('wine-clustering.csv')
kmeans = KMeans(n_clusters=4, random_state=0)
kmeans.fit(df)
Saya menginisiasi kluster sebagai 4, yang berarti kita mengelompokkan data menjadi 4 kluster. Apakah itu jumlah kluster yang tepat? Atau apakah ada jumlah kluster yang lebih cocok? Umumnya, kita dapat menggunakan teknik yang disebut metode siku untuk menemukan kluster yang tepat. Biarkan saya menunjukkan kode di bawah ini.
wcss = []
for k in range(1, 11):
kmeans = KMeans(n_clusters=k, random_state=0)
kmeans.fit(df)
wcss.append(kmeans.inertia_)
# Plot the elbow method
plt.plot(range(1, 11), wcss, marker='o')
plt.xlabel('Number of Clusters (k)')
plt.ylabel('WCSS')
plt.title('Elbow Method')
plt.show()
Dalam metode siku, kita menggunakan WCSS atau Within-Cluster Sum of Squares untuk menghitung jumlah jarak kuadrat antara titik data dan pusat kluster masing-masing untuk berbagai k (kluster). Nilai k terbaik diharapkan adalah yang memiliki penurunan WCSS terbanyak atau siku pada gambar di atas, yaitu 2.
Namun, kita dapat memperluas metode siku untuk menggunakan metrik lain untuk menemukan k terbaik. Bagaimana jika algoritma secara otomatis menemukan jumlah kluster tanpa bergantung pada centroid? Ya, kita juga dapat mengevaluasi mereka menggunakan metrik serupa.
Sebagai catatan, kita dapat menganggap centroid sebagai rata-rata data untuk setiap kluster meskipun kita tidak menggunakan algoritma K-Means. Jadi, algoritma apa pun yang tidak bergantung pada centroid saat mengelompokkan data masih bisa menggunakan evaluasi metrik apa pun yang bergantung pada centroid.
Koefisien Silhouette
Silhouette adalah teknik dalam pengelompokan untuk mengukur kesamaan data dalam kluster dibandingkan dengan kluster lain. Koefisien Silhouette adalah representasi numerik yang berkisar dari -1 hingga 1. Nilai 1 berarti setiap kluster benar-benar berbeda dari yang lain, dan nilai -1 berarti semua data ditempatkan pada kluster yang salah. 0 berarti tidak ada kluster yang berarti dari data.
Kita dapat menggunakan kode berikut untuk menghitung koefisien Silhouette.
# Calculate Silhouette Coefficient
from sklearn.metrics import silhouette_score
sil_coeff = silhouette_score(df.drop("labels", axis=1), df["labels"])
print("Silhouette Coefficient:", round(sil_coeff, 3))
Silhouette Coefficient: 0.562
Kita dapat melihat bahwa segmentasi kita di atas memiliki Koefisien Silhouette yang positif, yang berarti ada tingkat pemisahan antara kluster, meskipun beberapa tumpang tindih masih terjadi.
Indeks Calinski-Harabasz
Indeks Calinski-Harabasz atau Kriteria Rasio Varians adalah indeks yang digunakan untuk mengevaluasi kualitas kluster dengan mengukur rasio dispersi antar-kluster terhadap dispersi dalam-kluster. Pada dasarnya, kita mengukur perbedaan antara jumlah jarak kuadrat data antara kluster dan data dalam kluster internal.
Semakin tinggi skor Indeks Calinski-Harabasz, semakin baik, yang berarti kluster-kluster tersebut terpisah dengan baik. Namun, tidak ada batas atas untuk skor yang berarti metrik ini lebih baik untuk mengevaluasi berbagai angka k daripada menginterpretasikan hasilnya apa adanya.
Mari kita gunakan kode Python untuk menghitung skor Indeks Calinski-Harabasz.
# Calculate Calinski-Harabasz Index
from sklearn.metrics import calinski_harabasz_score
ch_index = calinski_harabasz_score(df.drop('labels', axis=1), df['labels'])
print("Calinski-Harabasz Index:", round(ch_index, 3))
Calinski-Harabasz Index: 708.087
Pertimbangan lain untuk skor Indeks Calinski-Harabasz adalah bahwa skor tersebut sensitif terhadap jumlah kluster. Jumlah kluster yang lebih tinggi juga bisa menyebabkan skor yang lebih tinggi. Jadi, ide yang baik untuk menggunakan metrik lain bersamaan dengan Indeks Calinski-Harabasz untuk memvalidasi hasilnya.
Indeks Davies-Bouldin
Indeks Davies-Bouldin adalah metrik evaluasi pengelompokan yang diukur dengan menghitung rata-rata kesamaan antara setiap kluster dengan yang paling mirip. Kesamaan dihitung dengan rasio jarak dalam-kluster terhadap jarak antar-kluster. Ini berarti semakin jauh terpisahnya kluster dan semakin tidak tersebar akan menghasilkan skor yang lebih baik.
Berbeda dengan metrik sebelumnya, Indeks Davies-Bouldin bertujuan untuk memiliki skor serendah mungkin. Semakin rendah skor tersebut, semakin terpisah setiap klusternya.
Mari kita gunakan contoh Python untuk menghitung skornya.
# Calculate Davies-Bouldin Index
from sklearn.metrics import davies_bouldin_score
dbi = davies_bouldin_score(df.drop('labels', axis=1), df['labels'])
print("Davies-Bouldin Index:", round(dbi, 3))
Davies-Bouldin Index: 0.544
Kita tidak bisa mengatakan skor di atas baik atau buruk karena mirip dengan metrik sebelumnya, kita masih perlu mengevaluasi hasilnya dengan menggunakan berbagai metrik sebagai dukungan.
Metrik Reduksi Dimensi (Dimensionality Reduction)
Berbeda dengan pengelompokan, reduksi dimensi bertujuan untuk mengurangi jumlah fitur sambil mempertahankan informasi asli sebanyak mungkin. Karena itu, banyak dari metrik evaluasi dalam reduksi dimensi berkaitan dengan pelestarian informasi. Mari kita kurangi dimensi dengan PCA dan lihat bagaimana metriknya bekerja.
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
#Scaled the data
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
pca = PCA()
pca.fit(df_scaled)
Dalam contoh di atas, kita telah menyesuaikan PCA ke data, tetapi kita belum mengurangi jumlah fitur. Sebaliknya, kita ingin mengevaluasi reduksi dimensi dan kompromi varians dengan Cumulative Explained Variance. Ini adalah metrik umum untuk reduksi dimensi untuk melihat bagaimana informasi tetap ada dengan setiap pengurangan fitur.
Calculate Cumulative Explained Variance
cev = np.cumsum(pca.explained_variance_ratio_)
plt.plot(range(1, len(cev) + 1), cev, marker='o')
plt.xlabel('Number of PC')
plt.ylabel('CEV')
plt.title('CEV vs. Number of PC')
plt.grid()
Dari grafik di atas, kita dapat melihat jumlah PC yang dipertahankan dibandingkan dengan varians yang dijelaskan. Sebagai aturan praktis, kita sering memilih sekitar 90-95% dipertahankan ketika kita mencoba untuk melakukan reduksi dimensi, jadi sekitar 14 fitur dikurangi menjadi 8 jika kita mengikuti grafik di atas.
Mari kita lihat metrik lain untuk memvalidasi reduksi dimensi kita.
Trustworthiness
Trustworhiness adalah pengukuran kualitas teknik reduksi dimensi. Metrik ini mengukur seberapa baik dimensi yang direduksi mempertahankan tetangga terdekat data asli.
Pada dasarnya, metrik ini mencoba melihat seberapa baik teknik reduksi dimensi mempertahankan struktur lokal data asli.
Metrik Trustworhiness berkisar antara 0 hingga 1, di mana nilai yang lebih dekat ke 1 berarti tetangga yang dekat dengan titik data dimensi yang direduksi sebagian besar juga dekat dalam dimensi asli.
Mari kita gunakan kode Python untuk menghitung metrik Trustworhiness.
from sklearn.manifold import trustworthiness
# Calculate Trustworthiness. Tweak the number of neighbors depends on the dataset size.
tw = trustworthiness(df_scaled, df_pca, n_neighbors=5)
print("Trustworthiness:", round(tw, 3))
Trustworthiness: 0.87
Dari hasil diatas, kita bisa mengatakan bahwa secara umum reduksi yang terjadi masih bisa mempertahankan sebagian besar informasi dari data aslinya.
Sammon’s Mapping
Sammon's Mapping adalah teknik reduksi dimensi non-linear untuk mempertahankan jarak pasangan dalam dimensi tinggi ketika direduksi. Tujuannya adalah menggunakan fungsi Stres Sammon untuk menghitung jarak pasangan antara data asli dan ruang reduksi.
Skor fungsi Sammon’s stress yang lebih rendah, lebih baik karena menunjukkan pelestarian pasangan yang lebih baik. Mari kita coba gunakan contoh kode Python.
Pertama, kita akan menginstal paket tambahan untuk Pemetaan Sammon.
pip install sammon-mapping
Kemudian kita akan menggunakan kode berikut untuk menghitung Sammon’s stress.
# Calculate Sammon's Stress
from sammon import sammon
pca_res, sammon_st = sammon.sammon(np.array(df))
print("Sammon's Stress:", round(sammon_st, 5))
Sammon's Stress: 1e-05
Hasilnya menunjukkan Skor Sammon yang rendah, yang berarti pelestarian data ada.
Kesimpulan
Unsupervised Learning adalah cabang pembelajaran mesin yang mencoba untuk belajar pola dari data. Dibandingkan dengan Supervised Learning, evaluasi output mungkin tidak banyak dibahas.
Dalam artikel ini, kita mencoba mempelajari beberapa metrik pembelajaran tanpa pengawasan, termasuk:
Within-Cluster Sum Square (Jumlah Kuadrat dalam Kluster)
Koefisien Silhouette
Indeks Calinski-Harabasz
Indeks Davies-Bouldin
Cumulative Explained Variance
Trustworthiness
Sammon's Map
Comments