مقیاس‌بندی ویژگی‌ها (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)

کدام الگوریتم‌ها مقیاس‌بندی می‌خواهند؟

قاعده ساده: الگوریتمی که با «فاصله» یا «گرادیان» کار کند، مقیاس‌بندی می‌خواهد.

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل ماشین لرنینگ است.

ابزارهای مرتبط