Strojové učení – měřítko
Funkce měřítka
Když vaše data mají různé hodnoty a dokonce i různé jednotky měření, může být obtížné je porovnat. Co jsou kilogramy ve srovnání s metry? Nebo nadmořská výška v porovnání s časem?
Odpovědí na tento problém je škálování. Můžeme škálovat data do nových hodnot, které se snáze porovnávají.
Podívejte se na tabulku níže, jedná se o stejný soubor dat, který jsme použili v kapitole vícenásobná regrese , ale tentokrát sloupec objemu obsahuje hodnoty v litrech místo cm 3 (1,0 místo 1000).
Soubor je určen pouze pro testovací účely, stáhnout si ho můžete zde: cars2.csv
Auto | Modelka | Objem | Hmotnost | CO2 |
Toyota | Aygo | 1,0 | 790 | 99 |
Mitsubishi | Vesmírná hvězda | 1.2 | 1160 | 95 |
Škoda | Citigo | 1,0 | 929 | 95 |
Fiat | 500 | 0,9 | 865 | 90 |
Mini | Bednář | 1.5 | 1140 | 105 |
VW | Nahoru! | 1,0 | 929 | 105 |
Škoda | Fabia | 1.4 | 1109 | 90 |
Mercedes | Třída | 1.5 | 1365 | 92 |
Brod | Fiesta | 1.5 | 1112 | 98 |
Audi | A1 | 1.6 | 1150 | 99 |
Hyundai | I20 | 1.1 | 980 | 99 |
Suzuki | Rychlý | 1.3 | 990 | 101 |
Brod | Fiesta | 1,0 | 1112 | 99 |
Honda | Občanská | 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 |
Škoda | Rychlý | 1.6 | 1119 | 104 |
Brod | Zaměřit se | 2,0 | 1328 | 105 |
Brod | Mondeo | 1.6 | 1584 | 94 |
Opel | Insignie | 2,0 | 1428 | 99 |
Mercedes | Třída C | 2.1 | 1365 | 99 |
Škoda | 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.6 | 1523 | 109 |
BMW | 5 | 2,0 | 1705 | 114 |
Mercedes | E-třída | 2.1 | 1605 | 115 |
Volvo | XC70 | 2,0 | 1746 | 117 |
Brod | B-Max | 1.6 | 1235 | 104 |
BMW | 2 | 1.6 | 1390 | 108 |
Opel | Zafira | 1.6 | 1405 | 109 |
Mercedes | SLK | 2.5 | 1395 | 120 |
Porovnat objem 1.0 s hmotností 790 může být obtížné, ale pokud je oba naškálujeme na srovnatelné hodnoty, snadno zjistíme, jak moc je jedna hodnota ve srovnání s druhou.
Existují různé metody pro škálování dat, v tomto tutoriálu použijeme metodu zvanou standardizace.
Standardizační metoda používá tento vzorec:
z = (x - u) / s
Kde z
je nová hodnota,
x
je původní hodnota,
u
je průměr a s
je standardní odchylka.
Pokud sloupec hmotnosti převezmete z výše uvedené datové sady, první hodnota je 790 a škálovaná hodnota bude:
(790 - ) / = -2.1
Pokud sloupec objemu převezmete z datové sady výše, první hodnota je 1,0 a škálovaná hodnota bude:
(1.0 - ) / = -1.59
Nyní můžete porovnávat -2,1 s -1,59 namísto porovnávání 790 s 1,0.
Nemusíte to dělat ručně, modul Python sklearn má metodu nazvanou StandardScaler()
, která vrací objekt Scaler s metodami pro transformaci datových sad.
Příklad
Měřítko všech hodnot ve sloupcích Hmotnost a Objem:
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)
Výsledek:
Všimněte si, že první dvě hodnoty jsou -2,1 a -1,59, což odpovídá našim výpočtům:
[[-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]]
Předvídejte hodnoty CO2
Úkolem v kapitole Vícenásobná regrese bylo předpovědět emise CO2 z auta, když jste znali pouze jeho hmotnost a objem.
Když je datová sada škálována, budete muset použít stupnici, když předpovídáte hodnoty:
Příklad
Předpokládejte emise CO2 z vozu o objemu 1,3 litru, který váží 2300 kilogramů:
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)
Výsledek:
[107.2087328]