În subiectul anterior, am aflat despre regresia liniară simplă, unde o singură variabilă independentă/predictor (X) este utilizată pentru a modela variabila răspuns (Y). Dar pot exista diverse cazuri în care variabila răspuns este afectată de mai mult de o variabilă predictivă; pentru astfel de cazuri, se folosește algoritmul de regresie liniară multiplă.
În plus, regresia liniară multiplă este o extensie a regresiei liniară simplă, deoarece este nevoie de mai mult de o variabilă predictivă pentru a prezice variabila răspuns. O putem defini astfel:
Regresia liniară multiplă este unul dintre algoritmii importanți de regresie care modelează relația liniară dintre o singură variabilă continuă dependentă și mai mult de o variabilă independentă.
Exemplu:
Predicția CO2emisii bazate pe dimensiunea motorului și numărul de cilindri dintr-o mașină.
Câteva puncte cheie despre MLR:
- Pentru MLR, variabila dependentă sau țintă (Y) trebuie să fie continuu/real, dar predictorul sau variabila independentă poate fi de formă continuă sau categorială.
- Fiecare variabilă caracteristică trebuie să modeleze relația liniară cu variabila dependentă.
- MLR încearcă să potrivească o linie de regresie printr-un spațiu multidimensional de puncte de date.
Ecuația MLR:
În regresia liniară multiplă, variabila țintă (Y) este o combinație liniară de variabile predictoare multiple x1, X2, X3, ...,Xn. Deoarece este o îmbunătățire a regresiei liniare simple, deci același lucru se aplică pentru ecuația de regresie liniară multiplă, ecuația devine:
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)
Unde,
Y= variabilă de ieșire/răspuns
exemple de programare python
b0, b1, b2, b3, bn....= Coeficienții modelului.
X1, X2, X3, X4,...= Diverse Variabilă independentă/funcție
Ipoteze pentru regresia liniară multiplă:
- A relație liniară ar trebui să existe între variabilele țintă și predictor.
- Reziduurile de regresie trebuie să fie distribuite normal .
- MLR presupune putin sau fără multicoliniaritate (corelația dintre variabila independentă) în date.
Implementarea modelului de regresie liniară multiplă folosind Python:
Pentru a implementa MLR folosind Python, avem mai jos problema:
Descrierea problemei:
Avem un set de date de 50 de companii start-up . Acest set de date conține cinci informații principale: Cheltuieli pentru cercetare și dezvoltare, cheltuieli de administrare, cheltuieli de marketing, stat și profit pentru un an financiar . Scopul nostru este să creăm un model care să poată determina cu ușurință care companie are un profit maxim și care este cel mai afectat factor pentru profitul unei companii.
Deoarece trebuie să găsim Profitul, deci este variabila dependentă, iar celelalte patru variabile sunt variabile independente. Mai jos sunt pașii principali ai implementării modelului MLR:
Pasul 1: Preprocesarea datelor Pasul:
Primul pas este
# 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')
Ieșire: Vom obține setul de date ca:
În rezultatul de mai sus, putem vedea clar că există cinci variabile, în care patru variabile sunt continue și una este variabilă categorială.
#Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values
Ieșire:
Ieșit[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)
După cum putem vedea în rezultatul de mai sus, ultima coloană conține variabile categoriale care nu sunt potrivite pentru a fi aplicate direct pentru potrivirea modelului. Deci trebuie să codificăm această variabilă.
Codificarea variabilelor fictive:
pentru fiecare java
Deoarece avem o variabilă categorială (State), care nu poate fi aplicată direct modelului, așa că o vom codifica. Pentru a codifica variabila categorială în numere, vom folosi LabelEncoder clasă. Dar nu este suficient pentru că are încă o ordine relațională, ceea ce poate crea un model greșit. Deci, pentru a elimina această problemă, vom folosi OneHotEncoder , care va crea variabilele fictive. Mai jos este codul pentru acesta:
#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()
Aici codificăm doar o variabilă independentă, care este stare, deoarece alte variabile sunt continue.
Ieșire:
După cum putem vedea în rezultatul de mai sus, coloana de stare a fost convertită în variabile fictive (0 și 1). Aici fiecare coloană de variabilă inactivă corespunde unei singure stări . Putem verifica comparându-l cu setul de date original. Prima coloană corespunde Statul California , a doua coloană corespunde Statul Florida , iar a treia coloană corespunde Statul New York .
Notă:Nu ar trebui să folosim toate variabilele fictive în același timp, deci trebuie să fie cu 1 mai puțin decât numărul total de variabile fictive, altfel va crea o capcană a variabilelor fictive.
- Acum, scriem o singură linie de cod doar pentru a evita capcana variabilei false:
#avoiding the dummy variable trap: x = x[:, 1:]
Dacă nu eliminăm prima variabilă dummy, atunci aceasta poate introduce multicoliniaritate în model.
După cum putem vedea în imaginea de mai sus, prima coloană a fost eliminată.
- Acum vom împărți setul de date în set de antrenament și test. Codul pentru aceasta este dat mai jos:
# 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)
Codul de mai sus va împărți setul nostru de date într-un set de antrenament și un set de testare.
Ieșire: Codul de mai sus va împărți setul de date în set de antrenament și set de testare. Puteți verifica rezultatul făcând clic pe opțiunea de explorare variabilă oferită în Spyder IDE. Setul de testare și setul de antrenament vor arăta ca imaginea de mai jos:
Set de testare:
Set de antrenament:
Notă:În MLR, nu vom face scalarea caracteristicilor, deoarece este îngrijită de bibliotecă, deci nu trebuie să o facem manual.
Pas: 2- Potrivirea modelului nostru MLR la setul de antrenament:
Acum, ne-am pregătit bine setul de date pentru a oferi instruire, ceea ce înseamnă că ne vom potrivi modelul de regresie la setul de antrenament. Va fi similar cu cum am făcut noi în Model de regresie liniară simplă. Codul pentru aceasta va fi:
#Fitting the MLR model to the training set: from sklearn.linear_model import LinearRegression regressor= LinearRegression() regressor.fit(x_train, y_train)
Ieșire:
Out[9]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
Acum, ne-am antrenat cu succes modelul folosind setul de date de antrenament. În pasul următor, vom testa performanța modelului folosind setul de date de testare.
Pasul: 3- Predicția rezultatelor setului de testare:
Ultimul pas pentru modelul nostru este verificarea performanței modelului. O vom face prin prezicerea rezultatului setului de testare. Pentru predicție, vom crea un y_pred vector. Mai jos este codul pentru acesta:
#Predicting the Test set result; y_pred= regressor.predict(x_test)
Prin executarea liniilor de cod de mai sus, un vector nou va fi generat sub opțiunea de explorare a variabilelor. Putem testa modelul nostru comparând valorile prezise și valorile setate de testare.
Ieșire:
În rezultatul de mai sus, am prezis setul de rezultate și setul de testare. Putem verifica performanța modelului comparând aceste două valori index cu index. De exemplu, primul indice are o valoare estimată de 103015 USD profit și valoarea de test/real de 103282 USD profit. Diferența este doar de 267 USD , ceea ce este o predicție bună, așa că, în sfârșit, modelul nostru este completat aici.
java privat vs public
- De asemenea, putem verifica scorul pentru setul de date de antrenament și pentru setul de date de testare. Mai jos este codul pentru acesta:
print('Train Score: ', regressor.score(x_train, y_train)) print('Test Score: ', regressor.score(x_test, y_test))
Ieșire: Scorul este:
Train Score: 0.9501847627493607 Test Score: 0.9347068473282446
Scorul de mai sus arată că modelul nostru este 95% precis cu setul de date de antrenament și 93% precis cu setul de date de testare.
Notă:În următorul subiect, vom vedea cum putem îmbunătăți performanța modelului folosindEliminare înapoiproces.
Aplicații ale regresiei liniare multiple:
Există în principal două aplicații ale regresiei liniare multiple:
- Eficacitatea variabilei independente asupra predicției:
- Prezicerea impactului schimbărilor: