Apprendimento automatico - Scalabilità
Funzioni di scala
Quando i tuoi dati hanno valori diversi e persino unità di misura diverse, può essere difficile confrontarli. Cosa sono i chilogrammi rispetto ai metri? O l'altitudine rispetto al tempo?
La risposta a questo problema è il ridimensionamento. Possiamo ridimensionare i dati in nuovi valori che sono più facili da confrontare.
Dai un'occhiata alla tabella seguente, è lo stesso set di dati che abbiamo utilizzato nel capitolo sulla regressione multipla , ma questa volta la colonna del volume contiene valori in litri anziché in cm 3 (1,0 anziché 1000).
Il file è inteso solo a scopo di test, puoi scaricarlo qui: cars2.csv
Macchina | Modello | Volume | Peso | CO2 |
Toyota | Aygo | 1.0 | 790 | 99 |
Mitsubishi | Stella spaziale | 1.2 | 1160 | 95 |
Skoda | Citigine | 1.0 | 929 | 95 |
Fiat | 500 | 0.9 | 865 | 90 |
Mini | Bottaio | 1.5 | 1140 | 105 |
VW | Su! | 1.0 | 929 | 105 |
Skoda | Fabio | 1.4 | 1109 | 90 |
Mercedes | Una classe | 1.5 | 1365 | 92 |
Guado | Festa | 1.5 | 1112 | 98 |
Audi | A1 | 1.6 | 1150 | 99 |
Hyundai | I20 | 1.1 | 980 | 99 |
Suzuki | Veloce | 1.3 | 990 | 101 |
Guado | Festa | 1.0 | 1112 | 99 |
Honda | Civico | 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 | Rapido | 1.6 | 1119 | 104 |
Guado | Messa a fuoco | 2.0 | 1328 | 105 |
Guado | Mondeo | 1.6 | 1584 | 94 |
Opel | Insegne | 2.0 | 1428 | 99 |
Mercedes | Classe C | 2.1 | 1365 | 99 |
Skoda | Ottavia | 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 | Classe E | 2.1 | 1605 | 115 |
Volvo | XC70 | 2.0 | 1746 | 117 |
Guado | B-Max | 1.6 | 1235 | 104 |
BMW | 2 | 1.6 | 1390 | 108 |
Opel | Zafira | 1.6 | 1405 | 109 |
Mercedes | SLK | 2.5 | 1395 | 120 |
Può essere difficile confrontare il volume 1.0 con il peso 790, ma se li ridimensioniamo entrambi in valori comparabili, possiamo facilmente vedere quanto un valore viene confrontato con l'altro.
Esistono diversi metodi per ridimensionare i dati, in questo tutorial utilizzeremo un metodo chiamato standardizzazione.
Il metodo di standardizzazione utilizza questa formula:
z = (x - u) / s
Dove z
è il nuovo valore,
x
è il valore originale,
u
è la media ed s
è la deviazione standard.
Se prendi la colonna del peso dal set di dati sopra, il primo valore è 790 e il valore in scala sarà:
(790 - ) / = -2.1
Se prendi la colonna del volume dal set di dati sopra, il primo valore è 1,0 e il valore in scala sarà:
(1.0 - ) / = -1.59
Ora puoi confrontare -2,1 con -1,59 invece di confrontare 790 con 1,0.
Non devi farlo manualmente, il modulo Python sklearn ha un metodo chiamato StandardScaler()
che restituisce un oggetto Scaler con metodi per trasformare i set di dati.
Esempio
Scala tutti i valori nelle colonne Peso e Volume:
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)
Risultato:
Nota che i primi due valori sono -2.1 e -1.59, che corrispondono 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 i valori di CO2
Il compito nel capitolo Regressione multipla era prevedere l'emissione di CO2 di un'auto quando ne conoscevi solo il peso e il volume.
Quando il set di dati viene ridimensionato, dovrai utilizzare la scala per prevedere i valori:
Esempio
Prevedi le emissioni di CO2 di un'auto da 1,3 litri che pesa 2300 chilogrammi:
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)
Risultato:
[107.2087328]