مقیاسبندی ویژگیها (Feature Scaling)
آموزش Normalization و Standardization با MinMaxScaler و StandardScaler و اهمیت مقیاس یکسان ویژگیها
چرا مقیاسبندی لازم است؟
فرض کنید ویژگی «متراژ» بین ۵۰ تا ۳۰۰ و ویژگی «تعداد اتاق» بین ۱ تا ۵ است. الگوریتمهای مبتنی بر فاصله (مثل KNN و SVM) متراژ را بسیار مهمتر از اتاق حساب میکنند فقط چون عدد بزرگتری است! مقیاسبندی همه ویژگیها را در بازه یکسان قرار میدهد.
روش ۱: نرمالسازی (Normalization)
مقادیر را به بازه [۰، ۱] میبرد:
x_new = (x - min) / (max - min)
در scikit-learn با MinMaxScaler:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
روش ۲: استانداردسازی (Standardization)
داده را با میانگین ۰ و انحراف معیار ۱ تبدیل میکند:
x_new = (x - mean) / std
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
کدام را انتخاب کنیم؟
| روش | خروجی | مناسب برای |
|---|---|---|
| MinMaxScaler | بازه [۰، ۱] | داده بدون پرت، شبکه عصبی |
| StandardScaler | میانگین ۰، انحراف ۱ | داده با پرت، اکثر الگوریتمها |
خطای رایج: نشت داده (Data Leakage)
Scaler را فقط روی داده آموزش برازش دهید و بعد همان را روی تست اعمال کنید:
# درست ✅
scaler.fit(X_train)
X_train_s = scaler.transform(X_train)
X_test_s = scaler.transform(X_test)
# غلط ❌ (تست نباید در fit دیده شود!)
scaler.fit(X)
کدام الگوریتمها مقیاسبندی میخواهند؟
- لازم: KNN، SVM، شبکه عصبی، رگرسیون با Regularization
- لازم نیست: درخت تصمیم، جنگل تصادفی (بر اساس مقایسه کار میکنند نه فاصله)
قاعده ساده: الگوریتمی که با «فاصله» یا «گرادیان» کار کند، مقیاسبندی میخواهد.
جمعبندی
- مقیاسبندی ویژگیها را هممقیاس میکند
- Normalization به بازه [۰،۱] و Standardization به میانگین ۰ و انحراف ۱ تبدیل میکند
- Scaler را فقط روی داده آموزش fit کنید
این مبحث بخشی از دوره آموزش کامل ماشین لرنینگ است.