Uczenie maszynowe — skala
Funkcje skali
Gdy Twoje dane mają różne wartości, a nawet różne jednostki miary, porównanie ich może być trudne. Czym są kilogramy w porównaniu do metrów? Albo wysokość w porównaniu z czasem?
Odpowiedzią na ten problem jest skalowanie. Możemy skalować dane do nowych wartości, które są łatwiejsze do porównania.
Spójrz na poniższą tabelę, jest to ten sam zestaw danych, którego użyliśmy w rozdziale o regresji wielokrotnej , ale tym razem kolumna objętości zawiera wartości w litrach zamiast cm3 ( 1,0 zamiast 1000).
Plik jest przeznaczony wyłącznie do celów testowych, można go pobrać tutaj: cars2.csv
Samochód | Model | Tom | Waga | CO2 |
Toyota | Ajgo | 1,0 | 790 | 99 |
Mitsubishi | Kosmiczna gwiazda | 1.2 | 1160 | 95 |
Skoda | Citigo | 1,0 | 929 | 95 |
Placet | 500 | 0,9 | 865 | 90 |
Mini | Bednarz | 1,5 | 1140 | 105 |
VW | W górę! | 1,0 | 929 | 105 |
Skoda | Fabia | 1,4 | 1109 | 90 |
Mercedes | Klasa | 1,5 | 1365 | 92 |
Bród | Fiesta | 1,5 | 1112 | 98 |
Audi | A1 | 1,6 | 1150 | 99 |
Hyundai | I20 | 1,1 | 980 | 99 |
Suzuki | Szybki | 1,3 | 990 | 101 |
Bród | Fiesta | 1,0 | 1112 | 99 |
Honda | Obywatelski | 1,6 | 1252 | 94 |
Hyundai | I30 | 1,6 | 1326 | 97 |
Opel | Astra | 1,6 | 1330 | 97 |
BMW | 1 | 1,6 | 1365 | 99 |
Mazda | 3 | 2,2 | 1280 | 104 |
Skoda | Nagły | 1,6 | 1119 | 104 |
Bród | Centrum | 2,0 | 1328 | 105 |
Bród | Mondeo | 1,6 | 1584 | 94 |
Opel | Insygnia | 2,0 | 1428 | 99 |
Mercedes | Klasa C | 2,1 | 1365 | 99 |
Skoda | Oktawia | 1,6 | 1415 | 99 |
Volvo | S60 | 2,0 | 1415 | 99 |
Mercedes | CAO | 1,5 | 1465 | 102 |
Audi | A4 | 2,0 | 1490 | 104 |
Audi | A6 | 2,0 | 1725 | 114 |
Volvo | V70 | 1,6 | 1523 | 109 |
BMW | 5 | 2,0 | 1705 | 114 |
Mercedes | Klasa E | 2,1 | 1605 | 115 |
Volvo | XC70 | 2,0 | 1746 | 117 |
Bród | B-maks. | 1,6 | 1235 | 104 |
BMW | 2 | 1,6 | 1390 | 108 |
Opel | Zafira | 1,6 | 1405 | 109 |
Mercedes | SLK | 2,5 | 1395 | 120 |
Porównanie objętości 1.0 z wagą 790 może być trudne, ale jeśli przeskalujemy obie do porównywalnych wartości, możemy łatwo zobaczyć, jak bardzo jedna wartość jest porównywana z drugą.
Istnieją różne metody skalowania danych, w tym samouczku użyjemy metody zwanej standaryzacją.
Metoda standaryzacji wykorzystuje następujący wzór:
z = (x - u) / s
Gdzie z
to nowa wartość,
x
to wartość pierwotna,
u
to średnia i s
odchylenie standardowe.
Jeśli weźmiesz kolumnę wagi z powyższego zestawu danych, pierwsza wartość to 790, a skalowana wartość będzie wyglądać następująco:
(790 - ) / = -2.1
Jeśli weźmiesz kolumnę objętości z powyższego zestawu danych, pierwsza wartość to 1,0, a wartość przeskalowana będzie:
(1.0 - ) / = -1.59
Teraz możesz porównać -2.1 z -1.59 zamiast porównywać 790 z 1.0.
Nie musisz tego robić ręcznie, moduł Pythona sklearn posiada wywołaną metodę, StandardScaler()
która zwraca obiekt Scaler z metodami przekształcania zbiorów danych.
Przykład
Skaluj wszystkie wartości w kolumnach Waga i Objętość:
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:
Zauważ, że dwie pierwsze 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]]
Przewidywanie wartości CO2
Zadaniem w rozdziale Regresja wielokrotna było przewidzenie emisji CO2 z samochodu, gdy znałeś tylko jego wagę i objętość.
Gdy zestaw danych jest skalowany, będziesz musiał użyć skali podczas przewidywania wartości:
Przykład
Przewiduj emisję CO2 z 1,3-litrowego samochodu ważącego 2300 kilogramów:
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]