V predchádzajúcej téme sme sa dozvedeli o jednoduchej lineárnej regresii, kde sa na modelovanie premennej odpovede (Y) používa jedna premenná Independent/Predictor(X). Môžu však existovať rôzne prípady, v ktorých je premenná odozvy ovplyvnená viac ako jednou prediktorovou premennou; v takýchto prípadoch sa používa algoritmus viacnásobnej lineárnej regresie.
Viacnásobná lineárna regresia je navyše rozšírením jednoduchej lineárnej regresie, pretože na predpovedanie premennej odozvy je potrebných viac ako jedna prediktorová premenná. Môžeme to definovať ako:
Viacnásobná lineárna regresia je jedným z dôležitých regresných algoritmov, ktorý modeluje lineárny vzťah medzi jednou závislou spojitou premennou a viac ako jednou nezávislou premennou.
Príklad:
Predpoveď CO2emisie na základe veľkosti motora a počtu valcov v aute.
Niektoré kľúčové body o MLR:
- Pre MLR musí byť závislá alebo cieľová premenná (Y) spojitá/reálna, ale prediktor alebo nezávislá premenná môže mať spojitú alebo kategorickú formu.
- Každá premenná funkcie musí modelovať lineárny vzťah so závislou premennou.
- MLR sa pokúša prispôsobiť regresnú čiaru cez viacrozmerný priestor dátových bodov.
MLR rovnica:
Vo viacnásobnej lineárnej regresii je cieľová premenná (Y) lineárna kombinácia viacerých prediktorových premenných x1, X2, X3, ...,Xn. Keďže ide o vylepšenie jednoduchej lineárnej regresie, takže to isté platí pre rovnicu viacnásobnej lineárnej regresie, rovnica sa stáva:
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= premenná výstup/odpoveď
čo je rozhranie
b0, b1, b2, b3, bn....= Koeficienty modelu.
X1, X2, X3, X4,...= Rôzne nezávislé/vlastné premenné
Predpoklady pre viacnásobnú lineárnu regresiu:
- A lineárny vzťah by mala existovať medzi cieľovou a prediktorovou premennou.
- Regresné rezíduá musia byť normálne distribuované .
- MLR predpokladá málo resp žiadna multikolinearita (korelácia medzi nezávisle premennou) v dátach.
Implementácia modelu viacnásobnej lineárnej regresie pomocou Pythonu:
Na implementáciu MLR pomocou Pythonu máme nižšie uvedený problém:
Popis problému:
Máme súbor údajov 50 začínajúcich spoločností . Tento súbor údajov obsahuje päť hlavných informácií: Výdavky na výskum a vývoj, Výdavky na správu, Výdavky na marketing, Stav a Zisk za finančný rok . Naším cieľom je vytvoriť model, ktorý dokáže jednoducho určiť, ktorá firma má maximálny zisk a ktorý je najviac ovplyvňujúci faktor zisku firmy.
Keďže potrebujeme nájsť zisk, tak je to závislá premenná a ostatné štyri premenné sú nezávislé premenné. Nižšie sú uvedené hlavné kroky nasadenia modelu MLR:
Krok 1: Krok predbežného spracovania údajov:
Úplne prvý krok je
# 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')
Výkon: Získame súbor údajov ako:
Vo vyššie uvedenom výstupe môžeme jasne vidieť, že existuje päť premenných, v ktorých sú štyri premenné spojité a jedna je kategorická premenná.
#Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values
Výkon:
Out[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)
Ako vidíme vo vyššie uvedenom výstupe, posledný stĺpec obsahuje kategorické premenné, ktoré nie je vhodné použiť priamo na prispôsobenie modelu. Preto musíme túto premennú zakódovať.
Kódovanie falošných premenných:
Keďže máme jednu kategorickú premennú (State), ktorú nemožno priamo aplikovať na model, tak ju zakódujeme. Na zakódovanie kategoriálnej premennej do čísel použijeme LabelEncoder trieda. Ale to nestačí, pretože má stále nejaký vzťahový poriadok, ktorý môže vytvoriť nesprávny model. Aby sme tento problém odstránili, použijeme OneHotEncoder , ktorý vytvorí fiktívne premenné. Nižšie je 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()
Tu kódujeme iba jednu nezávislú premennú, ktorá je stavová, keďže ostatné premenné sú spojité.
reťazec na znak
Výkon:
Ako môžeme vidieť vo vyššie uvedenom výstupe, stĺpec stavu bol skonvertovaný na fiktívne premenné (0 a 1). Tu každý stĺpec fiktívnej premennej zodpovedá jednému štátu . Môžeme to skontrolovať porovnaním s pôvodným súborom údajov. Prvý stĺpec zodpovedá štát Kalifornia , druhý stĺpec zodpovedá štát Florida , a tretí stĺpec zodpovedá štát New York .
Poznámka:Nemali by sme používať všetky fiktívne premenné súčasne, takže musí byť o 1 menší ako celkový počet fiktívnych premenných, inak sa vytvorí pasca fiktívnych premenných.
- Teraz píšeme jeden riadok kódu, aby sme sa vyhli fiktívnej premennej pasci:
#avoiding the dummy variable trap: x = x[:, 1:]
Ak neodstránime prvú fiktívnu premennú, môže do modelu zaviesť multikolinearitu.
Ako môžeme vidieť na vyššie uvedenom výstupnom obrázku, prvý stĺpec bol odstránený.
- Teraz rozdelíme súbor údajov na tréningový a testovací súbor. Kód na to je uvedený nižšie:
# 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)
Vyššie uvedený kód rozdelí našu množinu údajov na trénovaciu a testovaciu množinu.
Výkon: Vyššie uvedený kód rozdelí množinu údajov na trénovaciu a testovaciu množinu. Výstup môžete skontrolovať kliknutím na možnosť prieskumníka premenných v Spyder IDE. Testovacia a tréningová súprava budú vyzerať ako na obrázku nižšie:
Testovacia sada:
Tréningová súprava:
Poznámka:V MLR nebudeme vykonávať škálovanie funkcií, pretože sa o to stará knižnica, takže to nemusíme robiť manuálne.
Krok: 2- Pripojenie nášho modelu MLR k tréningovej súprave:
Teraz sme dobre pripravili náš súbor údajov, aby sme mohli poskytnúť školenie, čo znamená, že náš regresný model prispôsobíme množine školení. Bude to podobné ako u nás Jednoduchý model lineárnej regresie. Kód na 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ýkon:
Out[9]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
Teraz sme úspešne trénovali náš model pomocou tréningového súboru údajov. V ďalšom kroku otestujeme výkon modelu pomocou testovacieho súboru údajov.
Krok: 3 – Predpoveď výsledkov testovacej sady:
Posledným krokom pre náš model je kontrola výkonu modelu. Urobíme to predpovedaním výsledku testovacej sady. Pre predikciu vytvoríme a y_pred vektor. Nižšie je uvedený kód:
#Predicting the Test set result; y_pred= regressor.predict(x_test)
Spustením vyššie uvedených riadkov kódu sa vygeneruje nový vektor pod možnosťou premenného prieskumníka. Náš model môžeme otestovať porovnaním predpokladaných hodnôt a hodnôt testovacej sady.
Výkon:
Vo vyššie uvedenom výstupe sme predpovedali sadu výsledkov a sadu testov. Výkonnosť modelu môžeme skontrolovať porovnaním týchto dvoch hodnôt index po indexe. Napríklad prvý index má predpokladanú hodnotu 103 015 $ zisk a test/reálna hodnota 103 282 $ zisk. Rozdiel je len v 267 dolárov , čo je dobrá predpoveď, takže konečne je tu náš model dokončený.
- Môžeme tiež skontrolovať skóre pre tréningový súbor údajov a testovací súbor údajov. Nižšie je uvedený kód:
print('Train Score: ', regressor.score(x_train, y_train)) print('Test Score: ', regressor.score(x_test, y_test))
Výkon: Skóre je:
Train Score: 0.9501847627493607 Test Score: 0.9347068473282446
Vyššie uvedené skóre hovorí, že náš model je 95% presný s tréningovým súborom údajov a 93% presný s testovacím súborom údajov.
prečiarknutie
Poznámka:V ďalšej téme uvidíme, ako môžeme zlepšiť výkon modelu pomocouSpätná elimináciaproces.
Aplikácie viacnásobnej lineárnej regresie:
Existujú hlavne dve aplikácie viacnásobnej lineárnej regresie:
- Účinnosť nezávislej premennej na predikciu:
- Predpovedanie vplyvu zmien: