📚 সমস্ত অধ্যায় দেখুন
অধ্যায়/ফেজ 2 · Phase 2 · Algorithms
2.9২০ মিনিট পড়া19 / 68

PCA — Dimension কমিয়ে আনা

PCA

Eigenvector দিয়ে dimensionality reduction।

Hook — ছায়া দেখে বস্তু চেনা

একটি 3D বস্তুকে দেয়ালে আলো ফেললে 2D ছায়া পড়ে। ছায়া পুরোপুরি বস্তু না, কিন্তু আকৃতির অনেক কিছু ধরে রাখে। PCA ঠিক এই “ছায়া” বানানোর কাজ করে — high-dimensional data কে কম dimension এ নামানো, যেখানে variance সবচেয়ে বেশি বজায় থাকে।

Concept — Principal Component

Data এর variance যেদিকে সবচেয়ে বেশি — সেটাই 1st Principal Component (PC1)। তার সাথে orthogonal হয়ে পরবর্তী সর্বোচ্চ variance এর direction → PC2 … এভাবে।

মনে রাখো

PCA hold করে: linear, unsupervised, variance preservation।

Math — Covariance ও Eigen Decomposition

  • Step 1: প্রতি feature কে mean-center করো।
  • Step 2: Covariance matrix Σ = (1/n) XᵀX বের করো।
  • Step 3: Σ এর eigenvector ও eigenvalue বের করো।
  • Step 4: top-k eigenvector দিয়ে projection — X' = X · Wₖ।
Σ · v = λ · v (eigenvector v, eigenvalue λ)

λ যত বড়, সেই direction এ variance তত বেশি। Explained variance ratio = λᵢ / Σλ।

Real-world Use

  • Visualization — high-D data কে 2D তে এনে plot।
  • Noise reduction।
  • Faster training — feature কমিয়ে।
  • Image compression — eigenfaces।

Code — Iris কে 2D তে নামানো

pca_iris.py
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

data = load_iris()
X = StandardScaler().fit_transform(data.data)

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

print("Explained variance ratio:", pca.explained_variance_ratio_)
print("Total kept:", pca.explained_variance_ratio_.sum())

plt.scatter(X2[:, 0], X2[:, 1], c=data.target, cmap="viridis")
plt.xlabel("PC1"); plt.ylabel("PC2"); plt.title("Iris in 2D via PCA")
plt.show()

Scree Plot — কয়টা component রাখব

scree.py
import numpy as np, matplotlib.pyplot as plt
from sklearn.decomposition import PCA

pca = PCA().fit(X)
cum = np.cumsum(pca.explained_variance_ratio_)
plt.plot(range(1, len(cum)+1), cum, marker="o")
plt.axhline(0.95, color="red", ls="--")
plt.xlabel("Components"); plt.ylabel("Cumulative variance"); plt.show()

Common Mistakes

সবচেয়ে বড় ভুল

Scaling না করে PCA — বড় scale এর feature কে component বানিয়ে দেয়।

  • Train/Test split এর আগে fit করা — leakage।
  • Non-linear data এ PCA চাপানো — t-SNE/UMAP দরকার।
  • Component কে original feature এর মত interpret করা।
  • অনেক বেশি component রাখা — তাহলে আর কমানোর মানে কী?

Practice Tasks

  • Task 1: MNIST (sklearn digits) কে 2D তে এনে scatter plot করো।
  • Task 2: 95% variance ধরে রাখতে কয়টি component লাগে বের করো।
  • Task 3: PCA + Logistic Regression vs raw + Logistic Regression — accuracy ও training time তুলনা।

Mini Project — Eigenfaces

Sklearn এর `fetch_lfw_people` দিয়ে face dataset নাও। PCA এর top 20 component কে image হিসাবে visualize করো (eigenfaces)। PCA + SVM দিয়ে face recognition pipeline বানাও।

Summary

এক নজরে

PCA = variance ধরে রেখে dimension কমানো = visualization + speed + noise reduction।