Kernel PCA memperluas PCA klasik dengan “kernel trick”, sehingga kita dapat menjalankan PCA di ruang fitur nonlinier tanpa menghitung transformasinya secara eksplisit.
1. Mengapa butuh kernel? #
- PCA hanya menangkap variasi linear sehingga gagal bila data berada pada manifold melengkung.
- Banyak dataset nyata (lingkaran konsentris, spiral) tidak bisa dipisahkan secara linear.
- Kernel PCA memetakan data ke ruang fitur (\phi(x)) dan menggunakan produk dalam kernel untuk menemukan komponen utama di sana.
2. Rumusan #
Untuk sampel (x_i):
- Hitung matriks kernel $$K_{ij} = \langle \phi(x_i), \phi(x_j) \rangle = k(x_i, x_j)$$
- Cari autovektor $$K v = \lambda v$$ Autovektor yang telah dinormalisasi dipakai untuk memproyeksikan data seperti pada PCA.
Kernel populer: RBF (\exp(-\gamma |x - x’|^2)) dan polinomial ((\langle x, x’ \rangle + c)^d).
3. Dataset contoh #
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from sklearn.datasets import make_circles
X, y = make_circles(n_samples=400, factor=0.3, noise=0.15)
plt.figure(figsize=(8, 8))
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.title("Lingkaran konsentris")
plt.show()
4. Kernel PCA dengan scikit-learn #
from sklearn.decomposition import KernelPCA
kpca = KernelPCA(kernel="rbf", gamma=3)
X_kpca = kpca.fit_transform(X)
plt.figure(figsize=(8, 8))
plt.scatter(X_kpca[:, 0], X_kpca[:, 1], c=y)
plt.title("Embedding 2D dari Kernel PCA")
plt.show()
5. Catatan praktis #
- Pilih kernel yang sesuai bentuk data; RBF aman untuk kebanyakan kasus.
- Skala fitur sebelum membentuk matriks kernel agar parameter (\gamma) bermakna.
- Matriks Gram berukuran (n \times n); perhatikan memori.
- Pemahaman kernel PCA juga berguna saat memakai SVM atau metode kernel lainnya.
Ringkasan #
- Kernel PCA memungkinkan kita menangani struktur nonlinier sambil mempertahankan intuisi PCA.
- Analisis jumlah komponen melalui spektrum autovalor sebelum memproyeksikan.
- Untuk dataset besar, pertimbangkan pendekatan aproksimasi (Nyström, random Fourier features).