Im vorherigen Thema haben wir etwas über die einfache lineare Regression gelernt, bei der eine einzelne unabhängige/Prädiktorvariable (X) zur Modellierung der Antwortvariablen (Y) verwendet wird. Es kann jedoch verschiedene Fälle geben, in denen die Antwortvariable von mehr als einer Prädiktorvariablen beeinflusst wird; In solchen Fällen wird der Algorithmus der multiplen linearen Regression verwendet.
Darüber hinaus ist die multiple lineare Regression eine Erweiterung der einfachen linearen Regression, da mehr als eine Prädiktorvariable erforderlich ist, um die Antwortvariable vorherzusagen. Wir können es wie folgt definieren:
Die multiple lineare Regression ist einer der wichtigsten Regressionsalgorithmen, der die lineare Beziehung zwischen einer einzelnen abhängigen kontinuierlichen Variablen und mehr als einer unabhängigen Variablen modelliert.
Beispiel:
Vorhersage von CO2Emissionen basierend auf der Motorgröße und der Anzahl der Zylinder in einem Auto.
Einige wichtige Punkte zu MLR:
- Für MLR muss die abhängige Variable oder Zielvariable (Y) die kontinuierliche/reelle Variable sein, aber der Prädiktor oder die unabhängige Variable kann eine kontinuierliche oder kategoriale Form haben.
- Jede Merkmalsvariable muss die lineare Beziehung zur abhängigen Variablen modellieren.
- MLR versucht, eine Regressionsgerade durch einen mehrdimensionalen Raum von Datenpunkten anzupassen.
MLR-Gleichung:
Bei der multiplen linearen Regression ist die Zielvariable (Y) eine lineare Kombination mehrerer Prädiktorvariablen x1, X2, X3, ...,XN. Da es sich um eine Erweiterung der einfachen linearen Regression handelt und das Gleiche auch auf die Gleichung der multiplen linearen Regression angewendet wird, lautet die Gleichung:
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)
Wo,
Y= Ausgabe-/Antwortvariable
Numpy-Standardabweichung
B0, B1, B2, B3, BN....= Koeffizienten des Modells.
X1, X2, X3, X4,...= Verschiedene unabhängige/Feature-Variable
Annahmen für die multiple lineare Regression:
- A lineare Beziehung sollte zwischen der Ziel- und der Prädiktorvariablen vorhanden sein.
- Die Regressionsresiduen müssen sein normal verteilt .
- MLR geht davon aus, dass wenig oder keine Multikollinearität (Korrelation zwischen der unabhängigen Variablen) in Daten.
Implementierung des multiplen linearen Regressionsmodells mit Python:
Um MLR mit Python zu implementieren, haben wir das folgende Problem:
Problembeschreibung:
Wir haben einen Datensatz von 50 Start-up-Unternehmen . Dieser Datensatz enthält fünf Hauptinformationen: F&E-Ausgaben, Verwaltungsausgaben, Marketingausgaben, Staat und Gewinn für ein Geschäftsjahr . Unser Ziel ist es, ein Modell zu erstellen, mit dem sich leicht ermitteln lässt, welches Unternehmen den maximalen Gewinn erzielt und welcher Faktor den größten Einfluss auf den Gewinn eines Unternehmens hat.
Da wir den Gewinn ermitteln müssen, ist er die abhängige Variable und die anderen vier Variablen sind unabhängige Variablen. Nachfolgend sind die wichtigsten Schritte zur Bereitstellung des MLR-Modells aufgeführt:
Schritt 1: Datenvorverarbeitung Schritt:
Der allererste Schritt ist
# 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')
Ausgabe: Wir erhalten den Datensatz als:
In der obigen Ausgabe können wir deutlich erkennen, dass es fünf Variablen gibt, von denen vier kontinuierlich und eine kategoriale Variable sind.
#Extracting Independent and dependent Variable x= data_set.iloc[:, :-1].values y= data_set.iloc[:, 4].values
Ausgabe:
Aus[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)
Wie wir in der obigen Ausgabe sehen können, enthält die letzte Spalte kategoriale Variablen, die nicht für die direkte Anpassung des Modells geeignet sind. Also müssen wir diese Variable kodieren.
Kodierung von Dummy-Variablen:
Da wir eine kategoriale Variable (State) haben, die nicht direkt auf das Modell angewendet werden kann, werden wir sie kodieren. Um die kategoriale Variable in Zahlen zu kodieren, verwenden wir die LabelEncoder Klasse. Dies reicht jedoch nicht aus, da es immer noch eine relationale Ordnung aufweist, die möglicherweise zu einem falschen Modell führt. Um dieses Problem zu beheben, verwenden wir OneHotEncoder , wodurch die Dummy-Variablen erstellt werden. Unten ist der Code dafür:
#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 kodieren wir nur eine unabhängige Variable, die ein Zustand ist, da andere Variablen kontinuierlich sind.
Ausgabe:
Wie wir in der obigen Ausgabe sehen können, wurde die Statusspalte in Dummy-Variablen (0 und 1) umgewandelt. Hier entspricht jede Dummy-Variablenspalte einem Bundesstaat . Wir können dies überprüfen, indem wir es mit dem Originaldatensatz vergleichen. Die erste Spalte entspricht der Bundesstaat Kalifornien , die zweite Spalte entspricht der Bundesstaat Florida , und die dritte Spalte entspricht dem Der Staat New York .
Notiz:Wir sollten nicht alle Dummy-Variablen gleichzeitig verwenden, daher muss sie um 1 kleiner sein als die Gesamtzahl der Dummy-Variablen, sonst entsteht eine Dummy-Variablen-Falle.
- Jetzt schreiben wir eine einzelne Codezeile, um die Dummy-Variablenfalle zu vermeiden:
#avoiding the dummy variable trap: x = x[:, 1:]
Wenn wir die erste Dummy-Variable nicht entfernen, führt dies möglicherweise zu Multikollinearität im Modell.
Wie wir im obigen Ausgabebild sehen können, wurde die erste Spalte entfernt.
Was ist Jquery?
- Jetzt werden wir den Datensatz in Trainings- und Testsatz aufteilen. Der Code hierfür ist unten angegeben:
# 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)
Der obige Code teilt unseren Datensatz in einen Trainingssatz und einen Testsatz auf.
Ausgabe: Der obige Code teilt den Datensatz in einen Trainingssatz und einen Testsatz auf. Sie können die Ausgabe überprüfen, indem Sie auf die Variablen-Explorer-Option in der Spyder-IDE klicken. Der Testsatz und der Trainingssatz sehen wie im folgenden Bild aus:
Testsatz:
Netzwerkbetriebssystem
Trainingsset:
Notiz:In MLR führen wir keine Feature-Skalierung durch, da diese von der Bibliothek übernommen wird und wir sie daher nicht manuell durchführen müssen.
Schritt: 2 – Anpassen unseres MLR-Modells an das Trainingsset:
Jetzt haben wir unseren Datensatz gut vorbereitet, um das Training bereitzustellen, was bedeutet, dass wir unser Regressionsmodell an den Trainingssatz anpassen werden. Es wird ähnlich sein wie bei uns Einfaches lineares Regressionsmodell. Der Code hierfür lautet:
#Fitting the MLR model to the training set: from sklearn.linear_model import LinearRegression regressor= LinearRegression() regressor.fit(x_train, y_train)
Ausgabe:
Out[9]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
Jetzt haben wir unser Modell mithilfe des Trainingsdatensatzes erfolgreich trainiert. Im nächsten Schritt testen wir die Leistung des Modells anhand des Testdatensatzes.
Schritt: 3 – Vorhersage der Testsatzergebnisse:
Der letzte Schritt für unser Modell ist die Überprüfung der Leistung des Modells. Wir werden dies tun, indem wir das Ergebnis des Testsatzes vorhersagen. Zur Vorhersage erstellen wir eine y_pred Vektor. Unten ist der Code dafür:
#Predicting the Test set result; y_pred= regressor.predict(x_test)
Durch Ausführen der obigen Codezeilen wird unter der Variablen-Explorer-Option ein neuer Vektor generiert. Wir können unser Modell testen, indem wir die vorhergesagten Werte und Testsatzwerte vergleichen.
Ausgabe:
In der obigen Ausgabe haben wir die Ergebnismenge und die Testmenge vorhergesagt. Wir können die Modellleistung überprüfen, indem wir diese beiden Werte Index für Index vergleichen. Beispielsweise hat der erste Index einen vorhergesagten Wert von 103015$ Gewinn und Test-/Realwert von 103282$ profitieren. Der Unterschied besteht nur darin 267 $ , was eine gute Vorhersage ist, sodass unser Modell hier endlich vervollständigt ist.
- Wir können auch die Punktzahl für Trainingsdatensätze und Testdatensätze überprüfen. Unten ist der Code dafür:
print('Train Score: ', regressor.score(x_train, y_train)) print('Test Score: ', regressor.score(x_test, y_test))
Ausgabe: Die Punktzahl lautet:
Train Score: 0.9501847627493607 Test Score: 0.9347068473282446
Die obige Bewertung zeigt, dass unser Modell mit dem Trainingsdatensatz zu 95 % und mit dem Testdatensatz zu 93 % genau ist.
Notiz:Im nächsten Thema werden wir sehen, wie wir die Leistung des Modells mithilfe von verbessern könnenRückwärtseliminierungVerfahren.
Anwendungen der multiplen linearen Regression:
Es gibt hauptsächlich zwei Anwendungen der multiplen linearen Regression:
- Wirksamkeit der unabhängigen Variablen auf die Vorhersage:
- Vorhersage der Auswirkungen von Änderungen: