ফিচার স্কেলিং (Feature Scaling) হলো ডেটা প্রিপ্রসেসিং-এর একটি গুরুত্বপূর্ণ ধাপ যেখানে ইনডিপেন্ডেন্ট ভেরিয়েবলগুলোকে একটি নির্দিষ্ট রেঞ্জে নিয়ে আসা হয়। মেশিন লার্নিং এলগরিদমগুলো সঠিকভাবে কাজ করার জন্য এটি প্রায়শই আবশ্যক।
কেন স্কেলিং প্রয়োজন? (Why Scaling?)
আপনার ডেটাসেটে ফিচারগুলো প্রায়শই ভিন্ন ভিন্ন ম্যাগনিটিউড, ইউনিট এবং রেঞ্জে থাকে। উদাহরণস্বরূপ: Age: 0-100, Salary: 20,000-1,00,000, Height: 1.5-2.0 মিটার।
বেশিরভাগ ML অ্যালগরিদম (KNN, SVM, Linear Regression, Neural Networks, PCA, K-Means) ইউক্লিডিয়ান ডিস্ট্যান্স বা গ্রেডিয়েন্ট ডিসেন্ট ব্যবহার করে। যদি ফিচারগুলো স্কেল করা না থাকে, তবে বড় ম্যাগনিটিউডের ফিচার ডোমিনেট করবে এবং মডেল ভুল শিখবে।
স্কেলিং পদ্ধতিগুলো (How to Scale)
১. স্ট্যান্ডার্ডাইজেশন (Standardization / Z-Score Normalization)
ফিচারকে মিন ০ এবং স্ট্যান্ডার্ড ডেভিয়েশন ১-এ রূপান্তর করে।
$$x' = \frac{x - \mu}{\sigma}$$
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # শুধু transform, fit নয়!
- আউটপুট রেঞ্জ: প্রায় -3 থেকে +3 (নরমাল ডিস্ট্রিবিউশনের জন্য)
- আউটলায়ারের প্রভাব কম পায় (Mean/Std রবাস্ট নয়)
- PCA, LDA, Linear Regression, Logistic Regression, Neural Networks-এর জন্য আদর্শ
২. মিন-ম্যাক্স স্কেলিং (Min-Max Scaling / Normalization)
ফিচারকে [0, 1] রেঞ্জে নিয়ে আসে।
$$x' = \frac{x - \min(x)}{\max(x) - \min(x)}$$
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() X_scaled = scaler.fit_transform(X_train)
- আউটপুট রেঞ্জ: নির্দিষ্ট [0, 1]
- আউটলায়ারের দ্বারা ভাবিত হয় (Min/Max সংবেদনশীল)
- ইমেজ প্রসেসিং (পিক্সেল 0-255), Neural Networks (sigmoid/tanh এক্টিভেশন) জন্য আদর্শ
৩. রবাস্ট স্কেলিং (Robust Scaling)
মিডিয়ান এবং IQR (Interquartile Range) ব্যবহার করে—আউটলায়ার রবাস্ট।
$$x' = \frac{x - \text{median}}{\text{IQR}}$$
from sklearn.preprocessing import RobustScaler scaler = RobustScaler() X_scaled = scaler.fit_transform(X_train)
- আউটলায়ার আছে থাকলে সেরা পছন্দ
- মিডিয়ান এবং IQR আউটলায়ারের দ্বারা প্রভাবিত হয় না
৪. ম্যাক্স-অ্যাব্স স্কেলিং (MaxAbs Scaling)
প্রতিটি ফিচারকে তার সর্বোচ্চ পরম মান দিয়ে ভাগ করে। [-1, 1] রেঞ্জে আনে।
from sklearn.preprocessing import MaxAbsScaler scaler = MaxAbsScaler() X_scaled = scaler.fit_transform(X_train)
- স্পার্স ম্যাট্রিক্সের জন্য উপযোগী (০ ভ্যালু সংরক্ষিত থাকে)
- একই স্পার্সিটি রক্ষা করে
কখন স্কেলিং করবেন? (When to Scale)
| অ্যালগরিদম | স্কেলিং প্রয়োজন? | কারণ | সুপারিশকৃত স্কেলার |
|---|---|---|---|
| K-Nearest Neighbors (KNN) | ✅ হ্যাঁ | ইউক্লিডিয়ান ডিস্ট্যান্স ব্যবহার করে | StandardScaler / MinMaxScaler |
| Support Vector Machine (SVM) | ✅ হ্যাঁ | মার্জিন ডিস্ট্যান্স-ভিত্তিক | StandardScaler |
| Linear/Logistic Regression | ✅ হ্যাঁ | গ্রেডিয়েন্ট ডিসেন্ট কনভারজেন্স দ্রুত হয় | StandardScaler |
| Neural Networks | ✅ হ্যাঁ | ওয়েইট আপডেট স্ট্যাবিলিটি | StandardScaler / MinMaxScaler |
| PCA | ✅ হ্যাঁ | ভ্যারিয়েন্স বড় ফিচার ডোমিনেট করে | StandardScaler |
| K-Means Clustering | ✅ হ্যাঁ | সেন্ট্রয়েড ডিস্ট্যান্স-ভিত্তিক | StandardScaler |
| Decision Trees | ❌ না | স্প্লিট পয়েন্ট ভ্যালু-ভিত্তিক, স্কেল সাপেক্ষ নয় | প্রয়োজন নেই |
| Random Forest | ❌ না | ট্রি-ভিত্তিক, স্কেল ইনভারিয়েন্ট | প্রয়োজন নেই |
| XGBoost/LightGBM | ❌ না | ট্রি-ভিত্তিক | প্রয়োজন নেই (কিন্তু কোনো ক্ষতিও নেই) |
| Naive Bayes | ❌ সাধারণত না | প্রোবাবিলিস্টিক, ফিচার স্বাধীনতা অনুমান | প্রয়োজন নেই |