Topik ini membahas alasan mereduksi dimensi sebelum pemodelan, mulai dari kutukan dimensionalitas (curse of dimensionality) yang merusak makna jarak hingga dua jalur reduksi berupa seleksi fitur dan ekstraksi fitur. Dua eksperimen kecil menunjukkan gejalanya secara terukur, yaitu jarak yang menyamarata pada dimensi tinggi dan akurasi yang menurun karena fitur derau. Disiplin memasang transformasi hanya pada data latih turut dibahas karena kesalahannya membuat evaluasi menyesatkan.
Kutukan dimensionalitas#
Kutukan dimensionalitas adalah kumpulan gejala yang muncul ketika jumlah fitur bertambah besar, dan gejala yang paling mengganggu pemodelan adalah menyamaratnya jarak. Pada dimensi tinggi, selisih jarak terdekat dan jarak terjauh antar titik menyempit, sehingga semua titik terasa hampir sama jauhnya. Banyak algoritma machine learning justru bekerja dengan membandingkan jarak, mulai dari K-Means, DBSCAN, hingga model tetangga terdekat (k-nearest neighbors, KNN). Apabila jarak tidak lagi membedakan, seluruh keluarga alat itu tidak lagi dapat diandalkan.
Gejala kedua menyangkut kebutuhan data. Ruang fitur yang lebih tinggi membuat volumenya membengkak secara eksponensial, sehingga jumlah contoh yang sama terasa makin jarang dan celah kosong antar titik melebar. Karena contoh yang tersedia jarang, jumlah data yang dibutuhkan model bertambah cepat hanya untuk menjaga cakupan yang sama. Kelebihan fitur juga menimbulkan korelasi palsu, sehingga data berdimensi tinggi menjadi mahal secara hitungan dan rawan overfitting sebelum pemodelan dimulai.
Alasan mereduksi dan dua jalurnya#
Reduksi dimensi menjawab masalah itu dengan mengurangi jumlah kolom yang diproses. Empat alasan berikut adalah yang paling umum. Visualisasi menjadi alasan pertama, karena manusia hanya membaca dua atau tiga sumbu, sedangkan data nyata sering memiliki puluhan fitur. Kompresi menjadi alasan kedua, yaitu menyimpan data dengan lebih sedikit angka tanpa kehilangan sebagian besar informasi. Alasan ketiga adalah membuang korelasi redundan dan derau, karena kolom yang saling mengulang membawa informasi ganda, sedangkan kolom derau mengaburkan sinyal. Alasan keempat adalah mempercepat pemodelan, karena jumlah kolom yang lebih kecil menurunkan biaya pelatihan dan inferensi.
Jalur pertama adalah seleksi fitur (feature selection), yaitu memilih sebagian kolom asli dan membuang sisanya. Makna setiap kolom tetap utuh, sehingga hasilnya mudah dijelaskan, dan pemilihannya dapat mengandalkan korelasi, kepentingan fitur dari model, atau pengetahuan domain. Jalur kedua adalah ekstraksi fitur (feature extraction), yaitu membuat kolom baru sebagai gabungan kolom lama, dan PCA (principal component analysis) menjadi contohnya. Informasi dari banyak kolom terkompresi ke beberapa kolom baru, tetapi makna kolom asli ikut tercampur. Tabel berikut merangkum perbedaannya.
| Aspek | Seleksi fitur | Ekstraksi fitur |
|---|---|---|
| Bentuk keluaran | sebagian kolom asli | kolom baru gabungan kolom asli |
| Interpretabilitas | tetap utuh per kolom | menurun, karena kolom baru adalah campuran |
| Contoh metode | korelasi, kepentingan fitur, pengetahuan domain | PCA, proyeksi acak |
| Cocok ketika | sebagian kolom memang tidak berguna | informasi tersebar di banyak kolom |
Kedua jalur tidak saling meniadakan, karena praktik yang sama dapat menggabungkannya. Seleksi fitur dijalankan lebih dahulu untuk membuang kolom yang jelas tidak berkontribusi, lalu ekstraksi fitur menerapkan PCA pada kolom yang tersisa. Urutan ini menjaga transformasi tetap ringan dan mengurangi campuran yang tidak perlu pada komponennya. Pilihan jalur sebaiknya mengikuti tujuan yang dinyatakan sebelumnya. Kebutuhan visualisasi mendorong ekstraksi ke dua kolom, sedangkan kebutuhan model yang tetap dapat dijelaskan mendorong seleksi.
Dua eksperimen kecil#
Skrip berikut mengukur kedua gejala secara langsung. Eksperimen pertama menghitung rasio jarak terdekat terhadap jarak terjauh antar pasangan titik acak normal pada dimensi 2, 10, 100, dan 1000 dengan seed tetap 42. Rasio yang mendekati 1.0 menandakan jarak yang menyamarata. Eksperimen kedua membandingkan KNN pada lima fitur informatif dengan KNN pada seluruh 40 fitur. Argumen shuffle=False menjaga lima kolom pertama tetap menjadi kolom informatif. Jalankan skrip dari folder topik dengan perintah python3 -B kutukan-dimensi.py.
"""Dua eksperimen kecil tentang kutukan dimensionalitas."""
import numpy as np
from scipy.spatial.distance import pdist
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
# eksperimen 1: rasio jarak terdekat terhadap jarak terjauh antar pasangan titik
rng = np.random.default_rng(42)
print("rasio jarak terdekat / jarak terjauh antar pasangan titik:")
for d in (2, 10, 100, 1000):
titik = rng.normal(size=(200, d))
jarak = pdist(titik)
print(f" dimensi {d:4d}: {jarak.min() / jarak.max():.4f}")
# eksperimen 2: KNN dengan lima fitur informatif vs seluruh 40 fitur
# shuffle=False menjaga lima kolom pertama tetap sebagai kolom informatif
X, y = make_classification(
n_samples=600, n_features=40, n_informative=5,
shuffle=False, random_state=42,
)
X_latih, X_uji, y_latih, y_uji = train_test_split(
X, y, test_size=0.25, random_state=42, stratify=y
)
for nama, kolom in (("5 fitur informatif", 5), ("seluruh 40 fitur", 40)):
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X_latih[:, :kolom], y_latih)
akurasi = model.score(X_uji[:, :kolom], y_uji)
print(f"KNN dengan {nama}: akurasi uji {akurasi:.4f}")rasio jarak terdekat / jarak terjauh antar pasangan titik:
dimensi 2: 0.0048
dimensi 10: 0.1580
dimensi 100: 0.5805
dimensi 1000: 0.8336
KNN dengan 5 fitur informatif: akurasi uji 0.8733
KNN dengan seluruh 40 fitur: akurasi uji 0.8000Pada eksperimen pertama, rasio naik dari 0.0048 pada dimensi 2 menuju 0.8336 pada dimensi 1000. Rasio pada dimensi 2 berarti jarak terjauh ratusan kali jarak terdekat, sehingga kedekatan masih bermakna, sedangkan rasio pada dimensi 1000 berarti jarak terjauh hampir tidak berbeda dari jarak terdekat. Eksperimen kedua melengkapi gambaran tersebut. Akurasi uji KNN turun dari 0.8733 dengan lima fitur informatif menjadi 0.8000 ketika 35 kolom derau ikut dihitung. Kolom derau menambah selisih acak pada setiap pasangan jarak, sehingga perbedaan yang relevan bagi kelas tersamar dan tetangga terdekat kehilangan ketepatan. Hasil ini juga memperlihatkan mengapa penskalaan tetap relevan, karena KNN murni membandingkan selisih fitur tanpa pembobotan apa pun.
Ringkasan#
- Pada dimensi sangat tinggi, jarak antar titik menyamarata sehingga alat berbasis jarak dan tetangga terdekat kehilangan makna, sementara kebutuhan data membengkak.
- Reduksi dimensi dilakukan untuk visualisasi, kompresi, pembuangan korelasi redundan dan derau, serta percepatan pemodelan.
- Seleksi fitur memilih kolom asli dan menjaga interpretabilitas, sedangkan ekstraksi fitur membuat kolom baru gabungan seperti PCA.
- Transformasi reduksi dimensi dipasang hanya pada data latih, kemudian data uji cukup ditransformasikan.
Referensi#
- Decomposition — scikit-learn — Panduan resmi dekomposisi matriks yang menjadi dasar metode ekstraksi fitur.
- sklearn.neighbors.KNeighborsClassifier — scikit-learn — Dokumentasi model tetangga terdekat yang dipakai pada eksperimen kedua.
- sklearn.datasets.make_classification — scikit-learn
— Dokumentasi penghasil dataset sintetis beserta argumen
shuffleyang menjelaskan urutan kolom. - Nearest Neighbors — scikit-learn — Panduan resmi keluarga model tetangga terdekat.