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ₖ।
λ যত বড়, সেই 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 তে নামানো
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 রাখব
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।