logo

Vícenásobná lineární regrese

V předchozím tématu jsme se dozvěděli o jednoduché lineární regresi, kde se k modelování proměnné odezvy (Y) používá jediná proměnná Independent/Predictor(X). Mohou však existovat různé případy, kdy je proměnná odezvy ovlivněna více než jednou predikční proměnnou; pro takové případy se používá algoritmus vícenásobné lineární regrese.

Vícenásobná lineární regrese je navíc rozšířením jednoduché lineární regrese, protože k predikci proměnné odezvy je zapotřebí více než jedna prediktorová proměnná. Můžeme to definovat jako:

Vícenásobná lineární regrese je jedním z důležitých regresních algoritmů, který modeluje lineární vztah mezi jednou závislou spojitou proměnnou a více než jednou nezávisle proměnnou.

Příklad:

Předpověď CO2emise na základě velikosti motoru a počtu válců v autě.

Některé klíčové body o MLR:

  • Pro MLR musí být závislá nebo cílová proměnná (Y) spojitá/skutečná, ale prediktor nebo nezávislá proměnná může mít spojitou nebo kategorickou formu.
  • Každá proměnná funkce musí modelovat lineární vztah se závislou proměnnou.
  • MLR se snaží proložit regresní přímku přes vícerozměrný prostor datových bodů.

rovnice MLR:

Ve vícenásobné lineární regresi je cílová proměnná (Y) lineární kombinací více prediktorových proměnných x1, X2, X3, ...,Xn. Protože se jedná o vylepšení jednoduché lineární regrese, takže totéž platí pro rovnici vícenásobné lineární regrese, rovnice se stává:

 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) 

Kde,

Y= proměnná výstup/odpověď

náhodné číslo mezi 1 a 10

b0, b1, b2, b3, bn....= Koeficienty modelu.

X1, X2, X3, X4,...= Různé Nezávislá/vlastní proměnná

Předpoklady pro vícenásobnou lineární regresi:

  • A lineární vztah by měla existovat mezi cílovou a prediktorovou proměnnou.
  • Regresní rezidua musí být normálně distribuované .
  • MLR předpokládá málo resp žádná multikolinearita (korelaci mezi nezávisle proměnnou) v datech.

Implementace modelu vícenásobné lineární regrese pomocí Pythonu:

Pro implementaci MLR pomocí Pythonu máme níže uvedený problém:

Popis problému:

Máme datovou sadu 50 začínajících společností . Tato datová sada obsahuje pět hlavních informací: Výdaje na výzkum a vývoj, výdaje na správu, výdaje na marketing, stát a zisk za finanční rok . Naším cílem je vytvořit model, který dokáže snadno určit, která společnost má maximální zisk a který je nejvíce ovlivňujícím faktorem zisku společnosti.

Protože potřebujeme najít Zisk, tak je to závislá proměnná a ostatní čtyři proměnné jsou nezávislé proměnné. Níže jsou uvedeny hlavní kroky nasazení modelu MLR:

    Kroky předběžného zpracování dat Osazení modelu MLR do tréninkové sestavy Předpovídání výsledku testovací sady

Krok 1: Krok předběžného zpracování dat:

Úplně prvním krokem jeImport knihoven:Nejprve naimportujeme knihovnu, která nám pomůže při sestavování modelu. Níže je pro něj uveden kód:

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 
    Import datové sady:Nyní naimportujeme dataset(50_CompList), který obsahuje všechny proměnné. Níže je pro něj uveden kód:
 #importing datasets data_set= pd.read_csv(&apos;50_CompList.csv&apos;) 

Výstup: Dostaneme datovou sadu jako:

Vícenásobná lineární regrese

Ve výše uvedeném výstupu můžeme jasně vidět, že existuje pět proměnných, ve kterých jsou čtyři proměnné spojité a jedna je kategorická proměnná.

    Extrahování závislých a nezávislých proměnných:
 #Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values 

Výstup:

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

Jak vidíme ve výše uvedeném výstupu, poslední sloupec obsahuje kategorické proměnné, které není vhodné přímo použít pro přizpůsobení modelu. Musíme tedy tuto proměnnou zakódovat.

Kódování fiktivních proměnných:

Jelikož máme jednu kategorickou proměnnou (State), kterou nelze přímo aplikovat na model, tak ji zakódujeme. Pro zakódování kategoriální proměnné do čísel použijeme LabelEncoder třída. Ale to nestačí, protože má stále nějaký vztahový řád, což může vytvořit špatný model. Abychom tento problém odstranili, použijeme OneHotEncoder , který vytvoří fiktivní proměnné. Níže je pro něj uveden kód:

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

Zde kódujeme pouze jednu nezávislou proměnnou, která je stavová, protože ostatní proměnné jsou spojité.

hloubka algoritmu první vyhledávání

Výstup:

Vícenásobná lineární regrese

Jak můžeme vidět na výše uvedeném výstupu, sloupec stavu byl převeden na fiktivní proměnné (0 a 1). Zde každý sloupec fiktivní proměnné odpovídá jednomu stavu . Můžeme to zkontrolovat porovnáním s původní datovou sadou. První sloupec odpovídá stát Kalifornie , druhý sloupec odpovídá stát Florida , a třetí sloupec odpovídá stát New York .

Poznámka:Neměli bychom používat všechny fiktivní proměnné současně, takže musí být o 1 menší než celkový počet fiktivních proměnných, jinak vytvoří past fiktivní proměnné.

  • Nyní píšeme jeden řádek kódu, abychom se vyhnuli fiktivní pasti proměnných:
 #avoiding the dummy variable trap: x = x[:, 1:] 

Pokud neodstraníme první fiktivní proměnnou, může do modelu zavést multikolinearitu.

Vícenásobná lineární regrese

Jak můžeme vidět na výše uvedeném výstupním obrázku, první sloupec byl odstraněn.

  • Nyní rozdělíme datovou sadu na tréninkovou a testovací sadu. Kód pro to je uveden níže:
 # 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) 

Výše uvedený kód rozdělí naši datovou sadu na tréninkovou a testovací sadu.

Výstup: Výše uvedený kód rozdělí datovou sadu na tréninkovou sadu a testovací sadu. Výstup můžete zkontrolovat kliknutím na možnost průzkumníka proměnné v IDE Spyder. Testovací a tréninková sada bude vypadat jako na obrázku níže:

Testovací sada:

Vícenásobná lineární regrese

Tréninkový set:

Vícenásobná lineární regrese

Poznámka:V MLR nebudeme provádět škálování funkcí, protože se o to stará knihovna, takže to nemusíme dělat ručně.

Krok: 2- Přizpůsobení našeho modelu MLR k tréninkové sadě:

Nyní jsme dobře připravili naši datovou sadu, abychom mohli poskytnout školení, což znamená, že přizpůsobíme náš regresní model trénovací sadě. Bude to podobné jako u nás Jednoduchý model lineární regrese. Kód pro to bude:

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

Výstup:

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

Nyní jsme úspěšně trénovali náš model pomocí trénovací datové sady. V dalším kroku otestujeme výkon modelu pomocí testovací datové sady.

Krok: 3 – Předpověď výsledků testovací sady:

Posledním krokem pro náš model je kontrola výkonu modelu. Uděláme to tak, že předpovíme výsledek testovací sady. Pro predikci vytvoříme a y_před vektor. Níže je pro něj uveden kód:

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

Spuštěním výše uvedených řádků kódu bude vygenerován nový vektor pod volbou proměnné explorer. Náš model můžeme otestovat porovnáním předpokládaných hodnot a hodnot testovací sady.

Výstup:

Vícenásobná lineární regrese

Ve výše uvedeném výstupu jsme předpověděli sadu výsledků a sadu testů. Výkon modelu můžeme zkontrolovat porovnáním těchto dvou hodnot index po indexu. Například první index má předpokládanou hodnotu 103 015 $ zisk a zkušební/reálná hodnota 103282 $ zisk. Rozdíl je pouze v 267 dolarů , což je dobrá předpověď, takže konečně je zde náš model dokončen.

  • Můžeme také zkontrolovat skóre pro tréninkovou datovou sadu a testovací datovou sadu. Níže je pro něj uveden kód:
 print(&apos;Train Score: &apos;, regressor.score(x_train, y_train)) print(&apos;Test Score: &apos;, regressor.score(x_test, y_test)) 

Výstup: Skóre je:

 Train Score: 0.9501847627493607 Test Score: 0.9347068473282446 

Výše uvedené skóre říká, že náš model je 95% přesný s trénovací datovou sadou a 93% přesný s testovací datovou sadou.

pro smyčku java

Poznámka:V dalším tématu uvidíme, jak můžeme zlepšit výkon modelu pomocíZpětná eliminaceproces.

Aplikace vícenásobné lineární regrese:

Existují především dvě aplikace vícenásobné lineární regrese:

  • Účinnost nezávislé proměnné na predikci:
  • Předpovídání dopadu změn: