U prethodnoj smo temi učili o jednostavnoj linearnoj regresiji, gdje se jedna varijabla Nezavisna/prediktorska (X) koristi za modeliranje varijable odgovora (Y). Ali mogu postojati različiti slučajevi u kojima na varijablu odgovora utječe više od jedne varijable prediktora; za takve slučajeve koristi se algoritam višestruke linearne regresije.
Štoviše, višestruka linearna regresija je proširenje jednostavne linearne regresije budući da je potrebno više od jedne prediktorske varijable za predviđanje varijable odgovora. Možemo ga definirati kao:
Višestruka linearna regresija jedan je od važnih regresijskih algoritama koji modelira linearni odnos između jedne ovisne kontinuirane varijable i više od jedne neovisne varijable.
Primjer:
Predviđanje CO2emisija temeljena na veličini motora i broju cilindara u automobilu.
Neke ključne točke o MLR-u:
- Za MLR, zavisna ili ciljna varijabla (Y) mora biti kontinuirana/stvarna, ali prediktorska ili nezavisna varijabla može biti kontinuiranog ili kategoričkog oblika.
- Svaka značajka varijable mora modelirati linearni odnos sa zavisnom varijablom.
- MLR pokušava uklopiti regresijsku liniju kroz višedimenzionalni prostor podatkovnih točaka.
MLR jednadžba:
U višestrukoj linearnoj regresiji, ciljna varijabla (Y) je linearna kombinacija više varijabli prediktora x1, x2, x3, ...,xn. Budući da je to poboljšanje jednostavne linearne regresije, pa se isto primjenjuje i na jednadžbu višestruke linearne regresije, jednadžba postaje:
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)
Gdje,
Y= Varijabla izlaza/odgovora
xml komentar
b0, b1, b2, b3, bn....= Koeficijenti modela.
x1, x2, x3, x4,...= Razne nezavisne/značajne varijable
Pretpostavke za višestruku linearnu regresiju:
- A linearni odnos treba postojati između varijabli cilja i prediktora.
- Regresijski reziduali moraju biti normalno raspoređena .
- MLR pretpostavlja malo ili nema multikolinearnosti (korelacija između nezavisne varijable) u podacima.
Implementacija modela višestruke linearne regresije pomoću Pythona:
Da bismo implementirali MLR pomoću Pythona, imamo sljedeći problem:
Opis problema:
Imamo skup podataka od 50 start-up tvrtki . Ovaj skup podataka sadrži pet glavnih informacija: Potrošnja za istraživanje i razvoj, administrativna potrošnja, marketinška potrošnja, stanje i dobit za financijsku godinu . Cilj nam je stvoriti model po kojemu se lako može odrediti koja tvrtka ima maksimalnu dobit, a koji čimbenik najviše utječe na dobit tvrtke.
Budući da trebamo pronaći profit, to je zavisna varijabla, a ostale četiri varijable su nezavisne varijable. U nastavku su navedeni glavni koraci implementacije MLR modela:
Korak 1: Korak prethodne obrade podataka:
Prvi korak 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')
Izlaz: Dobit ćemo skup podataka kao:
U gornjem izlazu možemo jasno vidjeti da postoji pet varijabli, od kojih su četiri kontinuirane, a jedna je kategorička varijabla.
#Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values
Izlaz:
Van[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)
Kao što možemo vidjeti u gornjem izlazu, posljednji stupac sadrži kategoričke varijable koje nisu prikladne za izravnu primjenu za prilagođavanje modela. Dakle, moramo kodirati ovu varijablu.
Kodiranje lažnih varijabli:
Kako imamo jednu kategoričku varijablu (Stanje), koja se ne može izravno primijeniti na model, pa ćemo je kodirati. Za kodiranje kategoričke varijable u brojeve, koristit ćemo LabelEncoder razreda. Ali to nije dovoljno jer još uvijek ima neki relacijski poredak, što može stvoriti pogrešan model. Dakle, kako bismo uklonili ovaj problem, koristit ćemo se OneHotEncoder , koji će stvoriti lažne varijable. Ispod je kod za to:
#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()
Ovdje kodiramo samo jednu nezavisnu varijablu, koja je stanje jer su ostale varijable kontinuirane.
što je mac os
Izlaz:
Kao što možemo vidjeti u gornjem izlazu, stupac stanja je pretvoren u lažne varijable (0 i 1). Ovdje svaki stupac lažne varijable odgovara jednom stanju . Možemo provjeriti usporedbom s izvornim skupom podataka. Prvi stupac odgovara država Kalifornija , drugi stupac odgovara Država Florida , a treći stupac odgovara Država New York .
Bilješka:Ne bismo trebali koristiti sve lažne varijable u isto vrijeme, tako da mora biti 1 manje od ukupnog broja lažnih varijabli, inače će stvoriti zamku lažne varijable.
- Sada pišemo jednu liniju koda samo da izbjegnemo zamku lažne varijable:
#avoiding the dummy variable trap: x = x[:, 1:]
Ako ne uklonimo prvu lažnu varijablu, to može uvesti multikolinearnost u model.
Kao što možemo vidjeti na gornjoj izlaznoj slici, prvi stupac je uklonjen.
- Sada ćemo skup podataka podijeliti na skup za obuku i test. Kôd za ovo naveden je u nastavku:
# 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)
Gornji kod će podijeliti naš skup podataka u skup za obuku i skup za testiranje.
Izlaz: Gornji kod će podijeliti skup podataka u skup za obuku i skup za testiranje. Možete provjeriti izlaz klikom na opciju istraživača varijabli danu u Spyder IDE. Skup za testiranje i skup za obuku izgledat će kao na slici ispod:
Test set:
Set za trening:
Bilješka:U MLR-u nećemo raditi skaliranje značajki jer se za to brine biblioteka, tako da to ne moramo raditi ručno.
Korak: 2- Prilagodba našeg MLR modela na set za obuku:
Sada smo dobro pripremili naš skup podataka kako bismo omogućili obuku, što znači da ćemo prilagoditi naš regresijski model skupu za obuku. Bit će slično kao što smo radili u Jednostavni model linearne regresije. Kod za ovo će biti:
#Fitting the MLR model to the training set: from sklearn.linear_model import LinearRegression regressor= LinearRegression() regressor.fit(x_train, y_train)
Izlaz:
Out[9]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
Sada smo uspješno obučili naš model pomoću skupa podataka za obuku. U sljedećem koraku testirat ćemo izvedbu modela pomoću testnog skupa podataka.
Korak: 3- Predviđanje rezultata testa:
Zadnji korak za naš model je provjera performansi modela. To ćemo učiniti predviđanjem rezultata skupa testova. Za predviđanje ćemo stvoriti a y_pred vektor. Ispod je kod za to:
#Predicting the Test set result; y_pred= regressor.predict(x_test)
Izvršavanjem gornjih redaka koda, novi vektor će se generirati pod opcijom istraživača varijabli. Naš model možemo testirati usporedbom predviđenih vrijednosti i vrijednosti testnog skupa.
Izlaz:
U gornjem izlazu imamo predviđeni skup rezultata i testni skup. Učinkovitost modela možemo provjeriti usporedbom ove dvije vrijednosti indeks po indeks. Na primjer, prvi indeks ima predviđenu vrijednost od 103 015 dolara dobit i test/real value of 103 282 dolara dobit. Razlika je samo u 267 dolara , što je dobro predviđanje, pa je konačno naš model ovdje dovršen.
- Također možemo provjeriti rezultat za skup podataka za obuku i skup podataka za testiranje. Ispod je kod za to:
print('Train Score: ', regressor.score(x_train, y_train)) print('Test Score: ', regressor.score(x_test, y_test))
Izlaz: Rezultat je:
Train Score: 0.9501847627493607 Test Score: 0.9347068473282446
Gornji rezultat govori da je naš model 95% točan sa skupom podataka za obuku i 93% točan sa testnim skupom podataka.
pretvori str u int
Bilješka:U sljedećoj temi vidjet ćemo kako možemo poboljšati performanse modela pomoćuEliminacija unazadpostupak.
Primjene višestruke linearne regresije:
Postoje uglavnom dvije primjene višestruke linearne regresije:
- Učinkovitost nezavisne varijable na predviđanje:
- Predviđanje utjecaja promjena: