logo

Multipel linjär regression

I det föregående ämnet har vi lärt oss om Simple Linear Regression, där en enda Independent/Predictor(X)-variabel används för att modellera svarsvariabeln (Y). Men det kan finnas olika fall där svarsvariabeln påverkas av mer än en prediktorvariabel; för sådana fall används algoritmen för multipel linjär regression.

Dessutom är multipel linjär regression en förlängning av enkel linjär regression eftersom det krävs mer än en prediktorvariabel för att förutsäga svarsvariabeln. Vi kan definiera det som:

Multipel linjär regression är en av de viktiga regressionsalgoritmerna som modellerar det linjära sambandet mellan en enda beroende kontinuerlig variabel och mer än en oberoende variabel.

Exempel:

Förutsägelse av CO2emission baserat på motorstorlek och antal cylindrar i en bil.

Några viktiga punkter om MLR:

  • För MLR måste den beroende eller målvariabeln(Y) vara den kontinuerliga/reala, men prediktorn eller den oberoende variabeln kan vara av kontinuerlig eller kategorisk form.
  • Varje funktionsvariabel måste modellera det linjära sambandet med den beroende variabeln.
  • MLR försöker passa en regressionslinje genom ett flerdimensionellt utrymme av datapunkter.

MLR ekvation:

I multipel linjär regression är målvariabeln (Y) en linjär kombination av flera prediktorvariabler x1, x2, x3, ...,xn. Eftersom det är en förbättring av enkel linjär regression, så samma sak tillämpas för den multipla linjära regressionsekvationen, blir ekvationen:

 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) 

Var,

Y= Output/Response variabel

python konvertera byte till sträng

b0, b1, b2, b3, bn....= Koefficienter för modellen.

x1, x2, x3, x4,...= Diverse Oberoende/funktionsvariabel

Antaganden för multipel linjär regression:

  • A linjärt förhållande bör finnas mellan mål- och prediktorvariablerna.
  • Regressionsresterna måste vara normalt fördelade .
  • MLR antar lite eller ingen multikollinearitet (korrelation mellan den oberoende variabeln) i data.

Implementering av multipel linjär regressionsmodell med Python:

För att implementera MLR med Python har vi följande problem:

Problembeskrivning:

Vi har en datauppsättning av 50 nystartade företag . Denna datauppsättning innehåller fem huvudinformation: FoU-utgifter, administrationsutgifter, marknadsföringsutgifter, stat och vinst för ett räkenskapsår . Vårt mål är att skapa en modell som enkelt kan avgöra vilket företag som har maximal vinst, och vilken som är den mest påverkande faktorn för ett företags vinst.

Eftersom vi behöver hitta vinsten, så är det den beroende variabeln, och de andra fyra variablerna är oberoende variabler. Nedan är de viktigaste stegen för att distribuera MLR-modellen:

    Steg för förbehandling av data Montering av MLR-modellen till träningssetet Förutsäga resultatet av testsetet

Steg-1: Dataförbehandling Steg:

Det allra första steget ärImportera bibliotek:Först kommer vi att importera biblioteket som kommer att hjälpa till att bygga modellen. Nedan är koden för det:

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 
    Importerar datauppsättning:Nu kommer vi att importera datasetet (50_CompList), som innehåller alla variabler. Nedan är koden för det:
 #importing datasets data_set= pd.read_csv(&apos;50_CompList.csv&apos;) 

Produktion: Vi kommer att få datamängden som:

Multipel linjär regression

I ovanstående utdata kan vi tydligt se att det finns fem variabler, där fyra variabler är kontinuerliga och en är kategorisk variabel.

java exempelkod
    Extrahera beroende och oberoende variabler:
 #Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values 

Produktion:

Ut[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) 

Som vi kan se i ovanstående utdata innehåller den sista kolumnen kategoriska variabler som inte är lämpliga att tillämpa direkt för att anpassa modellen. Så vi måste koda denna variabel.

Kodning av dummyvariabler:

Eftersom vi har en kategorisk variabel (State), som inte kan appliceras direkt på modellen, så kommer vi att koda den. För att koda den kategoriska variabeln till tal kommer vi att använda LabelEncoder klass. Men det är inte tillräckligt eftersom det fortfarande har en viss relationsordning, vilket kan skapa en felaktig modell. Så för att ta bort det här problemet kommer vi att använda OneHotEncoder , som skapar dummyvariablerna. Nedan finns kod för det:

 #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() 

Här kodar vi bara en oberoende variabel, som är tillstånd eftersom andra variabler är kontinuerliga.

Produktion:

Multipel linjär regression

Som vi kan se i ovanstående utdata har tillståndskolumnen omvandlats till dummyvariabler (0 och 1). Här motsvarar varje dummyvariabelkolumn den ena staten . Vi kan kontrollera genom att jämföra den med den ursprungliga datamängden. Den första kolumnen motsvarar delstaten Kalifornien , den andra kolumnen motsvarar Florida State , och den tredje kolumnen motsvarar Delstaten New York .

Notera:Vi bör inte använda alla dummyvariabler samtidigt, så det måste vara 1 mindre än det totala antalet dummyvariabler, annars kommer det att skapa en dummyvariabelfälla.

  • Nu skriver vi en enda kodrad bara för att undvika dummyvariabelfällan:
 #avoiding the dummy variable trap: x = x[:, 1:] 

Om vi ​​inte tar bort den första dummyvariabeln kan den introducera multikollinearitet i modellen.

Multipel linjär regression

Som vi kan se i utdatabilden ovan har den första kolumnen tagits bort.

  • Nu kommer vi att dela upp datasetet i tränings- och testset. Koden för detta ges nedan:
 # 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) 

Ovanstående kod kommer att dela upp vår datauppsättning i en träningsuppsättning och testuppsättning.

Produktion: Ovanstående kod kommer att dela upp datauppsättningen i träningsuppsättning och testuppsättning. Du kan kontrollera resultatet genom att klicka på alternativet för variabel utforskare som ges i Spyder IDE. Testsetet och träningssetet kommer att se ut som bilden nedan:

Testset:

Multipel linjär regression

Träningsset:

Multipel linjär regression

Notera:I MLR kommer vi inte att göra funktionsskalning eftersom det tas om hand av biblioteket, så vi behöver inte göra det manuellt.

Steg: 2- Anpassa vår MLR-modell till träningssetet:

Nu har vi väl förberett vår datauppsättning för att tillhandahålla utbildning, vilket innebär att vi kommer att anpassa vår regressionsmodell till träningsuppsättningen. Det kommer att likna som vi gjorde i Enkel linjär regressionmodell. Koden för detta kommer att vara:

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

Produktion:

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

Nu har vi framgångsrikt tränat vår modell med hjälp av träningsdatauppsättningen. I nästa steg kommer vi att testa modellens prestanda med hjälp av testdatauppsättningen.

vlc ladda ner youtube

Steg: 3- Förutsägelse av testuppsättningsresultat:

Det sista steget för vår modell är att kontrollera modellens prestanda. Vi kommer att göra det genom att förutsäga testuppsättningens resultat. För förutsägelse kommer vi att skapa en y_pred vektor. Nedan är koden för det:

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

Genom att exekvera ovanstående kodrader kommer en ny vektor att genereras under alternativet för variabel utforskare. Vi kan testa vår modell genom att jämföra de predikterade värdena och testuppsättningsvärdena.

Produktion:

Multipel linjär regression

I utgången ovan har vi förutspått resultatuppsättning och testuppsättning. Vi kan kontrollera modellens prestanda genom att jämföra dessa två värden index för index. Till exempel har det första indexet ett förutsagt värde på 103 015 $ vinst och test/realvärde av 103282 $ vinst. Skillnaden är bara av 267 USD , vilket är en bra förutsägelse, så äntligen är vår modell färdig här.

  • Vi kan också kontrollera poängen för träningsdataset och testdataset. Nedan är koden för det:
 print(&apos;Train Score: &apos;, regressor.score(x_train, y_train)) print(&apos;Test Score: &apos;, regressor.score(x_test, y_test)) 

Produktion: Poängen är:

 Train Score: 0.9501847627493607 Test Score: 0.9347068473282446 

Ovanstående poäng visar att vår modell är 95 % korrekt med träningsdatauppsättningen och 93 % korrekt med testdatauppsättningen.

Notera:I nästa ämne kommer vi att se hur vi kan förbättra prestandan för modellen med hjälp avEliminering bakåtbearbeta.

Tillämpningar av multipel linjär regression:

Det finns huvudsakligen två tillämpningar av multipel linjär regression:

  • Effektiviteten av oberoende variabel vid förutsägelse:
  • Förutsäga effekterna av förändringar: