Regresión múltiple en Python

La regresión múltiple es como la regresión lineal, pero con más de un valor independiente, lo que significa que tratamos de predecir un valor en función de dos o más variables.

Eche un vistazo al conjunto de datos a continuación, contiene información sobre automóviles.

CocheModeloCantidadPesoCO2
ToyotaAygo100079099
MitsubishiSpace Star1200116095
SkodaCitigo100092995
Fiat50090086590
MiniCooper15001140105
VWUp!1000929105
SkodaFabia1400110990
MercedesA-Class1500136592
FordFiesta1500111298
AudiA11600115099
HyundaiI20110098099
SuzukiSwift1300990101
FordFiesta1000111299
HondaCivic1600125294
HyundaiI301600132697
OpelAstra1600133097
BMW11600136599
Mazda322001280104
SkodaRapid16001119104
FordFocus20001328105
FordMondeo1600158494
OpelInsignia2000142899
MercedesC-Class2100136599
SkodaOctavia1600141599
VolvoC602000141599
MercedesCLA15001465102
AudiA420001490104
AudiA620001725114
VolvoV7016001523109
BMW520001705114
MercededsE-Class21001605115
VolvoXC7020001746117
FordB-Max16001235104
BMW216001390108
OpelZafira16001405109
MercedesSLK25001395120

Podemos predecir las emisiones de CO2 de un automóvil en función del tamaño del motor, pero con la regresión múltiple podemos agregar más variables, como el peso del automóvil, para que la predicción sea más precisa.

¿Como funciona?

En Python tenemos módulos que harán el trabajo por nosotros. Comience importando el módulo Pandas.

import pandas

Aprende sobre el módulo Pandas en nuestro Tutorial de Pandas.

El módulo Pandas nos permite leer archivos csv y devolver un objeto DataFrame.

El archivo está destinado solo para fines de prueba, puede descargarlo aquí: data.csv

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

Luego haz una lista de los valores independientes y llama a esta variable X.

Ponga los valores dependientes en una variable llamada y.

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

Sugerencia: es común nombrar la lista de valores independientes con una X mayúscula y la lista de valores dependientes con una y minúscula.

Usaremos algunos métodos del módulo sklearn, por lo que también tendremos que importar ese módulo:

from sklearn import linear_model

Desde el módulo sklearn usaremos el método LinearRegression() para crear un objeto de regresión lineal.

Este objeto tiene un método llamado fit() que toma los valores independientes y dependientes como parámetros y llena el objeto de regresión con datos que describen la relación:

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

Ahora tenemos un objeto de regresión que está listo para predecir los valores de CO2 en función del peso y el volumen de un automóvil:

#predict the CO2 emission of a car where the weight is 2300kg, and the volume is 1300cm3:
predictedCO2 = regr.predict([[2300, 1300]])

Ejemplo

Vea el ejemplo completo en acción:

import pandas from sklearn import linear_model

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

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

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

#predict the CO2 emission of a car where the weight is 2300kg, and the volume is 1300cm3:
predictedCO2 = regr.predict([[2300, 1300]])

Hemos pronosticado que un coche con motor de 1,3 litros y un peso de 2300 kg, emitirá aproximadamente 107 gramos de CO2 por cada kilómetro recorrido.

Coeficiente

El coeficiente es un factor que describe la relación con una variable desconocida.

Ejemplo: si x es una variable, entonces 2x es x dos veces. x es la variable desconocida y el número 2 es el coeficiente.

En este caso, podemos pedir el valor del coeficiente de peso frente a CO2, y el de volumen frente a CO2. La(s) respuesta(s) que obtenemos nos dice qué pasaría si aumentamos o disminuimos uno de los valores independientes.

import pandas from sklearn import linear_model

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

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

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

print(regr.coef_)

Resultado explicado

La matriz de resultados representa los valores de los coeficientes de peso y volumen.

Peso: 0.00755095
Volumen: 0.00780526

Estos valores nos dicen que si el peso aumenta en 1 kg, la emisión de CO2 aumenta en 0,00755095 g.

Y si el tamaño del motor (Volumen) aumenta en 1 cm3, la emisión de CO2 aumenta en 0,00780526 g.

Creo que es una suposición justa, ¡pero vamos a probarlo!

Ya hemos pronosticado que si un coche con un motor de 1300 cm3 pesa 2300 kg, la emisión de CO2 será de aproximadamente 107 g.

¿Qué pasa si aumentamos el peso con 1000 kg?

Ejemplo

Copie el ejemplo anterior, pero cambie el peso de 2300 a 3300:

import pandas
from sklearn import linear_model

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

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

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

predictedCO2 = regr.predict([[3300, 1300]])
print(predictedCO2)

Resultado:

[114.75968007]

Hemos pronosticado que un coche con motor de 1,3 litros y un peso de 3300 kg, emitirá aproximadamente 115 gramos de CO2 por cada kilómetro recorrido.

Lo que demuestra que el coeficiente de 0.00755095 es correcto:

107,2087328 + (1000 * 0,00755095) = 114,75968