In het vorige onderwerp hebben we geleerd over eenvoudige lineaire regressie, waarbij een enkele Independent/Predictor(X)-variabele wordt gebruikt om de responsvariabele (Y) te modelleren. Maar er kunnen verschillende gevallen zijn waarin de responsvariabele wordt beïnvloed door meer dan één voorspellende variabele; voor dergelijke gevallen wordt het Multiple Linear Regression-algoritme gebruikt.
Bovendien is meervoudige lineaire regressie een uitbreiding van eenvoudige lineaire regressie, omdat er meer dan één voorspellende variabele nodig is om de responsvariabele te voorspellen. We kunnen het definiëren als:
Meervoudige lineaire regressie is een van de belangrijke regressie-algoritmen die de lineaire relatie tussen een enkele afhankelijke continue variabele en meer dan één onafhankelijke variabele modelleert.
Voorbeeld:
Voorspelling van CO2uitstoot op basis van motorinhoud en aantal cilinders in een auto.
Enkele belangrijke punten over MLR:
- Voor MLR moet de afhankelijke of doelvariabele (Y) de continue/reële zijn, maar de voorspellende of onafhankelijke variabele mag een continue of categorische vorm hebben.
- Elke kenmerkvariabele moet de lineaire relatie met de afhankelijke variabele modelleren.
- MLR probeert een regressielijn door een multidimensionale ruimte van datapunten te passen.
MLR-vergelijking:
Bij meervoudige lineaire regressie is de doelvariabele (Y) een lineaire combinatie van meerdere voorspellende variabelen x1, X2, X3, ...,XN. Omdat het een verbetering is van eenvoudige lineaire regressie, en dus hetzelfde wordt toegepast voor de meervoudige lineaire regressievergelijking, wordt de vergelijking:
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)
Waar,
Y= Output/Respons-variabele
reguliere expressie in Java
B0, B1, B2, B3, BN....= Coëfficiënten van het model.
X1, X2, X3, X4,...= Diverse onafhankelijke/kenmerkvariabele
Aannames voor meervoudige lineaire regressie:
- A lineaire relatie moet bestaan tussen de doelvariabelen en de voorspellende variabelen.
- De regressieresiduen moeten zijn normaal verdeeld .
- MLR gaat uit van weinig of niets geen multicollineariteit (correlatie tussen de onafhankelijke variabele) in gegevens.
Implementatie van een meervoudig lineair regressiemodel met behulp van Python:
Om MLR te implementeren met Python, hebben we het volgende probleem:
Probleembeschrijving:
We hebben een dataset van 50 startende bedrijven . Deze dataset bevat vijf hoofdinformatie: R&D-uitgaven, administratiekosten, marketinguitgaven, staat en winst voor een boekjaar . Ons doel is om een model te creëren dat eenvoudig kan bepalen welk bedrijf een maximale winst heeft, en welke factor het meest van invloed is op de winst van een bedrijf.
Omdat we de Winst moeten vinden, is dit de afhankelijke variabele, en zijn de andere vier variabelen onafhankelijke variabelen. Hieronder staan de belangrijkste stappen voor het inzetten van het MLR-model:
Stap 1: Voorverwerking van gegevens Stap:
De allereerste stap is
# 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')
Uitgang: We krijgen de dataset als:
In de bovenstaande uitvoer kunnen we duidelijk zien dat er vijf variabelen zijn, waarbij vier variabelen continu zijn en één een categorische variabele.
#Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values
Uitgang:
Uit[5]:
32-bits architectuur versus 64-bits
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)
Zoals we in de bovenstaande uitvoer kunnen zien, bevat de laatste kolom categorische variabelen die niet geschikt zijn om rechtstreeks van toepassing te zijn op het aanpassen van het model. We moeten deze variabele dus coderen.
Coderen van dummyvariabelen:
Omdat we één categorische variabele hebben (State), die niet rechtstreeks op het model kan worden toegepast, zullen we deze coderen. Om de categorische variabele in getallen te coderen, gebruiken we de LabelEncoder klas. Maar het is niet voldoende omdat er nog steeds sprake is van een zekere relationele orde, waardoor een verkeerd model kan ontstaan. Dus om dit probleem op te lossen, zullen we gebruiken OneHotEncoder , waarmee de dummyvariabelen worden gemaakt. Hieronder staat de code ervoor:
#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()
Hier coderen we slechts één onafhankelijke variabele, die de status heeft omdat andere variabelen continu zijn.
Uitgang:
Zoals we in de bovenstaande uitvoer kunnen zien, is de statuskolom omgezet in dummyvariabelen (0 en 1). Hier komt elke dummy-variabelekolom overeen met de ene staat . We kunnen dit controleren door het te vergelijken met de originele dataset. De eerste kolom komt overeen met de Staat Californië , de tweede kolom komt overeen met de Staat Florida , en de derde kolom komt overeen met de New York staat .
Opmerking:We moeten niet alle dummy-variabelen tegelijkertijd gebruiken, dus het moet 1 minder zijn dan het totale aantal dummy-variabelen, anders ontstaat er een dummy-variabelenval.
- Nu schrijven we een enkele regel code om de val van dummyvariabelen te vermijden:
#avoiding the dummy variable trap: x = x[:, 1:]
Als we de eerste dummyvariabele niet verwijderen, kan dit multicollineariteit in het model introduceren.
Zoals we in de bovenstaande uitvoerafbeelding kunnen zien, is de eerste kolom verwijderd.
- Nu gaan we de dataset opsplitsen in een trainings- en een testset. De code hiervoor vindt u hieronder:
# 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)
De bovenstaande code splitst onze dataset op in een trainingsset en een testset.
Uitgang: De bovenstaande code splitst de dataset op in trainingsset en testset. U kunt de uitvoer controleren door op de variabeleverkenneroptie in Spyder IDE te klikken. De testset en trainingsset zien er als volgt uit:
Testset:
Trainingsset:
Opmerking:In MLR zullen we geen functieschaling uitvoeren omdat dit door de bibliotheek wordt verzorgd, dus we hoeven dit niet handmatig te doen.
Stap: 2- Ons MLR-model aanpassen aan de trainingsset:
Nu hebben we onze dataset goed voorbereid om training te kunnen geven, wat betekent dat we ons regressiemodel aan de trainingsset zullen aanpassen. Het zal vergelijkbaar zijn met wat wij deden Eenvoudig lineair regressiemodel. De code hiervoor zal zijn:
#Fitting the MLR model to the training set: from sklearn.linear_model import LinearRegression regressor= LinearRegression() regressor.fit(x_train, y_train)
Uitgang:
Out[9]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
Nu hebben we ons model met succes getraind met behulp van de trainingsdataset. In de volgende stap zullen we de prestaties van het model testen met behulp van de testdataset.
Stap: 3- Voorspelling van testsetresultaten:
De laatste stap voor ons model is het controleren van de prestaties van het model. We doen dit door het resultaat van de testset te voorspellen. Voor voorspellingen maken we een y_pred vector. Hieronder staat de code ervoor:
#Predicting the Test set result; y_pred= regressor.predict(x_test)
Door de bovenstaande coderegels uit te voeren, wordt een nieuwe vector gegenereerd onder de variabele verkenneroptie. We kunnen ons model testen door de voorspelde waarden en testsetwaarden te vergelijken.
powershell versus bash
Uitgang:
In de bovenstaande uitvoer hebben we de resultaatset en testset voorspeld. We kunnen de prestaties van het model controleren door deze twee waarden index per index te vergelijken. De eerste index heeft bijvoorbeeld een voorspelde waarde van 103015$ winst en test/echte waarde van 103282$ winst. Het verschil is slechts van $ 267 , wat een goede voorspelling is, dus eindelijk is ons model hier voltooid.
- We kunnen ook de score controleren voor de trainingsdataset en de testdataset. Hieronder staat de code ervoor:
print('Train Score: ', regressor.score(x_train, y_train)) print('Test Score: ', regressor.score(x_test, y_test))
Uitgang: De score is:
Train Score: 0.9501847627493607 Test Score: 0.9347068473282446
Uit de bovenstaande score blijkt dat ons model 95% nauwkeurig is met de trainingsdataset en 93% nauwkeurig met de testdataset.
Opmerking:In het volgende onderwerp zullen we zien hoe we de prestaties van het model kunnen verbeteren met behulp van deAchterwaartse eliminatieproces.
Toepassingen van meervoudige lineaire regressie:
Er zijn hoofdzakelijk twee toepassingen van meervoudige lineaire regressie:
- Effectiviteit van onafhankelijke variabele op voorspelling:
- Het voorspellen van de impact van veranderingen: