Maskinlæring - skalering
- Forrige Side Multivariable Regression
- Næste Side Træning/TEST
Funktionsskalering (Scale Features)
Det kan være svært at sammenligne data, der har forskellige værdier, eller endda bruger forskellige måleenheder. Hvor meget er en kilo i forhold til en meter? Eller højde sammenlignet med tid?
Svaret på dette spørgsmål er skalering. Vi kan skalere dataene til nye værdier, der er lettere at sammenligne.
Se tabellen nedenfor, som viMultivariable RegressionDataene i kapitlet er de samme, men denne gang indeholder Volume-kolonnen enheder i liter, ikke ccm (1,0 i stedet for 1000).
Bil | Model | Volumen | Vægt | 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 | Op! | 1.0 | 929 | 105 |
Skoda | Fabia | 1,4 | 1109 | 90 |
Mercedes | A-Klasse | 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 |
Det er svært at sammenligne en effekt på 1.0 med en vægt på 790, men hvis vi skalerer dem begge til sammenlignelige værdier, kan vi nemt se, hvor mange en værdi er sammenlignet med den anden.
Der er flere måder at skalere data på, i denne tutorial vil vi bruge en metode kaldet standardisering (standardization).
Standardiseringsmetoden bruger følgende formel:
z = (x - u) / s
hvor z er den nye værdi, x er den oprindelige værdi, u er gennemsnittet, og s er standardafvigelsen.
Hvis du henter data fra den ovennævnte dataset weight kolonne, så den første værdi er 790, og værdien efter skaling er:
(790 - 1292.23) / 238.74 = -2.1
Hvis du henter data fra den ovennævnte dataset volume kolonne, så den første værdi er 1.0, og værdien efter skaling er:
(1.0 - 1.61) / 0.38 = -1.59
Nu kan du sammenligne -2.1 med -1.59, i stedet for at sammenligne 790 med 1.0.
Du behøver ikke udføre denne operation manuelt, Python sklearn-modulen har en funktion kaldet StandardScaler()
metoden, der returnerer en Scaler-objekt med metoden til konvertering af dataindholdet.
Eksempel
Skaler alle værdier i kolonnerne Weight og Volume:
import pandas fra sklearn import linear_model fra sklearn.preprocessing import StandardScaler scale = StandardScaler() df = pandas.read_csv("cars2.csv") X = df[['Vægt', 'Omkreds']] scaledX = scale.fit_transform(X) print(scaledX)
Resultat:
Bemærk venligst, de første to værdier er -2.1 og -1.59, hvilket svarer til vores beregninger:
[[-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]
Forudsig CO2-værdien
Multivariable RegressionEn opgaves opgave er at forudsige CO2-emissioner, når man kun kender bilens vægt og motorens effekt.
Efter dataene er skaleret, skal skaleringsforholdet bruges ved at forudsige værdierne:
Eksempel
Forudsig CO2-emission for en bil på 2300 kg med en tankkapacitet på 1.3 liter:
import pandas fra sklearn import linear_model fra sklearn.preprocessing import StandardScaler scale = StandardScaler() df = pandas.read_csv("cars2.csv") X = df[['Vægt', 'Omkreds']] 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)
Resultat:
[107.2087328]
- Forrige Side Multivariable Regression
- Næste Side Træning/TEST