Maskininlärning - skalning
- Föregående Sida Multivariat Regression
- Nästa Sida Träning/Testing
Feature Scaling (Scale Features)
It may be difficult to compare data when your data has different values, even using different units of measurement. How many kilograms is a meter compared to a kilogram? Or altitude compared to time?
The answer to this question is scaling. We can scale the data to new values that are easy to compare.
Please see the table below, which is consistent with what we haveMultivariat RegressionThe dataset used in chapter 1 is the same, but this time, the Volume column contains units in liters instead of ccm (1.0 instead of 1000).
Car | Model | Volume | Weight | 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 | A-Class | 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 är svårt att jämföra volymen 1.0 med vikten 790, men om vi skalar båda till jämförbara värden kan vi lätt se hur mycket en värde jämfört med ett annat.
Det finns flera sätt att skalera data, i denna tutorial kommer vi att använda en metod som kallas standardisering (standardization).
Standardiseringsmetoden använder följande formel:
z = (x - u) / s
där z är den nya värdet, x är det ursprungliga värdet, u är medelvärdet och s är standardavvikelsen.
Om du hämtar data från den ovanstående datamängden weight Om du har en kolumn, är det första värdet 790, och det skalade värdet är:
(790 - 1292.23) / 238.74 = -2.1
Om du hämtar data från den ovanstående datamängden volume Om du har en kolumn, är det första värdet 1.0, och det skalade värdet är:
(1.0 - 1.61) / 0.38 = -1.59
Nu kan du jämföra -2.1 med -1.59, inte 790 med 1.0.
Du behöver inte utföra detta manuellt, Python sklearn-modulen har ett namn StandardScaler()
metoden, som returnerar en Scaler-objekt med konverteringsdatabladmetoden.
Exempel
Skala alla värden i Weight och Volume-kolumnerna:
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)
Resultat:
Observera att de två första värdena är -2.1 och -1.59, vilket motsvarar våra beräkningar:
[[-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]
Prediktera CO2-värdet
Multivariat RegressionUppgiften i detta kapitel är att förutsäga koldioxidutsläppet för en bil medan man bara känner till vikten och volymen.
Efter att datauppsättningen har skalats, måste skalningsproportionaliteten användas vid prediktion av värden:
Exempel
Predikera koldioxidutsläpp för en bil som väger 2300 kilo och har en volym på 1.3 liter:
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)
Resultat:
[107.2087328]
- Föregående Sida Multivariat Regression
- Nästa Sida Träning/Testing