Unsupervised Learningপড়তে ৮ মিনিট লাগবে

পিসিএ (Principal Component Analysis - PCA)

১০০টি ফিচারকে (features) স্কোয়াশ (Squash) করে বা ছেঁটে নিয়ে শুধুমাত্র সবচেয়ে বেশি দরকারীগুলোকেই রাখা
goal:এর ডাইমেনশনগুলোকে (dimensions) ছোট বা রিডিউস (Reduce) করা · এবং এর সর্বোচ্চ বা ম্যাক্সিমাম ভ্যারিয়ান্স (maximum variance) ধরে রাখাmethod:এর সবচেয়ে বড় স্প্রেডগুলোর (spread) দিক খুঁজে বের করাresult:অনেক কম ফিচার (Fewer features) · অনেক ফাস্টার ট্রেইনিং (faster training) · অনেক কম নয়েজ (less noise)

ধরা যাক, আপনি একটি অনেক সুন্দর পর্বতমালার (mountain) ছবি তুললেন। এখানকার এই একদম আসল বা অরিজিনাল ছবিটি (original image) হলো একটি ১০ মেগাপিক্সেলের বা 10 megapixels (এমপি) ছবি — যার মাঝে রঙের লক্ষ লক্ষ ছোট ছোট ডট (dots) লুকিয়ে রয়েছে। এখন এটিকে ছোট করে বা কম্প্রেস (compress) করে এর একটি ছোট থাম্বনেইল (thumbnail) বানিয়ে নিন। এক্ষেত্রে আপনি হয়তো এর ভেতরের অনেক ছোটোখাটো ডিটেইল বা সূক্ষ্ম ডিটেইলগুলো (detail) হারিয়ে ফেলবেন, তবে তারপরও আপনি এখান থেকে এর ভেতরের ওই পাহাড় (mountains), আকাশ (sky), কিংবা এর গাছপালাগুলোকে (trees) বেশ স্পষ্টভাবেই দেখতে পারবেন। অর্থাৎ এখানকার গুরুত্বপূর্ণ সব শেইপগুলো (shapes) কিন্তু ঠিকই সংরক্ষিত (preserved) আছে; মূলত এখানকার শুধুমাত্র এর ওই সূক্ষ্ম ডিটেইলগুলোই (fine grain) একটু কমে গেছে বা গায়েব হয়ে গেছে।

PCA-ও মূলত এর ডেটার (data) সাথে ঠিক একই কাজটাই করে থাকে। আপনার কাছে যদি ১০০টি ফিচার (features) (কলাম) বিশিষ্ট কোনো ডেটাসেট (dataset) থাকে, তবে PCA এটিকে স্কোয়াশ (squash) করে বা মুছে দিয়ে হয়তো ১০টি ফিচারে নামিয়ে আনতে পারে — অথচ এটি এর ভেতরের প্রায় সব দরকারি তথ্যগুলো বা ইনফরমেশনগুলোকেই (information) ঠিকঠাক বজায় রাখে। এখানকার এই নতুন ফিচারগুলো হলো মূলত এখানকার এই আসল ডেটাগুলোর বা অরিজিনালগুলোর (originals) একেকটি ভিন্ন ভিন্ন কম্বিনেশন (combinations), যেগুলোকে মূলত ডেটার মধ্যকার সর্বোচ্চ পরিমাণ (maximum amount) ভ্যারিয়েশনগুলোকে (variation) ধরে রাখার বা ক্যাপচার করার (capture) জন্যই বেছে নেওয়া হয়েছে।

কখন ঠিক ডাইমেনশনগুলোকে (dimensions) ছোট বা কমিয়ে আনা উচিত? (Why reduce dimensions?)

  • গতি বা স্পিড (Speed) — কম ফিচার (features) = আরও অনেক বেশি ফাস্ট বা দ্রুত ট্রেইনিং (faster training)। এখানকার ১,০০০টি ফিচার (features) থেকে এগুলোকে মাত্র ৫০টিতে নামিয়ে আনার ফলে আপনার ট্রেইনিংয়ের সময়টা (training time) আশ্চর্যজনকভাবেই অনেক খানি কমে যাবে।
  • নয়েজ কমানো (Noise reduction) — এর মধ্যে থাকা অনেকগুলো ফিচারই (features) হলো শুধু এক একটি নয়েজ (noise)। PCA এগুলোকে ছেঁটে ফেলে দেয়, আর এর মাধ্যমেই এটি মূলত একটি মডেলের পারফরম্যান্সকে (model performance) আরও অনেক উন্নত বা ইম্প্রুভ (improving) করে তোলে।
  • ভিজ্যুয়ালাইজেশন (Visualization) — আপনি চাইলে ১০০টি ডাইমেনশনকে (dimensions) কখনোই একসাথে প্লট (plot) করতে পারবেন না, কিন্তু আপনি চাইলে খুব সহজেই ২ বা ৩টিকে ঠিকই করতে পারবেন। মূলত PCA আপনাকে আপনার ডেটাগুলোকে খুব ভালোভাবে দেখতে (see) সাহায্য করে।
  • কোর্স অফ ডাইমেনশনালিটি (Curse of dimensionality) — মূলত কোনো বড় বা হাই-ডাইমেনশনাল স্পেসের (high-dimensional space) মধ্যে এখানকার সব জিনিসই একে অপরের থেকে অনেক বেশি দূরে দূরে অবস্থান করে। তাই মডেলদের (Models) এগুলো নিয়ে বেশ একটু স্ট্রাগল (struggle) করতে হয়। তাই এদের ডাইমেনশন বা মাত্রা কমানোর বিষয়টি অনেক সময় বেশ সাহায্য করে থাকে।

PCA কীভাবে কাজ করে (intuitively) (How PCA works (intuitively))

ব্যাপারটিকে চাইলে একটি ৩ডি (3D) স্পেসে (space) ছড়িয়ে ছিটিয়ে থাকা কিছু ডেটা পয়েন্টের (data points) মেঘ বা ক্লাউডের (cloud) মতো করে চিন্তা করতে পারেন। এখন এই PCA আপনাকে জিজ্ঞাসা করে: "যদি আমাকে এই ৩ডি (3D) ক্লাউডটিকে একটি ২ডি (2D) কাগজের পাতার (sheet) ওপর পুরোপুরি ফ্ল্যাট (flatten) বা চ্যাপ্টা করে বসাতে হতো, তবে এর সবচেয়ে বেশি অংশটুকু বা স্প্রেডটুকু (spread) তুলে আনার জন্য আমার ঠিক কোন অ্যাঙ্গেল (angle) বা কোণে কাগজটিকে ধরা উচিত?"

  1. প্রথমে এর মাঝের সবচেয়ে বেশি ভ্যারিয়ান্সের (most variance) (সবচেয়ে বেশি ছড়ানো বা most spread) দিকটি খুঁজে বের করুন। আর এটিই হলো PC1 (প্রিন্সিপল কম্পোনেন্ট ১ বা Principal Component 1)।
  2. এরপর এর PC1 এর একদম লম্বালম্বি বা পারপেন্ডিকুলার (perpendicular) অবস্থানে থাকা এর পরের সবচেয়ে বড় ভ্যারিয়্যান্সের দিকটি খুঁজে বের করুন। আর এটিই হলো PC2
  3. আপনার যতক্ষণ পযর্ন্ত এই কম্পোনেন্টগুলো (components) দরকার হয় ততক্ষণ পর্যন্ত এভাবেই এগুলোকে বের করতে থাকুন।

আর এর প্রত্যেকটি কম্পোনেন্টই (component) হলো মূলত এক একটি নতুন অক্ষ বা নতুন অ্যাক্সিস (new axis) — যা এখানকার অরিজিনাল বা আসল ফিচারগুলোর (features) একটি ব্লেন্ড বা মিশ্রণ (blend) — যেগুলোকে মূলত এখানকার ম্যাক্সিমাম বা সর্বোচ্চ তথ্য বা ইনফরমেশনগুলো (information) ক্যাপচার (capture) করার জন্য নির্দিষ্ট দিকে মুখ করে রাখা বা ওরিয়েন্টেড (oriented) করা হয়েছে।

PCA: হাই থেকে লো ডাইমেনশনসমূহ (High to Low Dimensions)

from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import numpy as np
# আইরিস ডেটাসেট (Iris dataset): ৪টি ফিচার (4 features)
X, y = load_iris(return_X_y=True)
print(f"Original shape: {X.shape}") # 150 samples, 4 features
# এদের ২-টি ডাইমেনশনে (dimensions) নামিয়ে আনুন (Reduce to 2 dimensions)
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)
print(f"Reduced shape: {X_reduced.shape}")
# ঠিক আমরা এখানে আসলে কতোটুকু তথ্য বা ইনফরমেশন (info) রাখতে পেরেছি?
print(f"\nVariance explained per component: {np.round(pca.explained_variance_ratio_, 3)}")
print(f"Total variance kept: {sum(pca.explained_variance_ratio_):.1%}")
# এর নতুন ২ডি ஸ்பেসের (2D space) প্রথম ২-টি পয়েন্ট
print(f"\nFirst 2 samples (2D): {np.round(X_reduced[:2], 2)}")
Output
Original shape: (150, 4)
Reduced shape:  (150, 2)

Variance explained per component: [0.925 0.053]
Total variance kept: 97.8%

First 2 samples (2D): [[-2.68  0.32]
 [-2.71 -0.18]]

আপনার ঠিক কয়টি কম্পোনেন্ট (components) রাখা উচিত? (How many components to keep?)

এক্ষেত্রে মূলত এখানকার কোনো একটি মাত্র সঠিক উত্তরের ওপর নির্ভর করা যায় না, তবে এখানকার সবচেয়ে সাধারণ একটি নিয়ম বা রুল (common rule) হলো: আপনার ঠিক ততোটুকুই কম্পোনেন্ট (components) রাখা উচিত যেগুলো মূলত এখানকার মোট ভ্যারিয়ান্সের (total variance) ৯০-৯৫%-কে (90-95%) ব্যাখ্যা (explain) করতে পারে। এর কিউমুলেটিভ এক্সপ্লেইনড ভ্যারিয়ান্সগুলোকে (cumulative explained variance) প্লট করে (Plot) দেখুন এবং লক্ষ্য করে দেখুন যে ঠিক কোথায় এখানকার কার্ভ (curve) বা বক্ররেখাটি পুরোপুরি সোজা বা ফ্ল্যাট (flattens out) হয়ে গেছে।

ওপরের ওই আইরিশ (Iris) উদাহরণটিতে, মাত্র ২-টি বা 2টি কম্পোনেন্টই (components) তার এই ৪টি আসল বা অরিজিনাল (original) ফিচারের (features) মধ্যে থেকে নিজের ৯৭.৮% (97.8%) ভ্যারিয়ান্স (variance) ক্যাপচার করতে পেরেছে। আর এটি একটি উল্লেখযোগ্য রকমের ইফিশিয়েন্ট (efficient) ব্যাপার — কারণ এর ডাইমেনশনগুলোকে (dimensions) অর্ধেক বা হাফ (half) করার পরেও, আমরা এখানকার মাত্র ২.২% (2.2%) তথ্য বা ইনফরমেশনই হারিয়েছিলাম।

যেসব ব্যাপারগুলো আপনার একটু খেয়াল রাখা উচিত (Things to watch out for)

  • সবার আগেই আপনার ডেটাটিকে স্কেল (Scale) করে নিন — PCA মূলত এর ফিচার স্কেলগুলোর (feature scales) প্রতি অনেক বেশি সেনসিটিভ (sensitive) বা সংবেদনশীল। যদি এখানকার কোনো ফিচারকে মিলিয়নে (millions) পরিমাপ করা হয়, তবে তা ডেসিম্যাল বা ডেসিমালে (decimals) পরিমাপ করা ফিচারের ওপর প্রভাব ফেলতে পারে। তাই সবসময়ই কাজ শুরু করার আগে এদের স্ট্যান্ডার্ডাইজ (standardize) বা নির্দিষ্ট করে নেওয়া একটি ভালো অভ্যাস।
  • ইন্টারপ্রেটেবিলিটি বা ব্যাখ্যার ধরন (Interpretability) — এখানকার নতুন কম্পোনেন্টগুলো (components) হলো এখানকার এই আসল ফিচারগুলোর (features) একেকটি মিশ্রণ (blends), তাই এদের ব্যাখ্যা বা ইন্টারপ্রেট (interpret) করা তুলনামূলকভাবে অনেকটাই কঠিন হয়ে পড়ে। এই "PC1"-এর মূলত কোনো ক্লিন বা পরিষ্কার, রিয়েল-ওয়ার্ল্ড মিনিং (real-world meaning) বা আসল মানে নেই, ঠিক যেমনটি মূলত মানুষের "উচ্চতা (height)" বা "আয় (income)"-এর মতো শব্দগুলোর রয়েছে।
  • শুধুমাত্র লিনিয়ারগুলোর (Linear only) ক্ষেত্রে — PCA শুধুমাত্র এখানকার লিনিয়ার বা রেখাকৃতির সম্পর্কগুলোকেই (linear relationships) ক্যাপচার (captures) করতে পারে। তাই এদের যেকোনো নন-লিনিয়ার (non-linear) সম্পর্কের জন্য আপনি চাইলে t-SNE বা UMAP-এর মতো জিনিসগুলোর দিকে এক নজর চোখ বুলিয়ে নিতে পারেন (তবে মনে রাখবেন, এগুলো মূলত ভিজ্যুয়ালাইজেশনের বা visualizations-এর জন্যই ব্যবহার করা হয়, মডেলের ইনপুট বা model inputs-এর জন্য নয়)।
Note: PCA শুধুমাত্র এর গতি (speed) বাড়ানোর জন্যই কাজ করে না। এই নয়েজযুক্ত ডাইমেনশনগুলোকে (dimensions) সরিয়ে দেওয়ার মাধ্যমে, এটি মূলত একটি মডেলের (model) অ্যাকুরেসিতেও (accuracy) খুব ভালো ইম্প্রুভমেন্ট (IMPROVE) আনতে পারে। ৫০০টি র (raw) বা সাধারণ ফিচার (features) দিয়ে ট্রেইন (trained) করানো একটি মডেলের চেয়ে, ৫০টি ভালোভাবে বেছে নেওয়া PCA কম্পোনেন্ট (components) দিয়ে ট্রেইন করানো মডেলের পারফরম্যান্স অনেকটাই ভালো (outperforms) হয়ে থাকে

Key Metrics

📊 কোভ্যারিয়েন্স ম্যাট্রিক্স (Covariance Matrix) হিসেব করুন
যেকোনো অনেক বড় বা হাই-ডাইমেনশনাল ডেটার (high-dimensional data) জন্য ব্যবহার করা সবচেয়ে দামি বা এক্সপেন্সিভ একটি ধাপ (expensive step)
O(n × d²) n সংখ্যক স্যাম্পল (samples), d সংখ্যক ফিচার (features)
🔢 আইগেনভ্যালু ডিকম্পোজিশন (Eigenvalue Decomposition)
যখন এখানকার d এর মান অনেক বড় (১০০০+ বা 1000+) হয় তখন এটি বেশ ব্যয়বহুল বা এক্সপেন্সিভ (expensive) হতে পারে
O(d³) d = ফিচারের সংখ্যা (number of features)
📉 ডেটা ট্রান্সফর্ম করা (Transform Data)
ম্যাট্রিক্স মাল্টিপ্লিকেশন (Matrix multiplication) — এখানকার আইগেনভেক্টরগুলো (eigenvectors) একবার খুঁজে পাওয়া গেলেই এটি অনেক বেশি ফাস্ট বা দ্রুত (fast) হয়ে যায়
O(n × d × k) k = রাখা বা ব্যবহার করা কম্পোনেন্টের সংখ্যা (components kept)

ছোট কুইজ

PCA এখানকার ৪টি ফিচারকে (features) ২টিতে নামিয়ে এনে এর ৯৭.৮% (97.8%) ভ্যারিয়ান্স (variance) বজায় রেখেছে। তো আপনি কি বলতে পারেন যে বাকি বা অন্যান্য ২.২% (2.2%) এর ক্ষেত্রে আসলে কী ঘটেছে?
Challenge

পড়া চালিয়ে যান

ফিচার ইঞ্জিনিয়ারিং (Feature Engineering)
কাঁচা বা র (raw) ডেটাকে পরিবর্তন করে এমন ইনপুটে পরিণত করা যা কোনো মডেল আসলেই ব্যবহার করতে পারে
কে-মিনস ক্লাস্টারিং (K-Means Clustering)
সেন্ট্রয়েডগুলোকে (centroids) একটু কাছে সরিয়ে এনে সাধারণ বা ন্যাচারাল (natural) গ্রুপগুলো খুঁজে বের করুন
এমএল পাইপলাইন (ML Pipeline)
র বা কাঁচা ডেটা (raw data) থেকে শুরু করে একেবারে প্রোডাকশনে (production) কাজের প্রেডিকশন (predictions) পর্যন্ত