Spectral Clustering

"Melihat Data Sebagai Jaring Laba-laba (Graph)"

1. Apa itu Spectral Clustering?

K-Means sangat buruk jika datanya berbentuk aneh, misalnya "Cincin di dalam Cincin". K-Means akan memotongnya seperti kue pay (lurus).

Spectral Clustering tidak melihat "posisi" (koordinat X, Y), tapi melihat "Koneksi" (Graph). Jika titik A terhubung kuat dengan B, maka mereka satu geng. Teknik ini menggunakan Aljabar Linear (Eigenvalues) untuk memotong jaring koneksi tersebut (Graph Cut).

2. Visualisasi: Connectedness

K-Means Gagal di sini (Memotong tegak lurus)
Spectral Clustering Sukses (Mengikuti ring)

Bayangkan titik-titik di ring dalam saling berpegangan tangan (Connect), dan titik di ring luar juga berpegangan tangan. Tapi HAMPIR TIDAK ADA pegangan tangan antara ring dalam dan luar. Di situlah kita "Gunting" koneksinya.

3. Matematika: Laplacian Matrix

Rahasia Spectral Clustering ada di matriks ini:

$$ L = D - A $$
  • A (Adjacency Matrix): Siapa berteman dengan siapa (0 atau 1).
  • D (Degree Matrix): Si A punya berapa teman (Diagonal matrix).
  • L (Laplacian Matrix): Selisihnya. Kita cari Eigenvectors dari L ini.
Eigenvector dengan eigenvalue terkecil (setelah 0) disebut Fiedler Vector. Vector inilah yang memisahkan graph menjadi 2 bagian terbaik.

4. Implementasi Python (Scikit-Learn)

from sklearn.cluster import SpectralClustering
from sklearn.datasets import make_circles
import matplotlib.pyplot as plt

# 1. Buat Data Cincin (Non-Convex)
X, _ = make_circles(n_samples=200, factor=0.5, noise=0.05)

# 2. Model Spectral Clustering
# affinity='nearest_neighbors' -> Membangun graph berdasarkan tetangga terdekat
# n_clusters=2 -> Memotong graph jadi 2 bagian
model = SpectralClustering(n_clusters=2, affinity='nearest_neighbors', assign_labels='kmeans')

# 3. Training & Prediksi
labels = model.fit_predict(X)

# 4. (Visualisasi biasanya dilakukan di sini dengan plt.scatter)
# Hasilnya akan memisahkan Cincin Dalam dan Cincin Luar dengan sempurna.