একজন ডাক্তার রোগীর ১০০টি test report দেখে সিদ্ধান্ত নেন — কিন্তু আসলে ৩-৪টি প্রধান "অক্ষ"-এ সমস্ত তথ্য সংকুচিত হয়ে যায় (হৃদরোগ, রক্তচাপ, সংক্রমণ, বিপাক)। বাকিগুলো কেবল noise বা সাময়িক variation।
PCA ঠিক এই কাজটাই করে — data-র "প্রকৃত" কয়েকটি অক্ষ খুঁজে বের করে, বাকিগুলো ফেলে দেয়। MNIST থেকে gene expression — সর্বত্র এটি প্রথম analysis tool।
PCA কী করে?
High-dimensional data X ∈ ℝn×d-কে এমন একটি নতুন orthogonal axis-set-এ project করে যেখানে প্রথম axis সবচেয়ে বেশি variance ধরে, দ্বিতীয় তার পরের সর্বোচ্চ, এবং এভাবে চলতে থাকে।
- Goal: dimensionality reduction, noise removal, visualization।
- Output: k principal component (PC₁, PC₂, …, PCk)।
Algorithm — ৫ ধাপ
- Center: প্রতিটি feature থেকে mean বিয়োগ → X̃ = X − μ।
- Covariance matrix: C = (1/n) X̃TX̃ (shape d×d)।
- Eigendecomposition: C = V Λ VT। (অথবা সরাসরি X̃-এ SVD।)
- Top-k components: সবচেয়ে বড় k eigenvalue-র eigenvector নিন → Vk।
- Project: Z = X̃ Vk। Shape (n, k)।
Explained Variance
প্রতিটি principal component কতটুকু variance ব্যাখ্যা করে:
SVD দিয়ে PCA
Covariance matrix বানানোর দরকার নেই — সরাসরি centered data-তে SVD:
এটি বেশি stable ও দ্রুত — sklearn ভেতরে এভাবেই করে।
Python Implementation (scratch + sklearn)
import numpy as np
# Fake 3-D dataset: 200 samples, mostly along one direction
np.random.seed(0)
n = 200
t = np.linspace(0, 1, n)
X = np.stack([t, 2*t, 3*t], axis=1) + 0.1 * np.random.randn(n, 3)
# --- Scratch PCA ---
mu = X.mean(axis=0)
Xc = X - mu
# Method A: covariance + eigendecomposition
C = (Xc.T @ Xc) / n
eigvals, eigvecs = np.linalg.eigh(C) # ascending order
idx = np.argsort(-eigvals) # sort descending
eigvals, eigvecs = eigvals[idx], eigvecs[:, idx]
print("variance ratio:", eigvals / eigvals.sum())
# Method B: SVD on centered data (preferred)
U, S, Vt = np.linalg.svd(Xc, full_matrices=False)
explained = (S**2) / (S**2).sum()
print("svd explained ratio:", explained)
# Project to 2-D
k = 2
Vk = Vt[:k].T # (3, 2)
Z = Xc @ Vk
print("reduced shape:", Z.shape) # (200, 2)
# --- sklearn version ---
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
Z_sk = pca.fit_transform(X)
print("sklearn explained ratio:", pca.explained_variance_ratio_)
# Reconstruction (lossy)
X_reconstructed = Z @ Vk.T + mu
err = np.linalg.norm(X - X_reconstructed) / np.linalg.norm(X)
print(f"reconstruction relative error: {err:.4f}")AI/ML সংযোগ
- Visualization: 100-D embedding → 2-D scatter plot।
- Noise reduction: ছোট eigenvalue-র direction = noise; ফেলে দিন।
- Feature compression: 1000 feature → 50 PC, training দ্রুত।
- Preprocessing: PCA-whitening দিয়ে covariance = I বানানো।
- Eigenfaces: face image-এ PCA → recognition-এর ধ্রুপদী পদ্ধতি।
- Bottleneck intuition: autoencoder = non-linear PCA।
সীমাবদ্ধতা
- Linear — curved manifold (যেমন swiss roll) ধরতে পারে না; সেক্ষেত্রে t-SNE/UMAP/autoencoder।
- Feature scale-এর প্রতি sensitive — সাধারণত আগে StandardScaler ব্যবহার করুন।
- Interpretability সীমিত — PC = original feature-এর mixture।
Common Mistakes
- Center না করে PCA — সম্পূর্ণ ভুল component আসবে।
- Scale না করা — বড় unit-এর feature dominate করবে।
- k বাছাই করার আগে explained variance curve না দেখা।
- Test set-এ আবার fit করা — train-এর PCA দিয়ে শুধু transform করতে হবে।
Practice Tasks
- Iris dataset-এ PCA চালিয়ে 4-D → 2-D plot করুন; class রং দিয়ে আলাদা করুন।
- Explained variance ratio-র cumulative sum plot করুন; ৯৫% রাখতে কত k লাগে?
- Scaling করা ও না-করা দুই অবস্থায় PC compare করুন।
Assignment
MNIST থেকে ১০০০ digit image নিন (sklearn-এ load_digits)। 64-D feature-এ PCA চালিয়ে 2-D scatter plot করুন digit-অনুসারে রঙ দিয়ে। তারপর k=5, 10, 20, 40 অবস্থায় reconstruction দেখান — কোন k-এ চোখে চেনা যায়?
Interview Questions
- PCA কী করে এবং কেন প্রথম PC সর্বাধিক variance ধরে?
- SVD ও PCA-র সম্পর্ক কী?
- PCA-র আগে standardization কেন জরুরি?
- PCA-র সীমাবদ্ধতা কী, কখন t-SNE/UMAP ব্যবহার করবেন?
Mini Project
"Eigenfaces Lite" — sklearn-এর fetch_olivetti_faces দিয়ে ছোট face dataset লোড করুন। PCA চালিয়ে প্রথম 16 component-কে image হিসেবে plot করুন (এগুলোই "eigenfaces")। তারপর একটি face-কে top-k component দিয়ে reconstruct করে দেখান k=10, 50, 100-এ মান কেমন বদলায়।
Summary · সারসংক্ষেপ
- PCA = data-র সর্বোচ্চ variance ধরে এমন orthogonal axis খোঁজা।
- Algorithm: center → covariance → eigendecomposition → top-k → project। (অথবা সরাসরি SVD।)
- Visualization, noise reduction, feature compression, whitening — সব এর প্রয়োগ।
- Linear সীমাবদ্ধতা — curved manifold-এর জন্য non-linear method।