logo

Daugkartinė tiesinė regresija

Ankstesnėje temoje sužinojome apie paprastą tiesinę regresiją, kai atsako kintamajam (Y) modeliuoti naudojamas vienas nepriklausomas/numatytojas(X) kintamasis. Tačiau gali būti įvairių atvejų, kai atsako kintamąjį veikia daugiau nei vienas numatymo kintamasis; tokiais atvejais naudojamas Multiple Linear Regression algoritmas.

Be to, daugialypė linijinė regresija yra paprastos tiesinės regresijos išplėtimas, nes norint numatyti atsako kintamąjį reikia daugiau nei vieno prognozuojamojo kintamojo. Mes galime jį apibrėžti taip:

Daugkartinė tiesinė regresija yra vienas iš svarbių regresijos algoritmų, modeliuojančių tiesinį ryšį tarp vieno priklausomo nuolatinio kintamojo ir daugiau nei vieno nepriklausomo kintamojo.

Pavyzdys:

CO prognozė2išmetamųjų teršalų kiekis, pagrįstas variklio dydžiu ir automobilio cilindrų skaičiumi.

Kai kurie pagrindiniai dalykai apie MLR:

  • MLR priklausomasis arba tikslinis kintamasis (Y) turi būti tęstinis / tikrasis, tačiau nuspėjamasis arba nepriklausomas kintamasis gali būti tęstinės arba kategoriškos formos.
  • Kiekvienas požymio kintamasis turi modeliuoti tiesinį ryšį su priklausomu kintamuoju.
  • MLR bando pritaikyti regresijos liniją per daugiamatę duomenų taškų erdvę.

MLR lygtis:

Naudojant kelių tiesinę regresiją, tikslinis kintamasis (Y) yra tiesinis kelių prognozuojamųjų kintamųjų x derinys1, x2, x3, ..., xn. Kadangi tai yra paprastos tiesinės regresijos patobulinimas, taigi tas pats taikoma ir daugialypės tiesinės regresijos lygčiai, lygtis tampa:

 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) 

kur,

Y = Išvesties / atsako kintamasis

kilpoms java

b0, b1, b2, b3, bn....= Modelio koeficientai.

x1, x2, x3, x4,...= Įvairūs nepriklausomi/ypatybių kintamieji

Kelių tiesinės regresijos prielaidos:

  • A linijinis ryšys turėtų būti tarp tikslinio ir prognozuojamojo kintamųjų.
  • Regresijos likučiai turi būti paprastai paskirstytas .
  • MLR prisiima mažai arba nėra daugiakolineariškumo (koreliacija tarp nepriklausomo kintamojo) duomenyse.

Kelių tiesinės regresijos modelio įgyvendinimas naudojant Python:

Norėdami įdiegti MLR naudodami Python, turime šią problemą:

Problemos aprašymas:

Mes turime duomenų rinkinį 50 pradedančiųjų įmonių . Šiame duomenų rinkinyje yra penkios pagrindinės informacijos: Mokslinių tyrimų ir plėtros išlaidos, administravimo išlaidos, rinkodaros išlaidos, būsena ir finansinių metų pelnas . Mūsų tikslas – sukurti modelį, pagal kurį būtų galima lengvai nustatyti, kuri įmonė turi maksimalų pelną, o kuris veiksnys labiausiai įtakoja įmonės pelną.

Kadangi mums reikia rasti pelną, tai jis yra priklausomas kintamasis, o kiti keturi kintamieji yra nepriklausomi kintamieji. Toliau pateikiami pagrindiniai MLR modelio diegimo žingsniai:

    Išankstinio duomenų apdorojimo etapai MLR modelio pritaikymas prie treniruočių komplekto Bandymo rinkinio rezultato numatymas

1 veiksmas: išankstinio duomenų apdorojimo veiksmas:

valdymo struktūrų python

Pats pirmas žingsnis yraBibliotekų importavimas:Pirmiausia importuosime biblioteką, kuri padės sukurti modelį. Žemiau yra jo kodas:

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd 
    Importuojamas duomenų rinkinys:Dabar importuosime duomenų rinkinį (50_CompList), kuriame yra visi kintamieji. Žemiau yra jo kodas:
 #importing datasets data_set= pd.read_csv(&apos;50_CompList.csv&apos;) 

Išvestis: Duomenų rinkinį gausime taip:

Daugkartinė tiesinė regresija

Aukščiau pateiktame išvestyje aiškiai matome, kad yra penki kintamieji, kurių keturi kintamieji yra tęstiniai, o vienas yra kategorinis kintamasis.

    Priklausomų ir nepriklausomų kintamųjų ištraukimas:
 #Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values 

Išvestis:

Išeina[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) 

Kaip matome aukščiau pateiktame išvestyje, paskutiniame stulpelyje yra kategoriniai kintamieji, kurie nėra tinkami tiesiogiai pritaikyti modeliui. Taigi turime užkoduoti šį kintamąjį.

Dummy kintamųjų kodavimas:

Kadangi turime vieną kategorinį kintamąjį (State), kurio negalima tiesiogiai pritaikyti modeliui, todėl jį užkoduosime. Norėdami koduoti kategorinį kintamąjį į skaičius, naudosime LabelEncoder klasė. Tačiau to nepakanka, nes ji vis dar turi tam tikrą santykinę tvarką, kuri gali sukurti neteisingą modelį. Taigi, norėdami pašalinti šią problemą, naudosime OneHotEncoder , kuris sukurs netikrus kintamuosius. Žemiau yra jo kodas:

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

Čia mes užkoduojame tik vieną nepriklausomą kintamąjį, kuris yra būsena, nes kiti kintamieji yra tęstiniai.

Išvestis:

Daugkartinė tiesinė regresija

Kaip matome aukščiau pateiktame išvestyje, būsenos stulpelis buvo konvertuotas į netikrus kintamuosius (0 ir 1). Čia kiekvienas netikras kintamojo stulpelis atitinka vieną būseną . Galime patikrinti palyginę jį su pradiniu duomenų rinkiniu. Pirmasis stulpelis atitinka Kalifornijos valstija , antrasis stulpelis atitinka Floridos valstija , o trečiasis stulpelis atitinka Niujorko valstija .

Pastaba:Neturėtume naudoti visų netikrų kintamųjų vienu metu, todėl jis turi būti 1 mažesnis nei bendras netikrų kintamųjų skaičius, kitaip bus sukurta netikrų kintamųjų spąstai.

  • Dabar rašome vieną kodo eilutę, kad išvengtume netikrų kintamųjų spąstų:
 #avoiding the dummy variable trap: x = x[:, 1:] 

Jei nepašalinsime pirmojo netikro kintamojo, tai modelyje gali įvesti daugiakolineariškumą.

Daugkartinė tiesinė regresija

Kaip matome aukščiau esančiame išvesties paveikslėlyje, pirmasis stulpelis buvo pašalintas.

  • Dabar mes padalinsime duomenų rinkinį į mokymo ir bandymo rinkinį. Tam skirtas kodas pateiktas žemiau:
 # 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) 

Aukščiau pateiktas kodas mūsų duomenų rinkinį padalins į mokymo rinkinį ir bandymo rinkinį.

Išvestis: Aukščiau pateiktas kodas padalins duomenų rinkinį į mokymo rinkinį ir bandymo rinkinį. Galite patikrinti išvestį spustelėdami kintamųjų naršyklės parinktį, pateiktą Spyder IDE. Bandymo rinkinys ir treniruočių rinkinys atrodys taip, kaip toliau pateiktame paveikslėlyje:

Bandymo rinkinys:

Daugkartinė tiesinė regresija

Treniruočių rinkinys:

Daugkartinė tiesinė regresija

Pastaba:MLR neatliksime funkcijų mastelio keitimo, nes tuo pasirūpina biblioteka, todėl mums nereikia to daryti rankiniu būdu.

2 veiksmas – mūsų MLR modelio pritaikymas prie treniruočių rinkinio:

Dabar mes gerai paruošėme savo duomenų rinkinį, kad galėtume teikti mokymus, o tai reiškia, kad mes pritaikysime regresijos modelį prie mokymo rinkinio. Bus panašiai kaip ir mes Paprastas tiesinės regresijos modelis. Kodas tam bus:

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

Išvestis:

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

Dabar mes sėkmingai apmokėme savo modelį naudodami mokymo duomenų rinkinį. Kitame žingsnyje mes išbandysime modelio veikimą naudodami bandymo duomenų rinkinį.

3 veiksmas. Bandymo rinkinio rezultatų numatymas:

Paskutinis mūsų modelio veiksmas yra modelio veikimo patikrinimas. Tai darysime numatę testo rinkinio rezultatą. Numatymui sukursime a y_pred vektorius. Žemiau yra jo kodas:

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

Vykdant aukščiau pateiktas kodo eilutes, pagal kintamųjų naršyklės parinktį bus sugeneruotas naujas vektorius. Savo modelį galime išbandyti lygindami numatomas reikšmes ir bandymų rinkinių vertes.

Išvestis:

Daugkartinė tiesinė regresija

Aukščiau pateiktame išvestyje mes numatėme rezultatų rinkinį ir bandymo rinkinį. Modelio našumą galime patikrinti palyginę šiuos du reikšmių indeksus pagal indeksą. Pavyzdžiui, pirmasis indeksas turi numatomą reikšmę 103 015 USD pelnas ir bandymo/reali vertė 103 282 USD pelno. Skirtumas yra tik 267 USD , kuri yra gera prognozė, todėl pagaliau mūsų modelis baigtas čia.

  • Taip pat galime patikrinti mokymo duomenų rinkinio ir bandymo duomenų rinkinio balą. Žemiau yra jo kodas:
 print(&apos;Train Score: &apos;, regressor.score(x_train, y_train)) print(&apos;Test Score: &apos;, regressor.score(x_test, y_test)) 

Išvestis: Rezultatas yra:

 Train Score: 0.9501847627493607 Test Score: 0.9347068473282446 

Aukščiau pateiktas rezultatas rodo, kad mūsų modelis yra 95% tikslus naudojant mokymo duomenų rinkinį ir 93% tikslus su bandymo duomenų rinkiniu.

Pastaba:Kitoje temoje pamatysime, kaip galime pagerinti modelio veikimą naudojantAtgalinis pašalinimasprocesas.

Daugialypės tiesinės regresijos taikymas:

Iš esmės yra dvi daugialypės tiesinės regresijos programos:

  • Nepriklausomo kintamojo veiksmingumas prognozuojant:
  • Pokyčių poveikio prognozavimas: