Edellisessä aiheessa olemme oppineet yksinkertaisesta lineaarisesta regressiosta, jossa vastemuuttujan (Y) mallintamiseen käytetään yhtä Independent/Predictor(X)-muuttujaa. Mutta voi olla useita tapauksia, joissa vastemuuttujaan vaikuttaa useampi kuin yksi ennustajamuuttuja; tällaisissa tapauksissa käytetään Multiple Linear Regression -algoritmia.
Lisäksi Multiple Linear Regression on yksinkertaisen lineaarisen regression laajennus, koska vastemuuttujan ennustamiseen tarvitaan useampi kuin yksi ennustajamuuttuja. Voimme määritellä sen seuraavasti:
Multiple Linear Regression on yksi tärkeimmistä regressioalgoritmeista, joka mallintaa yhden riippuvan jatkuvan muuttujan ja useamman kuin yhden riippumattoman muuttujan välistä lineaarista suhdetta.
Esimerkki:
CO:n ennuste2päästöt perustuvat moottorin kokoon ja auton sylinterien lukumäärään.
Muutamia keskeisiä kohtia MLR:stä:
- MLR:ssä riippuvan tai kohdemuuttujan (Y) on oltava jatkuva/tosi, mutta ennustaja tai riippumaton muuttuja voi olla jatkuvaa tai kategorista muotoa.
- Jokaisen ominaismuuttujan on mallinnettava lineaarinen suhde riippuvaisen muuttujan kanssa.
- MLR yrittää sovittaa regressioviivan datapisteiden moniulotteisen avaruuden läpi.
MLR-yhtälö:
Multiple lineaarisessa regressiossa kohdemuuttuja(Y) on useiden ennustajamuuttujien x lineaarinen yhdistelmä.1, x2, x3, ..., xn. Koska se on yksinkertaisen lineaarisen regression parannus, joten samaa sovelletaan usean lineaarisen regression yhtälöön, yhtälöstä tulee:
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)
Missä,
Y = Tulos/vaste-muuttuja
10 1 miljoonasta
b0, b1, b2, b3, bn....= Mallin kertoimet.
x1, x2, x3, x4,...= Eri riippumaton/ominaisuusmuuttuja
Usean lineaarisen regression oletukset:
- A lineaarinen suhde Target- ja ennustajamuuttujien välillä tulee olla.
- Regressiojäännösten on oltava normaalisti jakautunut .
- MLR olettaa vähän tai ei multikollineaarisuutta (riippumattoman muuttujan välinen korrelaatio) tiedoissa.
Usean lineaarisen regressiomallin toteutus Pythonilla:
MLR:n toteuttamiseksi Pythonilla meillä on alla oleva ongelma:
Ongelman kuvaus:
Meillä on tietojoukko 50 aloittavaa yritystä . Tämä tietojoukko sisältää viisi päätietoa: T&K-kulut, hallintokulut, markkinointikulut, tila ja voitto tilikaudelta . Tavoitteenamme on luoda malli, jonka avulla voidaan helposti määrittää, millä yrityksellä on suurin voitto ja mikä on yrityksen tulokseen eniten vaikuttava tekijä.
Koska meidän on löydettävä voitto, se on riippuvainen muuttuja, ja muut neljä muuttujaa ovat riippumattomia muuttujia. Alla on MLR-mallin käyttöönoton päävaiheet:
Vaihe 1: Tietojen esikäsittelyvaihe:
Aivan ensimmäinen askel on
# 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')
Lähtö: Saamme tietojoukon seuraavasti:
Yllä olevassa tuotoksessa näemme selvästi, että muuttujia on viisi, joista neljä on jatkuvia ja yksi kategorinen muuttuja.
#Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values
Lähtö:
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)
Kuten yllä olevasta tuotoksesta nähdään, viimeinen sarake sisältää kategorisia muuttujia, joita ei voida soveltaa suoraan mallin sovittamiseen. Joten meidän on koodattava tämä muuttuja.
Dummy-muuttujien koodaus:
Koska meillä on yksi kategorinen muuttuja (State), jota ei voi suoraan soveltaa malliin, niin koodaamme sen. Kategorisen muuttujan koodaamiseksi numeroiksi käytämme LabelEncoder luokkaa. Mutta se ei riitä, koska siinä on edelleen jokin relaatiojärjestys, joka voi luoda väärän mallin. Joten tämän ongelman poistamiseksi käytämme OneHotEncoder , joka luo valemuuttujat. Alla on koodi sille:
#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()
Tässä koodaamme vain yhden riippumattoman muuttujan, joka on tila, koska muut muuttujat ovat jatkuvia.
Lähtö:
Kuten yllä olevasta lähdöstä näemme, tilasarake on muunnettu valemuuttujiksi (0 ja 1). Tässä jokainen valemuuttujasarake vastaa yhtä tilaa . Voimme tarkistaa vertaamalla sitä alkuperäiseen tietojoukkoon. Ensimmäinen sarake vastaa Kalifornian osavaltio , toinen sarake vastaa Floridan osavaltio , ja kolmas sarake vastaa New Yorkin osavaltio .
Huomautus:Kaikkia valemuuttujia ei pitäisi käyttää samanaikaisesti, joten sen on oltava 1 pienempi kuin valemuuttujien kokonaismäärä, muuten se luo valemuuttujien trap:n.
- Nyt kirjoitamme yhden rivin koodia vain välttääksemme valemuuttujien ansa:
#avoiding the dummy variable trap: x = x[:, 1:]
Jos emme poista ensimmäistä valemuuttujaa, se saattaa tuoda malliin multikollineaarisuuden.
Kuten yllä olevasta tulostekuvasta näemme, ensimmäinen sarake on poistettu.
svm
- Nyt jaamme tietojoukon harjoitus- ja testijoukkoon. Tämän koodi on alla:
# 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)
Yllä oleva koodi jakaa tietojoukkomme harjoitusjoukoksi ja testijoukoksi.
Lähtö: Yllä oleva koodi jakaa tietojoukon harjoitusjoukoksi ja testijoukoksi. Voit tarkistaa lähdön napsauttamalla Spyder IDE:ssä annettua muuttujien tutkija -vaihtoehtoa. Testisarja ja harjoitussetti näyttävät alla olevan kuvan tältä:
Testisarja:
kuinka int muunnetaan merkkijonoksi
Treenisarja:
Huomautus:MLR:ssä emme tee ominaisuuksien skaalausta, koska kirjasto huolehtii siitä, joten meidän ei tarvitse tehdä sitä manuaalisesti.
Vaihe: 2 - MLR-mallimme sovittaminen harjoitussarjaan:
Nyt olemme valmistaneet tietojoukkomme hyvin koulutuksen tarjoamista varten, mikä tarkoittaa, että sovitamme regressiomallimme koulutussarjaan. Se on samanlainen kuin teimme vuonna Yksinkertainen lineaarinen regressiomalli. Koodi tälle tulee olemaan:
#Fitting the MLR model to the training set: from sklearn.linear_model import LinearRegression regressor= LinearRegression() regressor.fit(x_train, y_train)
Lähtö:
Out[9]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
Nyt olemme onnistuneesti kouluttaneet mallimme koulutustietojoukon avulla. Seuraavassa vaiheessa testaamme mallin suorituskykyä testitietojoukon avulla.
Vaihe: 3 – Testisarjan tulosten ennustaminen:
Viimeinen vaihe mallillemme on mallin suorituskyvyn tarkistaminen. Teemme sen ennustamalla testisarjan tuloksen. Ennustusta varten luomme a y_pred vektori. Alla on koodi sille:
#Predicting the Test set result; y_pred= regressor.predict(x_test)
Suorittamalla yllä olevat koodirivit, uusi vektori luodaan muuttujan explorer-vaihtoehdon alle. Voimme testata malliamme vertaamalla ennustettuja arvoja ja testijoukkoarvoja.
Lähtö:
Yllä olevassa lähdössä olemme ennustaneet tulosjoukon ja testijoukon. Voimme tarkistaa mallin suorituskyvyn vertaamalla näitä kahta arvoindeksiä indekseiltä. Esimerkiksi ensimmäisellä indeksillä on ennustettu arvo 103 015 $ voitto ja testi/todellinen arvo 103 282 $ voitto. Ero on vain 267 dollaria , mikä on hyvä ennuste, joten mallimme on vihdoin valmis täällä.
- Voimme myös tarkistaa harjoitustietojoukon ja testitietojoukon pisteet. Alla on koodi sille:
print('Train Score: ', regressor.score(x_train, y_train)) print('Test Score: ', regressor.score(x_test, y_test))
Lähtö: Pisteet ovat:
Train Score: 0.9501847627493607 Test Score: 0.9347068473282446
Yllä oleva pistemäärä kertoo, että mallimme on 95 % tarkka harjoitustietojoukon kanssa ja 93 % tarkka testitietojoukon kanssa.
Huomautus:Seuraavassa aiheessa näemme, kuinka voimme parantaa mallin suorituskykyä käyttämälläTaaksepäin eliminointikäsitellä asiaa.
Usean lineaarisen regression sovellukset:
Useita lineaarisia regressioita on pääasiassa kaksi:
- Riippumattoman muuttujan tehokkuus ennusteeseen:
- Muutosten vaikutusten ennustaminen: