Apprendimento automatico - Regressione multivariata

Regressione multivariata (Multiple Regression)

La regressione multivariata è simile alla regressione lineare, ma ha più valori indipendenti, il che significa che cerchiamo di prevedere un valore basandoci su due o più variabili.

Vediamo i dati qui sotto, che contengono alcune informazioni sull'auto.

Car Model Volume Weight CO2
Toyota Aygo 1000 790 99
Mitsubishi Space Star 1200 1160 95
Skoda Citigo 1000 929 95
Fiat 500 900 865 90
Mini Cooper 1500 1140 105
VW Up! 1000 929 105
Skoda Fabia 1400 1109 90
Mercedes A-Class 1500 1365 92
Ford Fiesta 1500 1112 98
Audi A1 1600 1150 99
Hyundai I20 1100 980 99
Suzuki Swift 1300 990 101
Ford Fiesta 1000 1112 99
Honda Civic 1600 1252 94
Hundai I30 1600 1326 97
Opel Astra 1600 1330 97
BMW 1 1600 1365 99
Mazda 3 2200 1280 104
Skoda Rapid 1600 1119 104
Ford Focus 2000 1328 105
Ford Mondeo 1600 1584 94
Opel Insignia 2000 1428 99
Mercedes C-Class 2100 1365 99
Skoda Octavia 1600 1415 99
Volvo S60 2000 1415 99
Mercedes CLA 1500 1465 102
Audi A4 2000 1490 104
Audi A6 2000 1725 114
Volvo V70 1600 1523 109
BMW 5 2000 1705 114
Mercedes E-Class 2100 1605 115
Volvo XC70 2000 1746 117
Ford B-Max 1600 1235 104
BMW 2 1600 1390 108
Opel Zafira 1600 1405 109
Mercedes SLK 2500 1395 120

Possiamo prevedere l'emissione di CO2 di un'auto in base alla cilindrata del motore, ma attraverso la regressione multivariata, possiamo introdurre più variabili, come il peso dell'auto, per rendere la previsione più accurata.

Principio di funzionamento

In Python, abbiamo moduli che possono fare questo lavoro. Prima di tutto, importiamo il modulo Pandas:

import pandas

Il modulo Pandas ci permette di leggere i file csv e restituire un oggetto DataFrame.

Questo file è utilizzato solo a scopo di test, puoi scaricarlo qui:cars.csv

df = pandas.read_csv("cars.csv")

Poi elenca i valori indipendenti e chiama questa variabile X.

Metti i valori correlati in una variabile chiamata y.

X = df[['Weight', 'Volume']]
y = df['CO2']

Suggerimento:Di solito, chiamiamo la lista dei valori indipendenti con maiuscolo Xe chiamiamo la lista dei valori correlati con minuscolo y.

Useremo alcuni metodi del modulo sklearn, quindi dobbiamo anche importare il modulo:

from sklearn import linear_model

Nel modulo sklearn, useremo LinearRegression() per creare un oggetto di regressione lineare.

L'oggetto ha un metodo chiamato fit() Il metodo, che prende come parametri i valori indipendenti e dipendenti, e riempie l'oggetto di regressione con i dati che descrivono questa relazione:

regr = linear_model.LinearRegression()
regr.fit(X, y)

Ora, abbiamo un oggetto di regressione che può prevedere il valore di CO2 in base al peso e alla cilindrata dell'auto:

# Prevedere l'emissione di CO2 di un'auto con peso di 2300kg e cilindrata di 1300ccm:
predictedCO2 = regr.predict([[2300, 1300]])

Esempio

Vediamo un esempio completo:

import pandas
from sklearn import linear_model
df = pandas.read_csv("cars.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
regr = linear_model.LinearRegression()
regr.fit(X, y)
# Prevedere l'emissione di CO2 di un'auto con peso di 2300kg e cilindrata di 1300ccm:
predictedCO2 = regr.predict([[2300, 1300]])
print(predictedCO2)

Risultato:

[107.2087328]

Eseguire l'istanza

Prevediamo che un'auto con motore da 1.3 litri e peso di 2300 kg rilasci circa 107 grammi di CO2 ogni chilometro.

Coefficienti

I coefficienti sono fattori che descrivono la relazione con le variabili indeterminate.

Ad esempio: se x Se una variabile è 2x È x doppio.x Sono variabili indeterminate, numeri 2 Sono coefficienti.

In questo caso, possiamo richiedere i coefficienti di peso rispetto a CO2 e i coefficienti di volume rispetto a CO2. La risposta che otteniamo ci dice cosa accadrà se aumentiamo o riduciamo uno dei valori indipendenti.

Esempio

Stampare i coefficienti dell'oggetto di regressione:

import pandas
from sklearn import linear_model
df = pandas.read_csv("cars.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
regr = linear_model.LinearRegression()
regr.fit(X, y)
print(regr.coef_)

Risultato:

[0.00755095 0.00780526]

Eseguire l'istanza

Spiegazione dei risultati

L'array dei risultati rappresenta i coefficienti di peso e cilindrata.

Peso: 0.00755095
Volume: 0.00780526

Questi valori ci dicono che se il peso aumenta di 1g, l'emissione di CO2 aumenterà di 0.00755095g.

Se la dimensione (volume) del motore aumenta di 1 ccm, la emissione di CO2 aumenterà di 0.00780526g.

Penso che sia una previsione ragionevole, ma fatelo ancora un test!

Abbiamo già previsto che se un'auto con motore da 1300ccm pesa 2300 kg, l'emissione di anidride carbonica sarà circa 107 grammi.

Cosa succederebbe se aumentassimo il peso di 1000g?

Esempio

Copia l'esempio precedente, ma cambia il peso dell'auto da 2300 a 3300:

import pandas
from sklearn import linear_model
df = pandas.read_csv("cars.csv")
X = df[['Weight', 'Volume']]
y = df['CO2']
regr = linear_model.LinearRegression()
regr.fit(X, y)
predictedCO2 = regr.predict([[3300, 1300]])
print(predictedCO2)

Risultato:

[114.75968007]

Eseguire l'istanza

Abbiamo previsto che un'auto con motore da 1.3 litri e peso di 3.3 tonnellate emetterà circa 115 grammi di anidride carbonica ogni chilometro percorso.

Questo indica che il coefficiente di 0.00755095 è corretto:

107.2087328 + (1000 * 0.00755095) = 114.75968