En el tema anterior, aprendimos sobre la regresión lineal simple, donde se usa una única variable independiente/predictora (X) para modelar la variable de respuesta (Y). Pero puede haber varios casos en los que la variable de respuesta se vea afectada por más de una variable predictiva; para tales casos, se utiliza el algoritmo de regresión lineal múltiple.
Además, la regresión lineal múltiple es una extensión de la regresión lineal simple, ya que se necesita más de una variable predictiva para predecir la variable de respuesta. Podemos definirlo como:
La regresión lineal múltiple es uno de los algoritmos de regresión importantes que modela la relación lineal entre una única variable continua dependiente y más de una variable independiente.
Ejemplo:
Predicción de CO2Emisiones basadas en el tamaño del motor y el número de cilindros de un automóvil.
Algunos puntos clave sobre MLR:
- Para MLR, la variable dependiente o objetivo (Y) debe ser continua/real, pero la variable predictora o independiente puede ser de forma continua o categórica.
- Cada variable característica debe modelar la relación lineal con la variable dependiente.
- MLR intenta ajustar una línea de regresión a través de un espacio multidimensional de puntos de datos.
Ecuación MLR:
En la regresión lineal múltiple, la variable objetivo (Y) es una combinación lineal de múltiples variables predictoras x1, X2, X3, ...,Xnorte. Dado que es una mejora de la regresión lineal simple, se aplica lo mismo para la ecuación de regresión lineal múltiple, la ecuación se convierte en:
Y= b<sub>0</sub>+b<sub>1</sub>x<sub>1</sub>+ b<sub>2</sub>x<sub>2</sub>+ b<sub>3</sub>x<sub>3</sub>+...... bnxn ............... (a)
Dónde,
Y= Variable salida/respuesta
java inicializar matriz
b0, b1, b2, b3, bnorte....= Coeficientes del modelo.
X1, X2, X3, X4,...= Varios Variable independiente/característica
Supuestos para la regresión lineal múltiple:
- A relación lineal debe existir entre las variables objetivo y predictora.
- Los residuos de regresión deben ser Normalmente distribuido .
- MLR asume poca o sin multicolinealidad (correlación entre la variable independiente) en los datos.
Implementación del modelo de Regresión Lineal Múltiple usando Python:
Para implementar MLR usando Python, tenemos el siguiente problema:
Descripción del problema:
Tenemos un conjunto de datos de 50 empresas de nueva creación . Este conjunto de datos contiene cinco información principal: Gasto en I+D, gasto administrativo, gasto en marketing, estado y beneficios de un ejercicio financiero . Nuestro objetivo es crear un modelo que pueda determinar fácilmente qué empresa tiene el máximo beneficio y cuál es el factor que más afecta al beneficio de una empresa.
Dado que necesitamos encontrar la ganancia, es la variable dependiente y las otras cuatro variables son variables independientes. A continuación se detallan los pasos principales para implementar el modelo MLR:
Paso 1: Paso de preprocesamiento de datos:
El primer paso es
# importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd
#importing datasets data_set= pd.read_csv('50_CompList.csv')
Producción: Obtendremos el conjunto de datos como:
En el resultado anterior, podemos ver claramente que hay cinco variables, de las cuales cuatro son continuas y una es categórica.
#Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values
Producción:
Fuera[5]:
array([[165349.2, 136897.8, 471784.1, 'New York'], [162597.7, 151377.59, 443898.53, 'California'], [153441.51, 101145.55, 407934.54, 'Florida'], [144372.41, 118671.85, 383199.62, 'New York'], [142107.34, 91391.77, 366168.42, 'Florida'], [131876.9, 99814.71, 362861.36, 'New York'], [134615.46, 147198.87, 127716.82, 'California'], [130298.13, 145530.06, 323876.68, 'Florida'], [120542.52, 148718.95, 311613.29, 'New York'], [123334.88, 108679.17, 304981.62, 'California'], [101913.08, 110594.11, 229160.95, 'Florida'], [100671.96, 91790.61, 249744.55, 'California'], [93863.75, 127320.38, 249839.44, 'Florida'], [91992.39, 135495.07, 252664.93, 'California'], [119943.24, 156547.42, 256512.92, 'Florida'], [114523.61, 122616.84, 261776.23, 'New York'], [78013.11, 121597.55, 264346.06, 'California'], [94657.16, 145077.58, 282574.31, 'New York'], [91749.16, 114175.79, 294919.57, 'Florida'], [86419.7, 153514.11, 0.0, 'New York'], [76253.86, 113867.3, 298664.47, 'California'], [78389.47, 153773.43, 299737.29, 'New York'], [73994.56, 122782.75, 303319.26, 'Florida'], [67532.53, 105751.03, 304768.73, 'Florida'], [77044.01, 99281.34, 140574.81, 'New York'], [64664.71, 139553.16, 137962.62, 'California'], [75328.87, 144135.98, 134050.07, 'Florida'], [72107.6, 127864.55, 353183.81, 'New York'], [66051.52, 182645.56, 118148.2, 'Florida'], [65605.48, 153032.06, 107138.38, 'New York'], [61994.48, 115641.28, 91131.24, 'Florida'], [61136.38, 152701.92, 88218.23, 'New York'], [63408.86, 129219.61, 46085.25, 'California'], [55493.95, 103057.49, 214634.81, 'Florida'], [46426.07, 157693.92, 210797.67, 'California'], [46014.02, 85047.44, 205517.64, 'New York'], [28663.76, 127056.21, 201126.82, 'Florida'], [44069.95, 51283.14, 197029.42, 'California'], [20229.59, 65947.93, 185265.1, 'New York'], [38558.51, 82982.09, 174999.3, 'California'], [28754.33, 118546.05, 172795.67, 'California'], [27892.92, 84710.77, 164470.71, 'Florida'], [23640.93, 96189.63, 148001.11, 'California'], [15505.73, 127382.3, 35534.17, 'New York'], [22177.74, 154806.14, 28334.72, 'California'], [1000.23, 124153.04, 1903.93, 'New York'], [1315.46, 115816.21, 297114.46, 'Florida'], [0.0, 135426.92, 0.0, 'California'], [542.05, 51743.15, 0.0, 'New York'], [0.0, 116983.8, 45173.06, 'California']], dtype=object)
Como podemos ver en el resultado anterior, la última columna contiene variables categóricas que no son adecuadas para aplicarlas directamente para ajustar el modelo. Entonces necesitamos codificar esta variable.
Codificación de variables ficticias:
Como tenemos una variable categórica (Estado), que no se puede aplicar directamente al modelo, la codificaremos. Para codificar la variable categórica en números, usaremos el Codificador de etiquetas clase. Pero no es suficiente porque todavía tiene cierto orden relacional, lo que puede crear un modelo equivocado. Entonces, para eliminar este problema, usaremos OneHotEncoder , que creará las variables ficticias. A continuación se muestra el código para ello:
#Catgorical data from sklearn.preprocessing import LabelEncoder, OneHotEncoder labelencoder_x= LabelEncoder() x[:, 3]= labelencoder_x.fit_transform(x[:,3]) onehotencoder= OneHotEncoder(categorical_features= [3]) x= onehotencoder.fit_transform(x).toarray()
Aquí solo codificamos una variable independiente, que es de estado, ya que otras variables son continuas.
lista enlazada y lista de matrices
Producción:
Como podemos ver en el resultado anterior, la columna de estado se ha convertido en variables ficticias (0 y 1). Aquí cada columna de variable ficticia corresponde a un Estado . Podemos comprobarlo comparándolo con el conjunto de datos original. La primera columna corresponde a la Estado de California , la segunda columna corresponde a la Estado de Florida , y la tercera columna corresponde a la Estado de Nueva York .
Nota:No debemos usar todas las variables ficticias al mismo tiempo, por lo que debe ser 1 menos que el número total de variables ficticias; de lo contrario, se creará una trampa de variables ficticias.
- Ahora, estamos escribiendo una sola línea de código sólo para evitar la trampa de la variable ficticia:
#avoiding the dummy variable trap: x = x[:, 1:]
Si no eliminamos la primera variable ficticia, es posible que se introduzca multicolinealidad en el modelo.
Como podemos ver en la imagen de salida de arriba, la primera columna ha sido eliminada.
- Ahora dividiremos el conjunto de datos en conjunto de entrenamiento y de prueba. El código para esto se proporciona a continuación:
# Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.2, random_state=0)
El código anterior dividirá nuestro conjunto de datos en un conjunto de entrenamiento y un conjunto de prueba.
Producción: El código anterior dividirá el conjunto de datos en conjunto de entrenamiento y conjunto de prueba. Puede verificar el resultado haciendo clic en la opción del explorador de variables proporcionada en Spyder IDE. El conjunto de prueba y el conjunto de entrenamiento se verán como la siguiente imagen:
Equipo de prueba:
Conjunto de entrenamiento:
Nota:En MLR, no escalaremos funciones ya que la biblioteca se encarga de ello, por lo que no es necesario que lo hagamos manualmente.
Paso: 2- Ajustar nuestro modelo MLR al conjunto de entrenamiento:
Ahora hemos preparado bien nuestro conjunto de datos para proporcionar capacitación, lo que significa que ajustaremos nuestro modelo de regresión al conjunto de capacitación. Será similar a como lo hicimos en Modelo de regresión lineal simple. El código para esto será:
#Fitting the MLR model to the training set: from sklearn.linear_model import LinearRegression regressor= LinearRegression() regressor.fit(x_train, y_train)
Producción:
Out[9]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
Ahora hemos entrenado con éxito nuestro modelo utilizando el conjunto de datos de entrenamiento. En el siguiente paso, probaremos el rendimiento del modelo utilizando el conjunto de datos de prueba.
Paso: 3- Predicción de los resultados del conjunto de pruebas:
El último paso para nuestro modelo es verificar el rendimiento del modelo. Lo haremos prediciendo el resultado del conjunto de pruebas. Para la predicción, crearemos un y_pred vector. A continuación se muestra el código para ello:
#Predicting the Test set result; y_pred= regressor.predict(x_test)
Al ejecutar las líneas de código anteriores, se generará un nuevo vector en la opción del explorador de variables. Podemos probar nuestro modelo comparando los valores predichos y los valores del conjunto de prueba.
Producción:
En el resultado anterior, hemos predicho un conjunto de resultados y un conjunto de pruebas. Podemos comprobar el rendimiento del modelo comparando estos dos valores índice por índice. Por ejemplo, el primer índice tiene un valor previsto de 103015$ beneficio y valor de prueba/real de 103282$ ganancia. La diferencia es sólo de 267$ , lo cual es una buena predicción, por lo que, finalmente, nuestro modelo está completo aquí.
- También podemos verificar la puntuación del conjunto de datos de entrenamiento y del conjunto de datos de prueba. A continuación se muestra el código para ello:
print('Train Score: ', regressor.score(x_train, y_train)) print('Test Score: ', regressor.score(x_test, y_test))
Producción: La puntuación es:
Train Score: 0.9501847627493607 Test Score: 0.9347068473282446
La puntuación anterior indica que nuestro modelo tiene una precisión del 95% con el conjunto de datos de entrenamiento y del 93% con el conjunto de datos de prueba.
cadena de int
Nota:En el siguiente tema, veremos cómo podemos mejorar el rendimiento del modelo utilizando elEliminación hacia atrásproceso.
Aplicaciones de la regresión lineal múltiple:
Existen principalmente dos aplicaciones de la Regresión Lineal Múltiple:
- Efectividad de la variable independiente en la predicción:
- Predecir el impacto de los cambios: