Maskininlärning - multivariat regression

Multivariabel regression (Multiple Regression)

Multivariabel regression liknar linjär regression, men har flera beroende variabler, vilket innebär att vi försöker förutsäga ett värde baserat på två eller flera variabler.

Se titta på följande dataset, vilket innehåller information om bilar.

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

Vi kan förutsäga bilens CO2-utsläpp baserat på motorns volym, men genom multipel regression kan vi introducera fler variabler, till exempel bilens vikt, för att göra förutsägelsen mer exakt.

Arbetsprincip

I Python har vi moduler som kan utföra detta. Först importera Pandas-modulen:

import pandas

Pandas-modulen låter oss läsa csv-filer och returnera ett DataFrame-objekt.

Denna fil används endast för teständamål, du kan ladda ner den här:cars.csv

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

Därefter listas oberoende värden och denna variabel namnges X.

Lägg relevanta värden i variabeln y.

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

Tips:Ofta namnges oberoende värden som stora bokstäver Xoch namnge listan med relevanta värden som lågt y.

Vi kommer att använda några metoder från sklearn-modulen, så vi måste också importera modulen:

from sklearn import linear_model

I sklearn-modulen kommer vi att använda LinearRegression() skapar ett linjärt regressionobjekt.

Objektet har en metod som fit() metoden, som tar oberoende och beroende värden som parametrar och fyller regressionobjektet med data som beskriver detta förhållande:

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

Nu har vi ett regressionobjekt som kan förutsäga CO2-värden baserat på bilens vikt och volym:

# Förutsäga CO2-utsläpp för en bil med vikt 2300kg och volym 1300ccm:
predictedCO2 = regr.predict([[2300, 1300]])

Exempel

Se hela exempel:

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)
# Förutsäga CO2-utsläpp för en bil med vikt 2300kg och volym 1300ccm:
predictedCO2 = regr.predict([[2300, 1300]])
print(predictedCO2)

Resultat:

[107.2087328]

Kör exempel

Vi förutsäger att en bil med 1.3 liter motor och vikt på 2300 kg släpper ut cirka 107 gram CO2 per kilometer.

Koefficienter

Koefficienter är faktorer som beskriver förhållandet mellan okända variabler.

t.ex. om x är en variabel, då 2x är x dubbel.x är okända variabler, siffror 2 är koefficienter.

I detta fall kan vi be om koefficientvärdena för vikt jämfört med CO2 samt volym jämfört med CO2. Svaret vi får visar vad som händer om vi ökar eller minskar en av de beroende värdena.

Exempel

Skriv ut koefficientvärdena för regressionobjektet:

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_)

Resultat:

[0.00755095 0.00780526]

Kör exempel

Resultatförklaring

Resultatet av arrayen representerar koefficientvärden för vikt och volym.

Vikt: 0.00755095
Volym: 0.00780526

Dessa värden visar oss att om vikt ökar med 1g, kommer utsläppet av CO2 att öka med 0.00755095g.

Om motorns storlek (volym) ökar med 1 ccm, kommer utsläppet av CO2 att öka med 0.00780526g.

Jag tror att detta är en rimlig gissning, men vänligen gör testet ändå!

Vi har redan förutspått att om en bil med en 1300ccm motor väger 2300 kilo, kommer koldioxidutsläppet att vara cirka 107 gram.

Vad händer om vi ökar vikten med 1000g?

Exempel

Kopiera det tidigare exemplet, men ändra bilvikten från 2300 till 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)

Resultat:

[114.75968007]

Kör exempel

Vi har förutspått att en bil med en 1.3 liter motor och en vikt på 3.3 ton släpper ut cirka 115 gram koldioxid per kilometer.

Detta indikerar att koeficienten för 0.00755095 är korrekt:

107.2087328 + (1000 * 0.00755095) = 114.75968