Feature Scaling modeli yaratmadan əvvəl Data Preprocessing zamanı ən vacib addımlardan biridir. Feature Scaling bəzi machine learning alqoritmlərinin performansını artırır,bəzilərinə isə heç tətbiq olunmur(tree based algorithms).
Feature Scaling-ə nə üçün ehtiyacımız var?
Dəyişənlərin diapazonu geniş olduqda, Machine Learning alqoritmlərində ‘objective function’ normallaşdırılmadan düzgün işləmir. Misal olaraq, classification məsələlərinin əksəriyyəti 2 nöqtə arasındakı məsafəni hesablayır. Əgər dəyərlər geniş diapazona malikdirsə,bu yaradılmış modelə təsir edəcək. Buna görə, Feature scaling dataya tətbiq olunmalıdırki,hər bir dəyər eyni diapazonda olsun.
Feature scaling yalnız ədədi dəyişənləri olan sütunlara tətbiq edilir.Və bunu həyata keçirmək üçün sklearn kitabxanasından istifadə edəcəyik.
Qeyd:Əgər dataset-də One-Hot Encoding üsülu ilə yaradılmış dəyərlər varsa həmin dəyərlərə Feature Scaling tətbiq edilmir. Bunun səbəbi isə onların qiymətləri 0 və ya 1 olduğu üçün ehtiyac duyulmur.
Feature Scaling tətbiq edilməmişdən əvvəl dataset:
Bu məqalədə Feature Scaling-in 7 növündən bəhs edəcəyik.
MinMax Scaler -ən sadə Feature Scaling növlərindən biridir. Bu növ feature scaling tətbiq edərkən dəyərlər 0 və 1 arasında olur. MinMax Scaler üçün formula:
from sklearn.preprocessing import MinMaxScaler
data[['Age', 'Salary']] = MinMaxScaler().fit_transform(data[['Age', 'Salary']])
Standard Scaler- MinMax Scaler kimi, başa düşülməsi və tətbiqi çox asan olan başqa bir feature scaling növüdür. Standard Scaler tətbiq edərkən hər bir feature üçün mean 0,standard deviation 1 olur. Bu növ feature scaling tətbiq etmək üçün datamızın paylanması normal paylanma olmalıdır.
from sklearn.preprocessing import StandardScaler
data[['Age', 'Salary']] = StandardScaler().fit_transform(data[['Age', 'Salary']])
MaxAbs Scaler -hər sütunun mütləq maksimum dəyərini alır və sütundakı hər bir dəyəri maksimum dəyərə bölür. MaxAbs scaler istifadə edərkən dəyərlər -1 və 1 arasında olur.
from sklearn.preprocessing import MaxAbsScaler
data[['Age', 'Salary']] = MaxAbsScaler().fit_transform(data[['Age', 'Salary']])
Robust Scaler -outlier-lərə qarşı həssas deyil.İndiyə qədər istifadə etdiyimiz scaling növlərinin hər biri sütunların orta, maksimum və minimum dəyərlərindən istifadə edirdi. Bütün bu dəyərlərə outlier-lər təsir edir. Əgər datamızda həddindən çox outlier-lər varsa,bu mean,max və min dəyərlərə təsir edəcək. Beləliklə, yuxarıdakı metodlardan istifadə edərək bu məlumatları miqyaslandırsaq da, normal paylanmaya əldə edəcəyimizə söz verə bilmərik.
from sklearn.preprocessing import RobustScaler
data[['Age', 'Salary']] = RobustScaler().fit_transform(data[['Age', 'Salary']])
Quantile Transformer Scaler və Power Transformer Scaler non-linear datalara tətbiq olunur.
Quantile Transformer Scaler -datanı normal paylanmaya çevirməklə bərabər həmçinin outlier-lərlə də başa çıxır,data Cumulative Distribution funksiyasından istifadə edilərək normal paylanmaya çevrilir.
from sklearn.preprocessing import QuantileTransformer
qt = QuantileTransformer(n_quantiles=10, random_state=0)
qt.fit_transform(data[['Age', 'Salary']])
Power Transformer Scaler -Ən çox yayılmış növləri Box-Cox və Yeo-Johnson-dur.
Box-Cox transformation üçün formula:
Bu formula hər bir feature üçün tətbiq edilməlidir. λ-nın dəyəri müxtəlif feature-lər üçün fərqli olacaqdır. Düsturda logarifm funksiyası olduğu üçün bu düstur yalniz pozitiv dəyərlərə tətbiq oluna bilər. Neqativ dəyərlər üçün Yeo-Johnson transformation-dan istifadə edilir.
Yeo-Johnson transformation formula:
from sklearn.preprocessing import PowerTransformer
data[['Age', 'Salary']] = PowerTransformer().fit_transform(data[['Age', 'Salary']])
Unit Vector Scaler/Normalizer -MinMax Scaler kimi, Normalizer də, dataları 0 və 1 arasında miqyaslandırır. Ondan fərqi budur ki:
- L1 normasından istifadə ediriksə, hər sütundakı dəyərlər sətir boyunca mütləq dəyərlərinin cəmi 1 olacaq şəkildə çevrilir.
- L2 normasından istifadə ediriksə, hər sütundakı dəyərlər əvvəlcə kvadrat şəklində alınır və sətir boyunca mütləq dəyərlərinin cəmi 1 olacaqdır.
from sklearn.preprocessing import Normalizer
scaler = Normalizer(norm = 'l2')
data[['Age', 'Salary']] = scaler.fit_transform(data[['Age', 'Salary']])
Məqaləni oxuduğunuz üçün təşəkkürlər!!!
Github link:https://github.com/nazrnrn/Medium-article-s-code/blob/main/Feature%20Scaling.ipynb