Scala nella machine learning
- Pagina precedente Regressione multipla
- Pagina successiva Esercitazione/test
Feature Scaling (Scale Features)
When your data has different values, even using different measurement units, it may be difficult to compare them. How many kilograms is compared to meters? 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 corresponds toRegressione multiplaIn this chapter, the same dataset is used, 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 |
It is difficult to compare displacement 1.0 with weight 790, but if we scale them to comparable values, we can easily see how much one value is compared to another.
There are many ways to scale data, in this tutorial, we will use a method called standardization (standardization).
The standardization method uses the following formula:
z = (x - u) / s
where z is the new value, x is the original value, u is the mean, and s is the standard deviation.
If you obtain weight column, the first value is 790, and the scaled value is:
(790 - 1292.23) / 238.74 = -2.1
If you obtain volume column, the first value is 1.0, and the scaled value is:
(1.0 - 1.61) / 0.38 = -1.59
Now, you can compare -2.1 with -1.59 instead of comparing 790 with 1.0.
You do not need to perform this operation manually, Python's sklearn module has a function called StandardScaler()
method, which returns a Scaler object with the transformed dataset method.
Esempio
Zoom all values in the Weight and Volume columns:
import pandas from sklearn import linear_model from sklearn.preprocessing import StandardScaler scale = StandardScaler() df = pandas.read_csv("cars2.csv") X = df[['Peso', 'Volume']] scaledX = scale.fit_transform(X) print(scaledX)
Risultato:
Attenzione, i primi due valori sono -2.1 e -1.59, corrispondenti ai nostri calcoli:
[[-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]
Prevedere il valore di CO2
Regressione multiplaL'obiettivo di questa sezione è prevedere le emissioni di CO2 di un'auto, sapendo solo il peso e la cilindrata.
Dopo la riduzione della dimensione del set di dati, è necessario utilizzare la scala di riduzione per i valori di previsione:
Esempio
Prevedere l'emissione di CO2 di un'auto da 2300 kg e 1.3 litri:
import pandas from sklearn import linear_model from sklearn.preprocessing import StandardScaler scale = StandardScaler() df = pandas.read_csv("cars2.csv") X = df[['Peso', '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)
Risultato:
[107.2087328]
- Pagina precedente Regressione multipla
- Pagina successiva Esercitazione/test