logo

Regressió lineal múltiple

En el tema anterior, hem après sobre la regressió lineal simple, on s'utilitza una única variable independent/predictora (X) per modelar la variable de resposta (Y). Però hi pot haver diversos casos en què la variable resposta es vegi afectada per més d'una variable predictora; per a aquests casos, s'utilitza l'algorisme de regressió lineal múltiple.

A més, la regressió lineal múltiple és una extensió de la regressió lineal simple, ja que es necessita més d'una variable predictiva per predir la variable resposta. El podem definir com:

La regressió lineal múltiple és un dels algorismes de regressió importants que modela la relació lineal entre una única variable contínua dependent i més d'una variable independent.

Exemple:

Predicció de CO2emissions basades en la mida del motor i el nombre de cilindres d'un cotxe.

Alguns punts clau sobre MLR:

  • Per a MLR, la variable dependent o objectiu (Y) ha de ser la contínua/real, però la variable predictora o independent pot ser de forma contínua o categòrica.
  • Cada variable característica ha de modelar la relació lineal amb la variable dependent.
  • MLR intenta ajustar una línia de regressió a través d'un espai multidimensional de punts de dades.

Equació MLR:

A la regressió lineal múltiple, la variable objectiu (Y) és una combinació lineal de múltiples variables predictores x1, x2, x3,...,xn. Com que és una millora de la regressió lineal simple, de manera que s'aplica el mateix per a l'equació de regressió lineal múltiple, l'equació es converteix 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) 

On,

Y= variable de sortida/resposta

matemàtiques java

b0, b1, b2, b3, bn....= Coeficients del model.

x1, x2, x3, x4,...= Varia variable independent/funció

Hipòtesis per a la regressió lineal múltiple:

  • A relació lineal hauria d'existir entre les variables objectiu i predictora.
  • Els residus de regressió han de ser distribuïts normalment .
  • MLR suposa poc o no hi ha multicolinealitat (correlació entre la variable independent) a les dades.

Implementació del model de regressió lineal múltiple mitjançant Python:

Per implementar MLR mitjançant Python, tenim el següent problema:

Descripció del problema:

Tenim un conjunt de dades 50 empreses emergents . Aquest conjunt de dades conté cinc dades principals: Despesa en R+D, despesa d'administració, despesa de màrqueting, estat i benefici per a un exercici . El nostre objectiu és crear un model que pugui determinar fàcilment quina empresa té un benefici màxim, i quin és el factor més afectant per als beneficis d'una empresa.

Com que hem de trobar el benefici, per tant és la variable dependent, i les altres quatre variables són variables independents. A continuació es mostren els passos principals per implementar el model MLR:

    Passos de preprocessament de dades Adaptació del model MLR al conjunt d'entrenament Predicció del resultat del conjunt de proves

Pas 1: Pas de preprocessament de dades:

El primer pas ésImportació de biblioteques:En primer lloc importarem la biblioteca que ajudarà a construir el model. A continuació es mostra el codi per a això:

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 
    Importació del conjunt de dades:Ara importarem el conjunt de dades (50_CompList), que conté totes les variables. A continuació es mostra el codi per a això:
 #importing datasets data_set= pd.read_csv(&apos;50_CompList.csv&apos;) 

Sortida: Obtenim el conjunt de dades com:

Regressió lineal múltiple

A la sortida anterior, podem veure clarament que hi ha cinc variables, en les quals quatre variables són contínues i una és categòrica.

    Extracció de variables dependents i independents:
 #Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values 

Sortida:

Sortida[5]:

 array([[165349.2, 136897.8, 471784.1, &apos;New York&apos;], [162597.7, 151377.59, 443898.53, &apos;California&apos;], [153441.51, 101145.55, 407934.54, &apos;Florida&apos;], [144372.41, 118671.85, 383199.62, &apos;New York&apos;], [142107.34, 91391.77, 366168.42, &apos;Florida&apos;], [131876.9, 99814.71, 362861.36, &apos;New York&apos;], [134615.46, 147198.87, 127716.82, &apos;California&apos;], [130298.13, 145530.06, 323876.68, &apos;Florida&apos;], [120542.52, 148718.95, 311613.29, &apos;New York&apos;], [123334.88, 108679.17, 304981.62, &apos;California&apos;], [101913.08, 110594.11, 229160.95, &apos;Florida&apos;], [100671.96, 91790.61, 249744.55, &apos;California&apos;], [93863.75, 127320.38, 249839.44, &apos;Florida&apos;], [91992.39, 135495.07, 252664.93, &apos;California&apos;], [119943.24, 156547.42, 256512.92, &apos;Florida&apos;], [114523.61, 122616.84, 261776.23, &apos;New York&apos;], [78013.11, 121597.55, 264346.06, &apos;California&apos;], [94657.16, 145077.58, 282574.31, &apos;New York&apos;], [91749.16, 114175.79, 294919.57, &apos;Florida&apos;], [86419.7, 153514.11, 0.0, &apos;New York&apos;], [76253.86, 113867.3, 298664.47, &apos;California&apos;], [78389.47, 153773.43, 299737.29, &apos;New York&apos;], [73994.56, 122782.75, 303319.26, &apos;Florida&apos;], [67532.53, 105751.03, 304768.73, &apos;Florida&apos;], [77044.01, 99281.34, 140574.81, &apos;New York&apos;], [64664.71, 139553.16, 137962.62, &apos;California&apos;], [75328.87, 144135.98, 134050.07, &apos;Florida&apos;], [72107.6, 127864.55, 353183.81, &apos;New York&apos;], [66051.52, 182645.56, 118148.2, &apos;Florida&apos;], [65605.48, 153032.06, 107138.38, &apos;New York&apos;], [61994.48, 115641.28, 91131.24, &apos;Florida&apos;], [61136.38, 152701.92, 88218.23, &apos;New York&apos;], [63408.86, 129219.61, 46085.25, &apos;California&apos;], [55493.95, 103057.49, 214634.81, &apos;Florida&apos;], [46426.07, 157693.92, 210797.67, &apos;California&apos;], [46014.02, 85047.44, 205517.64, &apos;New York&apos;], [28663.76, 127056.21, 201126.82, &apos;Florida&apos;], [44069.95, 51283.14, 197029.42, &apos;California&apos;], [20229.59, 65947.93, 185265.1, &apos;New York&apos;], [38558.51, 82982.09, 174999.3, &apos;California&apos;], [28754.33, 118546.05, 172795.67, &apos;California&apos;], [27892.92, 84710.77, 164470.71, &apos;Florida&apos;], [23640.93, 96189.63, 148001.11, &apos;California&apos;], [15505.73, 127382.3, 35534.17, &apos;New York&apos;], [22177.74, 154806.14, 28334.72, &apos;California&apos;], [1000.23, 124153.04, 1903.93, &apos;New York&apos;], [1315.46, 115816.21, 297114.46, &apos;Florida&apos;], [0.0, 135426.92, 0.0, &apos;California&apos;], [542.05, 51743.15, 0.0, &apos;New York&apos;], [0.0, 116983.8, 45173.06, &apos;California&apos;]], dtype=object) 

Com podem veure a la sortida anterior, l'última columna conté variables categòriques que no són adequades per aplicar directament per ajustar el model. Per tant, hem de codificar aquesta variable.

Codificació de variables simulades:

Com que tenim una variable categòrica (Estat), que no es pot aplicar directament al model, la codificarem. Per codificar la variable categòrica en nombres, utilitzarem el LabelEncoder classe. Però no és suficient perquè encara té algun ordre relacional, que pot crear un model equivocat. Així que per eliminar aquest problema, utilitzarem OneHotEncoder , que crearà les variables simulades. A continuació es mostra el codi:

 #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í només estem codificant una variable independent, que és l'estat ja que altres variables són contínues.

àlgebra booleana de llei distributiva

Sortida:

Regressió lineal múltiple

Com podem veure a la sortida anterior, la columna d'estat s'ha convertit en variables simulades (0 i 1). Aquí cada columna de variable simulada correspon a l'estat . Podem comprovar-ho comparant-ho amb el conjunt de dades original. La primera columna correspon a la Estat de Califòrnia , la segona columna correspon a la Estat de Florida , i la tercera columna correspon a la Estat de Nova York .

Nota:No hem d'utilitzar totes les variables simulades al mateix temps, de manera que ha de ser 1 menys que el nombre total de variables simulades, sinó crearà una trampa de variables simulades.

  • Ara, estem escrivint una única línia de codi només per evitar la trampa de variable ficticia:
 #avoiding the dummy variable trap: x = x[:, 1:] 

Si no eliminem la primera variable simulada, és possible que introdueixi multicolinealitat al model.

Regressió lineal múltiple

Com podem veure a la imatge de sortida anterior, la primera columna s'ha eliminat.

  • Ara dividirem el conjunt de dades en formació i conjunt de proves. El codi per a això es mostra a continuació:
 # 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 codi anterior dividirà el nostre conjunt de dades en un conjunt d'entrenament i un conjunt de proves.

Sortida: El codi anterior dividirà el conjunt de dades en un conjunt d'entrenament i un conjunt de proves. Podeu comprovar la sortida fent clic a l'opció d'explorador de variables que es mostra a l'IDE de Spyder. El conjunt de proves i el conjunt d'entrenament es veuran com la imatge següent:

Conjunt de prova:

Regressió lineal múltiple

Set d'entrenament:

Regressió lineal múltiple

Nota:A MLR, no farem escala de característiques, ja que la biblioteca s'encarrega, de manera que no cal fer-ho manualment.

Pas: 2- Encaixar el nostre model MLR al conjunt d'entrenament:

Ara, hem preparat bé el nostre conjunt de dades per tal de proporcionar formació, el que significa que ajustarem el nostre model de regressió al conjunt d'entrenament. Serà semblant al que vam fer a Model de regressió lineal simple. El codi per a això serà:

 #Fitting the MLR model to the training set: from sklearn.linear_model import LinearRegression regressor= LinearRegression() regressor.fit(x_train, y_train) 

Sortida:

 Out[9]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False) 

Ara, hem entrenat amb èxit el nostre model mitjançant el conjunt de dades d'entrenament. En el següent pas, provarem el rendiment del model mitjançant el conjunt de dades de prova.

Pas: 3- Predicció dels resultats del conjunt de proves:

L'últim pas per al nostre model és comprovar el rendiment del model. Ho farem predint el resultat del conjunt de la prova. Per a la predicció, crearem un i_pred vector. A continuació es mostra el codi per a això:

 #Predicting the Test set result; y_pred= regressor.predict(x_test) 

En executar les línies de codi anteriors, es generarà un vector nou sota l'opció de l'explorador de variables. Podem provar el nostre model comparant els valors predits i els valors del conjunt de prova.

Sortida:

Regressió lineal múltiple

A la sortida anterior, hem predit un conjunt de resultats i un conjunt de proves. Podem comprovar el rendiment del model comparant aquests dos valors índex per índex. Per exemple, el primer índex té un valor previst de 103015$ benefici i valor de prova/real de 103282$ benefici. La diferència és només de 267$ , que és una bona predicció, així que, finalment, el nostre model es completa aquí.

  • També podem comprovar la puntuació del conjunt de dades d'entrenament i del conjunt de dades de prova. A continuació es mostra el codi per a això:
 print(&apos;Train Score: &apos;, regressor.score(x_train, y_train)) print(&apos;Test Score: &apos;, regressor.score(x_test, y_test)) 

Sortida: La puntuació és:

 Train Score: 0.9501847627493607 Test Score: 0.9347068473282446 

La puntuació anterior indica que el nostre model té una precisió del 95% amb el conjunt de dades d'entrenament i un 93% amb el conjunt de dades de prova.

en cadena en java

Nota:En el següent tema, veurem com podem millorar el rendiment del model utilitzant elEliminació cap enrereprocés.

Aplicacions de la regressió lineal múltiple:

Hi ha principalment dues aplicacions de la regressió lineal múltiple:

  • Efectivitat de la variable independent en la predicció:
  • Predicció de l'impacte dels canvis: