Skalowanie w uczeniu maszynowym
- Poprzednia strona Wielowymiarowa regresja
- Następna strona Trening/test
Skalowanie cech (Scale Features)
Kiedy Twoje dane mają różne wartości, nawet różne jednostki miary, może być trudno je porównać. Ile kilogramów w stosunku do metra? Czy wysokość w stosunku do czasu?
Odpowiedź na to pytanie to skalowanie. Możemy skalować dane do nowej wartości łatwej do porównania.
Zobacz tabelę poniżej, która jest podobna do tej, którą widzieliśmy wWielowymiarowa regresjaDane zestawu są takie same jak w rozdziale, ale tym razem, jednostka objętości w kolumnie Volume to litry, a nie ccm (1000 zamiast 1,0).
Samochód | Model | Objętość | Waga | CO2 |
---|---|---|---|---|
Toyota | Aygo | 1.0 | 790 | 99 |
Mitsubishi | Space Star | 1,2 | 1160 | 95 |
Skoda | Citigo | 1.0 | 929 | 95 |
Fiat | 500 | 0,9 | 865 | 90 |
Mini | Cooper | 1.5 | 1140 | 105 |
VW | Up! | 1.0 | 929 | 105 |
Skoda | Fabia | 1,4 | 1109 | 90 |
Mercedes | Klasa A | 1.5 | 1365 | 92 |
Ford | Fiesta | 1.5 | 1112 | 98 |
Audi | A1 | 1.6 | 1150 | 99 |
Hyundai | I20 | 1.1 | 980 | 99 |
Suzuki | Swift | 1.3 | 990 | 101 |
Ford | Fiesta | 1.0 | 1112 | 99 |
Honda | Civic | 1.6 | 1252 | 94 |
Hundai | I30 | 1.6 | 1326 | 97 |
Opel | Astra | 1.6 | 1330 | 97 |
BMW | 1 | 1.6 | 1365 | 99 |
Mazda | 3 | 2.2 | 1280 | 104 |
Skoda | Rapid | 1.6 | 1119 | 104 |
Ford | Focus | 2.0 | 1328 | 105 |
Ford | Mondeo | 1.6 | 1584 | 94 |
Opel | Insignia | 2.0 | 1428 | 99 |
Mercedes | C-Class | 2.1 | 1365 | 99 |
Skoda | Octavia | 1.6 | 1415 | 99 |
Volvo | S60 | 2.0 | 1415 | 99 |
Mercedes | CLA | 1.5 | 1465 | 102 |
Audi | A4 | 2.0 | 1490 | 104 |
Audi | A6 | 2.0 | 1725 | 114 |
Volvo | V70 | 1.7 | 1523 | 109 |
BMW | 5 | 2.0 | 1705 | 114 |
Mercedes | E-Class | 2.1 | 1605 | 115 |
Volvo | XC70 | 2.0 | 1746 | 117 |
Ford | B-Max | 1.6 | 1235 | 104 |
BMW | 2 | 1.6 | 1390 | 108 |
Opel | Zafira | 1.6 | 1405 | 109 |
Mercedes | SLK | 2.5 | 1395 | 120 |
Trudno jest porównać pojemność 1.0 z wagą 790, ale jeśli skalujemy je do wartości porównywalnych, możemy łatwo zobaczyć, ile jeden wartość różni się od drugiej.
Istnieje wiele metod skalowania danych, w tym tutorialu użyjemy metody nazywanej standaryzacją (standardization).
Metoda standaryzacji używa następującego wzoru:
z = (x - u) / s
gdzie z to nowa wartość, x to oryginalna wartość, u to wartość średnia, a s to odchylenie standardowe.
Jeśli uzyskasz dane z powyższego zbioru danych weight W kolumnie, pierwsza wartość wynosi 790, wartość skalowana to:
(790 - 1292.23) / 238.74 = -2.1
Jeśli uzyskasz dane z powyższego zbioru danych volume W kolumnie, pierwsza wartość wynosi 1.0, wartość skalowana to:
(1.0 - 1.61) / 0.38 = -1.59
Teraz możesz porównać -2.1 z -1.59, zamiast porównywać 790 z 1.0.
Nie musisz ręcznie wykonywać tej operacji, moduł Python sklearn ma funkcję o nazwie StandardScaler()
metoda, która zwraca obiekt Scaler z metodą konwersji zbioru danych.
Przykład
Skaluj wszystkie wartości w kolumnach Weight i Volume:
import pandas from sklearn import linear_model from sklearn.preprocessing import StandardScaler scale = StandardScaler() df = pandas.read_csv("cars2.csv") X = df[['Weight', 'Volume']] scaledX = scale.fit_transform(X) print(scaledX)
Wynik:
Proszę zauważyć, że pierwsze dwie wartości to -2.1 i -1.59, co odpowiada naszym obliczeniom:
[[-2.10389253 -1.59336644]] [-0.55407235 -1.07190106] [-1.52166278 -1.59336644] [-1.78973979 -1.85409913] [-0.63784641 -0.28970299] [-1.52166278 -1.59336644] [-0.76769621 -0.55043568] [ 0.3046118 -0.28970299] [-0.7551301 -0.28970299] [-0.59595938 -0.0289703 ] [-1.30803892 -1.33263375] [-1.26615189 -0.81116837] [-0.7551301 -1.59336644] [-0.16871166 -0.0289703 ] [ 0.14125238 -0.0289703 ] [ 0.15800719 -0.0289703 ] [ 0.3046118 -0.0289703 ] [-0.05142797 1.53542584] [-0.72580918 -0.0289703 ] [ 0.14962979 1.01396046] [ 1.2219378 -0.0289703 ] [ 0.5685001 1.01396046] [ 0.3046118 1.27469315] [ 0.51404696 -0.0289703 ] [ 0.51404696 1.01396046] [ 0.72348212 -0.28970299] [ 0.8281997 1.01396046] [ 1.81254495 1.01396046] [ 0.96642691 -0.0289703 ] [ 1.72877089 1.01396046] [ 1.30990057 1.27469315] [ 1.90050772 1.01396046] [-0.23991961 -0.0289703 ] [ 0.40932938 -0.0289703 ] [ 0.47215993 -0.0289703 ] [ 0.4302729 2.31762392]
Przewiduj wartość CO2
Wielowymiarowa regresjaZadaniem tego rozdziału jest przewidywanie emisji CO2 pojazdu, znając tylko jego wagę i pojemność silnika.
Po skalingu danych zestawu musisz użyć proporcji skalowania do przewidywania wartości:
Przykład
Przewiduj emisję CO2 pojazdu o masie 2300 kg i pojemności 1.3 litra:
import pandas from sklearn import linear_model from sklearn.preprocessing import StandardScaler scale = StandardScaler() df = pandas.read_csv("cars2.csv") X = df[['Weight', 'Volume']] y = df['CO2'] scaledX = scale.fit_transform(X) regr = linear_model.LinearRegression() regr.fit(scaledX, y) scaled = scale.transform([[2300, 1.3]]) predictedCO2 = regr.predict([scaled[0]]) print(predictedCO2)
Wynik:
[107.2087328]
- Poprzednia strona Wielowymiarowa regresja
- Następna strona Trening/test