Skalowanie cech (ang. feature scaling)
W przypadku cech numerycznych, które mają być atrybutami wejściowymi do modelu uczenia maszynowego, należy zwrócić uwagę na skalę w jakiej te cechy występują.
Country | Age | Salary |
---|---|---|
France | 44.0 | 72000.0 |
Spain | 27.0 | 48000.0 |
Germany | 30.0 | 54000.0 |
Spain | 38.0 | 61000.0 |
Germany | 40.0 | |
France | 35.0 | 58000.0 |
Spain | 52000.0 |
W przykładzie powyżej cecha "Age" występuję w zakresie 27-44, a cecha "Salary" 48.000 - 72.000. Na pierwszy rzut oka widać, że skale te różnią się od siebie bardzo znacznie. Może to powodować spore problemy w algorytmach uczenia maszynowego, związane z faktem, że algorytmy te posługują się często odległościami między krotkami cech liczonymi w przestrzenii euklidesowej. W przestrzenii dwuwymiarowej odległość taka liczona jest jako pierwiastek z sumy kwadratów różnic pomiędzy cechami. I widać wyraźnie, że przy dużej różnicy w skali cechy, cecha w większej skali będzie wyraźnie dominować nad cechą w skali mniejszej. Z tego względu należy przeprowadzić skalowanie tych cech, aby skale były maksymalnie porównywalne.
Przykład w Python
# feature scaling
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)
Warto zwrócić uwagę, że dane treningowe są wykorzystane do zasilenia modelu i na podstawie tego zasilenia do jego transformaty, natomiast dane testowe są wyłącznie przekształcane na podstawie zasilenia danymi treningowymi,