مقیاسبندی ویژگی «Feature Scaling» یک تکنیک برای استانداردسازی ویژگیهای مستقل «Independent Features» موجود در دادهها به یک بازه مشخص در یادگیری ماشین «Machine Learning» است. در این مقاله از سری مقالات مجله پیاِستور به تشریح و چگونگی انجام مقیاسبندی ویژگی همراه با مثال و پیادهسازی در زبان برنامهنویسی پایتون خواهیم پرداخت.
تعریف مقیاسبندی ویژگیها
مقیاسبندی ویژگیها یک تکنیک برای استانداردسازی ویژگیهای مستقل موجود در دادهها به یک بازه ثابت است. این فرآیند در مرحله پیشپردازش دادهها «Data Pre-processing» انجام میشود تا با تفاوتهای زیاد در مقادیر، واحدها یا بزرگیها مقابله کند. در صورت عدم انجام مقیاسبندی، الگوریتم یادگیری ماشین ممکن است مقادیر بزرگتر را بهطور پیشفرض مهمتر در نظر بگیرد و مقادیر کوچکتر را بدون توجه به واحد مقادیر نادیده بگیرد.
چرا از مقیاسبندی ویژگیها استفاده میکنیم؟
- یکسانسازی مقیاسها: مقیاسبندی تضمین میکند که همه ویژگیها در یک مقیاس و بازه مشابه قرار دارند. این فرآیند که به آن نرمالسازی ویژگیها «Feature Normalization» گفته میشود، به جلوگیری از غلبه ویژگیهای بزرگتر بر فرآیند یادگیری «Training» کمک میکند.
- بهبود عملکرد الگوریتمها: الگوریتمهایی که بر پایه گرادیان نزولی (Gradient Descent)، فاصله (مانند K نزدیکترین همسایه) یا ماشین بردار پشتیبان (SVM) کار میکنند، با مقیاسبندی بهتر و سریعتر به نتایج مطلوب میرسند.
- پیشگیری از ناپایداری عددی: مقیاسهای بسیار متفاوت بین ویژگیها میتواند منجر به مشکلاتی نظیر سرریز عددی (Numerical Overflow) یا کمریزی عددی (Numerical Underflow) در محاسبات شود. مقیاسبندی این مشکلات را کاهش میدهد و محاسبات پایدارتر میشوند.
- رفع سوگیری مدل: مقیاس بندی داده ها تضمین میکند که همه ویژگیها در فرآیند یادگیری تأثیر یکسانی دارند. بدون آن، ویژگیهایی با مقیاس بزرگتر میتوانند بر نتایج مدل تأثیر زیادی بگذارند و سوگیری ایجاد کنند.
نحوه عملکرد مقیاسبندی ویژگیها
فرض کنید یک مجموعه داده «Data set» داریم که شامل ویژگیهای سن (Age)، حقوق (Salary) و تعداد اتاقهای آپارتمان (BHK Apartment) با اندازه داده ۵۰۰۰ نفر است. هر نقطه داده (Data Point) به صورت زیر برچسبگذاری شده است:
- کلاس ۱ (Class1) – YES: به این معنا که با توجه به مقادیر ویژگیهای سن، حقوق و تعداد اتاقهای آپارتمان، یک فرد میتواند ملک را خریداری کند.
- کلاس ۲ (Class2) – NO: به این معنا که با توجه به مقادیر ویژگیهای سن، حقوق و تعداد اتاقهای آپارتمان، یک فرد نمیتواند ملک را خریداری کند.
هدف از استفاده از این مجموعه داده برای آموزش مدل (Training the Model)، ساخت مدلی است که بتواند پیشبینی کند آیا یک فرد با توجه به مقادیر ویژگیهای داده شده، قادر به خرید ملک است یا خیر.
پس از آموزش مدل، میتوان یک نمودار N-بعدی (N-Dimensional) ایجاد کرد، که در آن N برابر با تعداد ویژگیهای موجود در مجموعه داده است. این نمودار شامل نقاط دادهای از مجموعه داده خواهد بود. تصویر زیر نمایی ایدهآل از این مدل را نشان میدهد.
همانطور که در شکل نشان داده شده است، نقاط دادهای به شکل ستاره (Star) متعلق به کلاس ۱ – Yes هستند، و نقاط دادهای به شکل دایره (Circle) نشاندهنده کلاس ۲ – No میباشند. مدل با استفاده از این نقاط دادهای آموزش داده میشود.
حال، اگر یک نقطه داده جدید ارائه شود که مقادیر متفاوتی برای سه ویژگی مستقل سن (Age)، حقوق (Salary) و تعداد اتاقهای آپارتمان (BHK Apartment) باشد وظیفه مدل این است که پیشبینی کند این نقطه داده به کدام کلاس تعلق دارد.
پیشبینی کلاس برای نقاط دادهای جدید
مدل فاصله این نقطه داده جدید را از مرکز ثقل (Centroid) هر گروه کلاسی محاسبه میکند. در نهایت، این نقطه داده به کلاسی تعلق خواهد داشت که کمترین فاصله از مرکز ثقل آن کلاس را داشته باشد. روش محاسبه فاصله بر اساس ۳ مدل ارائه شده در این مقاله می تواند انجام شود.
۱- فاصله اقلیدسی (Euclidean Distance)
این روش فاصله را به صورت ریشه دوم مجموع مربع اختلافات بین مختصات مقادیر ویژگیها – سن (Age)، حقوق (Salary)، تعداد اتاقهای آپارتمان (BHK Apartment) نقطه داده و مرکز ثقل هر کلاس محاسبه میکند. این فرمول از قضیه فیثاغورس (Pythagorean Theorem) گرفته شده است:
$$Euclidean\;Distance = \sqrt {\sum\limits_{i = 1}^N {{{({x_i} – {c_i})}^2}} } $$
که در آن، \({x_i}\) مقدار ویژگی \(i\)ام برای نقطه داده جدید، \({c_i}\) مقدار ویژگی \(i\)ام برای مرکز ثقل کلاس و \(N\) تعداد ویژگیها است. این فرمول تعیین میکند که نقطه داده به کدام کلاس نزدیکتر است.
۲- فاصله منهتن (Manhattan Distance)
فاصله منهتن به صورت مجموع مقادیر مطلق اختلافات بین مختصات (مقادیر ویژگیها) نقطه داده و مرکز ثقل هر کلاس محاسبه میشود. فرمول این روش به صورت زیر است:
$$d(x,y) = \sum\limits_{k = 1}^n {|{x_k} – {y_k}|} $$
که در آن، \(x\) نشاندهنده مقدار ویژگی برای نقطه داده (Data Point) است، \(y\) مقدار متناظر ویژگی در مرکز ثقل (Centroid) کلاس مربوطه است، و \(k\) تعداد ویژگیها در مجموعه داده میباشد.
۳- فاصله مینکوفسکی (Minkowski Distance)
این روش تعمیمی از دو روش بالا (اقلیدسی و منهتن) است. فرمول کلی آن به صورت زیر است:
$$d(x,y) = {\left( {\sum\limits_{k = 1}^n {|{x_k} – {y_k}{|^r}} } \right)^{{1 \over 2}}}$$
مقدار \(r\) مشخص میکند که فاصله چگونه محاسبه شود:
- برای \(r=1\): فاصله منهتن
- برای \(r=2\): فاصله اقلیدسی
برای مقادیر دیگر، روشی میان این دو خواهد بود.
نیاز به مقیاس بندی داده ها
مجموعه داده شامل ۳ ویژگی مستقل است:
- سن (Age): بازهای بین ۱۰ تا ۶۰ سال
- حقوق (Salary): بازهای بین ۱ تا ۴۰
- تعداد اتاقهای آپارتمان (BHK): بازهای بین ۱ تا ۵
این ویژگیها دارای واحدها و مقیاسهای متفاوتی هستند. بدون مقیاسبندی، ویژگیهایی با بازه بزرگتر (مانند حقوق) تأثیر بیشتری بر فاصلهها و پیشبینی مدل خواهند داشت، و ویژگیهایی با بازه کوچکتر (مانند سن یا BHK) نادیده گرفته میشوند.
مقیاسبندی ویژگیها به استانداردسازی یا نرمالسازی ویژگیها کمک میکند، تا همه ویژگیها در بازهای مشابه (مثلاً \([۰,۱]\)) قرار گیرند و مدل بتواند به صورت عادلانه از همه ویژگیها استفاده کند.
Distance = (|(40 - 57)| + |(2200000 - 3300000)| + |(3 - 2)|)
همانطور که مشاهده میشود، ویژگی حقوق (Salary) به دلیل بازه وسیعتر خود بر سایر ویژگیها در هنگام پیشبینی کلاس نقطه داده تأثیر میگذارد. از آنجایی که تمام ویژگیها مستقل از یکدیگر هستند (یعنی حقوق یک شخص هیچ ارتباطی با سن یا نیاز او به تعداد اتاقهای آپارتمان ندارد)، این موضوع منجر به اشتباهات مکرر در پیشبینی مدل خواهد شد.
برای حل این مشکل، از مقیاسبندی ویژگیها استفاده میکنیم. الگوریتمهای مقیاسبندی ویژگیها، مقادیر سن (Age)، حقوق (Salary) و تعداد اتاقهای آپارتمان (BHK) را به یک بازه مشخص (مثلاً \([-۱,۱]\) یا \([۰,۱]\)) تبدیل میکنند.
مزیت مقیاسبندی ویژگیها
- هیچ ویژگی نمیتواند بر دیگران غلبه کند.
- تمام ویژگیها در پیشبینی مدل تأثیر یکسانی خواهند داشت.
- این فرآیند باعث میشود مدل یادگیری منصفانهتری داشته باشد و دقت پیشبینی آن افزایش یابد.
- با انجام مقیاسبندی، مدل قادر خواهد بود روابط بین ویژگیها را بهدرستی درک کند و پیشبینیهای دقیقتری انجام دهد.
روشهای مقیاسبندی ویژگیها Feature Scaling
در ادامه مقاله به انواع روشهای مقیاسبندی ویژگیها Feature Scaling خواهیم پرداخت.
۱- مقیاسبندی با حداکثر مقدار مطلق (Absolute Maximum Scaling)
مقیاسبندی با حداکثر مقدار مطلق (Absolute Maximum Scaling) در دو مرحله زیر انجام میشود:
- ابتدا باید حداکثر مقدار مطلق را از بین تمام ورودی های یک اندازه گیری خاص انتخاب کنیم.
- سپس پس از این، هر ورودی ستون را بر این مقدار حداکثر تقسیم می کنیم.
$${X_{Scaled}} = {{{X_i} – \max (|X|)} \over {\max (|X|)}}$$
پس از انجام دو مرحله فوق، مشاهده خواهیم کرد که هر ورودی از ستون در محدوده ۱- تا ۱ قرار دارد. اما این روش بهدلیل حساسیت بیش از حد به نقاط پرت استفاده نمی شود.
در این مقاله از مجموعه دادهای استفاده خواهیم کرد که میتوانید آن را از اینجا [+] دانلود کنید. این مجموعه داده نسخه سادهشدهای از مجموعه داده اصلی پیشبینی قیمت خانه است که فقط شامل دو ستون از دادههای اصلی است.
import pandas as pd df = pd.read_csv('SampleFile.csv') print(df.head())
خروجی:
LotArea MSSubClass ۰ ۸۴۵۰ ۶۰ ۱ ۹۶۰۰ ۲۰ ۲ ۱۱۲۵۰ ۶۰ ۳ ۹۵۵۰ ۷۰ ۴ ۱۴۲۶۰ ۶۰
حالا روش اول را که حداکثر مطلق مقیاس (Absolute Maximum Scaling) است را اعمال میکنیم. برای این کار، ابتدا قرار است مقادیر حداکثر مطلق ستون ها را ارزیابی کنیم.
import numpy as np max_vals = np.max(np.abs(df)) max_vals
خروجی:
LotArea 215245 MSSubClass 190 dtype: int64
حال قرار است این مقادیر را از داده ها کم کنیم و سپس نتایج را از مقادیر حداکثر نیز تقسیم کنیم.
LotArea MSSubClass ۰ -۰.۹۶۰۷۴۲ -۰.۶۸۴۲۱۱ ۱ -۰.۹۵۵۴۰۰ -۰.۸۹۴۷۳۷ ۲ -۰.۹۴۷۷۳۴ -۰.۶۸۴۲۱۱ ۳ -۰.۹۵۵۶۳۲ -۰.۶۳۱۵۷۹ ۴ -۰.۹۳۳۷۵۰ -۰.۶۸۴۲۱۱ ... ... ... ۱۴۵۵ -۰.۹۶۳۲۱۹ -۰.۶۸۴۲۱۱ ۱۴۵۶ -۰.۹۳۸۷۹۱ -۰.۸۹۴۷۳۷ ۱۴۵۷ -۰.۹۵۷۹۹۲ -۰.۶۳۱۵۷۹ ۱۴۵۸ -۰.۹۵۴۸۵۶ -۰.۸۹۴۷۳۷ ۱۴۵۹ -۰.۹۵۳۸۳۴ -۰.۸۹۴۷۳۷ [۱۴۶۰ rows x 2 columns]
۲- مقیاسبندی Min-Max
این روش مقیاسبندی شامل دو مرحله زیر است:
- ابتدا باید حداقل و حداکثر مقدار ستون را پیدا کنیم.
- سپس حداقل مقدار را از هر مقدار کسر کرده و نتیجه را بر تفاوت بین حداکثر و حداقل مقدار تقسیم میکنیم.
$${X_{scaled}} = {{{X_i} – {X_{\min }}} \over {{X_{\max }} – {X_{\min }}}}$$
از آنجا که در این روش از مقادیر حداقل و حداکثر استفاده میشود، این روش نیز نسبت به نقاط پرت حساس است. اما بازهای که دادهها پس از انجام دو مرحله بالا در آن قرار میگیرند، بین ۰ تا ۱ خواهد بود.
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() scaled_data = scaler.fit_transform(df) scaled_df = pd.DataFrame(scaled_data,columns=df.columns) scaled_df.head()
خروجی:
LotArea MSSubClass ۰ ۰.۰۳۳۴۲۰ ۰.۲۳۵۲۹۴ ۱ ۰.۰۳۸۷۹۵ ۰.۰۰۰۰۰۰ ۲ ۰.۰۴۶۵۰۷ ۰.۲۳۵۲۹۴ ۳ ۰.۰۳۸۵۶۱ ۰.۲۹۴۱۱۸ ۴ ۰.۰۶۰۵۷۶ ۰.۲۳۵۲۹۴
۳- نرمالسازی Normalization
این روش تقریباً مشابه روش قبلی است، اما در اینجا به جای استفاده از مقدار حداقل، هر مقدار را از میانگین کل دادهها کم میکنیم و سپس نتیجه را بر تفاوت بین مقدار حداقل و حداکثر تقسیم میکنیم.
$${X_{scaled}} = {{{X_i} – {X_{mean}}} \over {{X_{\max }} – {X_{\min }}}}$$
from sklearn.preprocessing import Normalizer scaler = Normalizer() scaled_data = scaler.fit_transform(df) scaled_df = pd.DataFrame(scaled_data,columns=df.columns) print(scaled_df.head())
خروجی:
LotArea MSSubClass ۰ ۰.۹۹۹۹۷۵ ۰.۰۰۷۱۰۰ ۱ ۰.۹۹۹۹۹۸ ۰.۰۰۲۰۸۳ ۲ ۰.۹۹۹۹۸۶ ۰.۰۰۵۳۳۳ ۳ ۰.۹۹۹۹۷۳ ۰.۰۰۷۳۳۰ ۴ ۰.۹۹۹۹۹۱ ۰.۰۰۴۲۰۸
۴- استانداردسازی Standardization
این روش مقیاسبندی اساساً بر مبنای گرایشهای مرکزی و واریانس دادهها است.
- ابتدا باید میانگین و انحراف معیار دادههایی که میخواهیم نرمالسازی کنیم را محاسبه کنیم.
- سپس مقدار میانگین را از هر مقدار کسر کرده و نتیجه را بر انحراف معیار تقسیم میکنیم.
این کار به ما کمک میکند تا به توزیع نرمال (اگر توزیع قبلاً نرمال بوده اما دارای انحراف باشد) دست یابیم، بهطوری که میانگین برابر با صفر و انحراف معیار برابر با ۱ باشد.
$${X_{scaled}} = {{{X_i} – {X_{mean}}} \over \sigma }$$
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaled_data = scaler.fit_transform(df) scaled_df = pd.DataFrame(scaled_data,columns=df.columns) print(scaled_df.head())
خروجی:
LotArea MSSubClass ۰ -۰.۲۰۷۱۴۲ ۰.۰۷۳۳۷۵ ۱ -۰.۰۹۱۸۸۶ -۰.۸۷۲۵۶۳ ۲ ۰.۰۷۳۴۸۰ ۰.۰۷۳۳۷۵ ۳ -۰.۰۹۶۸۹۷ ۰.۳۰۹۸۵۹ ۴ ۰.۳۷۵۱۴۸ ۰.۰۷۳۳۷۵
۵- مقیاسبندی مقاوم Robust
در این روش مقیاسبندی، از دو معیار آماری اصلی دادهها استفاده میشود:
- میانه Median
- بازه بین چارکی (Inter-Quartile Range)
پس از محاسبه این دو مقدار، ابتدا میانه را از هر مقدار کم میکنیم و سپس نتیجه را بر بازه بین چارکی تقسیم میکنیم.
$${X_{scaled}} = {{{X_i} – {X_{mean}}} \over {IQR}}$$
from sklearn.preprocessing import RobustScaler scaler = RobustScaler() scaled_data = scaler.fit_transform(df) scaled_df = pd.DataFrame(scaled_data,columns=df.columns) print(scaled_df.head())
خروجی:
LotArea MSSubClass ۰ -۰.۲۵۴۰۷۶ ۰.۲ ۱ ۰.۰۳۰۰۱۵ -۰.۶ ۲ ۰.۴۳۷۶۲۴ ۰.۲ ۳ ۰.۰۱۷۶۶۳ ۰.۴ ۴ ۱.۱۸۱۲۰۱ ۰.۲
کلام آخر
مقیاسبندی ویژگیها (مقیاس بندی داده ها) یک گام اساسی در پیشپردازش دادهها است که تضمین میکند تمام ویژگیها در یک مقیاس و بازه مشابه قرار میگیرند. این فرآیند اهمیت زیادی برای بهبود دقت مدلهای یادگیری ماشین دارد، زیرا تفاوت در مقیاس ویژگیها میتواند منجر به سوگیری مدل و نتایج نادرست شود. روشهای مختلفی مانند مقیاسبندی حداکثر مطلق، Min-Max، نرمالسازی، استانداردسازی و مقیاسبندی مقاوم برای این منظور وجود دارند که هر یک بسته به نوع داده و حساسیت آن به نقاط پرت، کاربرد خاص خود را دارند. انتخاب روش مناسب به تحلیل دقیق دادهها و نیازهای مدل بستگی دارد.