Topik ini membahas PCA (principal component analysis) sebagai metode ekstraksi fitur yang paling banyak digunakan, mulai dari cara mencari komponen utama, pembacaan varians yang dijelaskan, hingga pemakaian dan batasnya. Satu skrip Python menerapkan PCA pada dataset breast cancer yang telah diskalakan, lalu porsi varians setiap komponen dibaca dari angka. Topik ditutup dengan catatan jujur tentang apa yang dapat dan tidak dapat digantikan oleh dua komponen pertama.
Komponen utama dan varians yang dijelaskan#
PCA mencari arah baru pada ruang fitur yang disebut komponen utama, dan arah pertama dipilih agar proyeksi data ke arah itu memiliki varians terbesar. Komponen kedua dipilih dengan syarat tegak lurus terhadap komponen pertama dan memaksimalkan sisa varians yang belum tertangkap. Pola ini berlanjut hingga jumlah komponen yang diminta. Karena saling tegak lurus, komponen-komponen PCA tidak saling berkorelasi. Sifat ini tidak dijamin pada fitur asli. Data kemudian digambarkan ulang sebagai koordinat pada komponen-komponen baru tersebut, dan penggambaran ulang inilah yang disebut proyeksi.
Porsi informasi yang dibawa setiap komponen diukur dari variansnya. Rasio varians komponen ke- dihitung terhadap total varians seluruh komponen:
dengan varians data sepanjang komponen ke- dan jumlah fitur asli. Pada scikit-learn, rasio ini tersedia sebagai explained_variance_ratio_, dan jumlahnya selalu satu bila semua komponen dipakai. Deret rasio itu menurun karena setiap komponen hanya boleh memaksimalkan sisa varians. Pada data yang kolom-kolomnya saling berkorelasi, dua atau tiga komponen pertama biasanya sudah membawa sebagian besar varians.
Penentuan jumlah komponen lazimnya mengikuti ambang kumulatif. Nilai 0.85 hingga 0.95 pada jumlah kumulatif menjadi titik potong yang sering dipakai, sehingga jumlah komponen dipilih sekecil mungkin selama ambang itu tercapai. Aturan lain membandingkan setiap rasio dengan rata-rata seluruh rasio, yaitu komponen yang rasionya di atas rata-rata dipertahankan. Aturan semacam itu hanya kerangka, karena keputusan akhir tetap diperiksa dari kegunaan hasilnya pada tugas berikutnya.
Pemakaian PCA dan batasannya#
Pemakaian yang paling lazim adalah visualisasi. Proyeksi dua komponen pertama menampung data berdimensi puluhan ke dalam dua sumbu, sehingga pemisahan kasar antar kelas dapat diamati sekaligus. Pemakaian berikutnya adalah reduksi derau, karena komponen dengan varians kecil sering didominasi variasi acak, dan membuangnya menyisakan pola yang lebih bersih. PCA juga digunakan sebagai pra-pemrosesan bagi model yang membutuhkan fitur tak berkorelasi, misalnya model linear yang kestabilannya terganggu kolom yang saling mengulang.
Dua disiplin menyertai pemakaian ini. Pertama, fitur dengan satuan berbeda wajib diskalakan lebih dahulu dengan StandardScaler, karena PCA mengukur varians dan fitur berskala besar akan mendominasi komponen pertama tanpa memandang maknanya. Kedua, transformasi dipasang hanya pada data latih, lalu data uji cukup ditransformasikan, sebagaimana disiplin transformasi data latih dan data uji pada umumnya.
Batas yang paling penting menyangkut makna. Komponen utama adalah campuran seluruh fitur asli, sehingga koefisien pada arah proyeksinya tidak lagi mewakili satu variabel tertentu. Interpretabilitas yang menurun ini menjadi konsekuensi dari kompresi, dan analisis yang menuntut penjelasan per variabel lebih cocok menggunakan seleksi fitur. Dengan kata lain, PCA melayani pemodelan dan visualisasi dengan baik, tetapi bukan alat untuk penjelasan per kolom.
Contoh pada dataset breast cancer#
Dataset breast cancer memuat 569 contoh dengan 30 fitur hasil pengukuran sel, sehingga fiturnya memiliki satuan yang berbeda-beda. Skrip berikut menstandardisasi seluruh fitur, menghitung lima komponen pertama beserta rasio variansnya, lalu membuat proyeksi dua komponen untuk keperluan visualisasi. Keluarannya berupa angka dan bentuk array, dan pembacaannya cukup untuk memahami kompromi kompresi tanpa grafik. Jalankan skrip dari folder topik dengan perintah python3 -B pca-breast-cancer.py.
"""Varians yang dijelaskan PCA pada dataset breast cancer."""
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
cancer = load_breast_cancer()
X = StandardScaler().fit_transform(cancer.data)
# lima komponen pertama beserta porsi variansnya
pca5 = PCA(n_components=5, random_state=42).fit(X)
rasio = pca5.explained_variance_ratio_
kumulatif = np.cumsum(rasio)
for i, (r, k) in enumerate(zip(rasio, kumulatif), start=1):
print(f"PC{i}: rasio {r:.4f}, kumulatif {k:.4f}")
# proyeksi dua komponen untuk keperluan visualisasi
pca2 = PCA(n_components=2, random_state=42)
Z2 = pca2.fit_transform(X)
print(f"bentuk proyeksi dua komponen: {Z2.shape}")PC1: rasio 0.4427, kumulatif 0.4427
PC2: rasio 0.1897, kumulatif 0.6324
PC3: rasio 0.0939, kumulatif 0.7264
PC4: rasio 0.0660, kumulatif 0.7924
PC5: rasio 0.0550, kumulatif 0.8473
bentuk proyeksi dua komponen: (569, 2)Komponen pertama saja membawa 0.4427 atau sekitar 44 persen varians, dan lima komponen pertama bersama-sama mencapai 0.8473. Artinya, 30 fitur yang saling berkorelasi itu terkompresi menjadi lima kolom tak berkorelasi, sedangkan sekitar 15 persen varians tersisa tersebar di 25 komponen berikutnya. Proyeksi dua komponen mempertahankan 0.6324 atau sekitar 63 persen varians dengan bentuk array (569, 2), ukuran yang memang siap digambar pada dua sumbu. Dua komponen cukup untuk melihat pemisahan kelas secara kasar pada grafik, tetapi bukan pengganti fitur lengkap saat memodelkan, karena 37 persen varians yang tersisa dapat memuat sinyal yang dibutuhkan model.
Ringkasan#
- PCA mencari arah varians terbesar secara berurutan, dan setiap komponen tegak lurus terhadap komponen sebelumnya sehingga hasilnya tak berkorelasi.
explained_variance_ratio_menyatakan porsi varians setiap komponen, dan jumlah kumulatifnya menjadi ukuran seberapa banyak informasi yang dipertahankan.- Fitur bersatuan berbeda diskalakan lebih dahulu, dan transformasi dipasang hanya pada data latih.
- Proyeksi dua komponen melayani visualisasi kasar, sedangkan pemodelan tetap membutuhkan fitur lengkap karena komponen adalah campuran fitur asli.
Referensi#
- sklearn.decomposition.PCA — scikit-learn
— Dokumentasi PCA beserta atribut
explained_variance_ratio_yang dibaca pada skrip. - Decomposition — scikit-learn — Panduan resmi dekomposisi matriks, termasuk PCA dan pemilihan jumlah komponen.
- sklearn.preprocessing.StandardScaler — scikit-learn — Dokumentasi standardisasi fitur sebelum PCA.
- sklearn.datasets.load_breast_cancer — scikit-learn — Dokumentasi dataset breast cancer yang dipakai pada contoh.