PC A.id

PC A.id

Diperbarui 2026-02-16 Baca 2 menit
Ringkasan
  • PCA mencari sumbu ortogonal dengan varian terbesar lalu memproyeksikan data ke komponen utama tersebut.
  • Rasio varian terjelaskan membantu memilih jumlah komponen yang tepat.
  • Standardisasi fitur penting ketika skala antar variabel berbeda.

Intuisi #

PCA memutar sistem koordinat ke arah yang paling informatif. Menyimpan beberapa arah utama saja sudah cukup untuk mempertahankan struktur dominan data.

Penjelasan Rinci #

1. Motivasi #

  • Data berdimensi tinggi sulit divisualisasikan; PCA mencari kombinasi linear ortogonal yang paling informatif.
  • Metode ini tidak butuh label—murni berdasarkan kovarians data.
  • Komponen utama hasil proyeksi dapat dipakai untuk visualisasi, denoising, atau model lanjutan.

2. Rumus utama #

Dengan matriks data berpusat (X \in \mathbb{R}^{n \times d}):

  1. Kovarians (\Sigma = \frac{1}{n} X^\top X)
  2. Autovektor (\Sigma v_j = \lambda_j v_j)
  3. Proyeksi (Z = X V_k)

3. Dataset contoh #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from sklearn.datasets import make_blobs

X, y = make_blobs(n_samples=600, n_features=3, random_state=117117)

fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(projection="3d")
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y)
ax.set_xlabel("$x_1$")
ax.set_ylabel("$x_2$")
ax.set_zlabel("$x_3$")

Blobs 3D


4. PCA di scikit-learn #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

pca = PCA(n_components=2, whiten=True)
X_pca = pca.fit_transform(StandardScaler().fit_transform(X))

plt.figure(figsize=(8, 8))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y)
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.title("Embedding 2D via PCA")
plt.show()

Proyeksi PCA


5. Pentingnya penskalaan #

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from sklearn.preprocessing import StandardScaler

X, y = make_blobs(
    n_samples=200,
    n_features=3,
    random_state=11711,
    centers=3,
    cluster_std=2.0,
)
X[:, 1] *= 1000
X[:, 2] *= 0.01

X_ss = StandardScaler().fit_transform(X)

pca = PCA(n_components=2).fit(X)
X_pca = pca.transform(X)

pca_ss = PCA(n_components=2).fit(X_ss)
X_pca_ss = pca_ss.transform(X_ss)

plt.figure(figsize=(10, 5))
plt.subplot(121)
plt.title("Tanpa skala")
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, marker="x", alpha=0.6)
plt.subplot(122)
plt.title("Setelah standardisasi")
plt.scatter(X_pca_ss[:, 0], X_pca_ss[:, 1], c=y, marker="x", alpha=0.6)
plt.show()

Dampak skala


6. Catatan praktis #

  • Gunakan rasio varian yang dijelaskan untuk memilih jumlah komponen (80–90% sering cukup).
  • PCA dijalankan lewat SVD; gunakan solver teracak untuk dataset besar.
  • Jika struktur data nonlinier, coba Kernel PCA, UMAP, atau t-SNE.