Multiple Regression in Python
-
Verwenden Sie das Modul
statsmodel.api
, um mehrere lineare Regressionen in Python durchzuführen -
Verwenden Sie
numpy.linalg.lstsq
, um mehrere lineare Regressionen in Python durchzuführen -
Verwenden Sie die Methode
scipy.curve_fit()
, um mehrere lineare Regressionen in Python durchzuführen
In diesem Tutorial wird die multiple lineare Regression und ihre Implementierung in Python erläutert.
Multiple lineare Regression ist ein Modell, das die Beziehung zwischen zwei oder mehr als zwei Variablen und einer einzelnen Antwortvariablen berechnet, indem eine lineare Regressionsgleichung dazwischen angepasst wird. Es hilft, die Abhängigkeit oder die Änderung zwischen abhängigen Variablen von der Änderung der unabhängigen Variablen abzuschätzen. Bei der standardmäßigen multiplen linearen Regression werden alle unabhängigen Variablen gleichzeitig berücksichtigt.
Verwenden Sie das Modul statsmodel.api
, um mehrere lineare Regressionen in Python durchzuführen
Das Modul statsmodel.api
in Python ist mit Funktionen zur Umsetzung der linearen Regression ausgestattet. Wir verwenden die Funktion OLS()
, die eine gewöhnliche Regression der kleinsten Quadrate durchführt.
Wir können entweder einen Datensatz mit dem Modul pandas
importieren oder unsere eigenen Dummy-Daten erstellen, um eine multiple Regression durchzuführen. Wir teilen die abhängigen und unabhängigen Variablen, um das lineare Regressionsmodell zwischen diesen Variablen anzuwenden.
Wir erstellen ein Regressionsmodell mit der Funktion OLS()
. Dann übergeben wir die unabhängigen und abhängigen Variablen in dieser Funktion und passen dieses Modell mit der Funktion fit()
an. In unserem Beispiel haben wir einige Arrays erstellt, um die multiple Regression zu demonstrieren.
Siehe den Code unten.
import statsmodels.api as sm
import numpy as np
y = [1, 2, 3, 4, 3, 4, 5, 3, 5, 5, 4, 5, 4, 5, 4, 5, 6, 0, 6, 3, 1, 3, 1]
X = [
[0, 2, 4, 1, 5, 4, 5, 9, 9, 9, 3, 7, 8, 8, 6, 6, 5, 5, 5, 6, 6, 5, 5],
[4, 1, 2, 3, 4, 5, 6, 7, 5, 8, 7, 8, 7, 8, 7, 8, 6, 8, 9, 2, 1, 5, 6],
[4, 1, 2, 5, 6, 7, 8, 9, 7, 8, 7, 8, 7, 4, 3, 1, 2, 3, 4, 1, 3, 9, 7],
]
def reg_m(y, x):
ones = np.ones(len(x[0]))
X = sm.add_constant(np.column_stack((x[0], ones)))
for ele in x[1:]:
X = sm.add_constant(np.column_stack((ele, X)))
results = sm.OLS(y, X).fit()
return results
print(reg_m(y, x).summary())
Ausgabe:
OLS Regression Results
==============================================================================
Dep. Variable: y R-squared: 0.241
Model: OLS Adj. R-squared: 0.121
Method: Least Squares F-statistic: 2.007
Date: Wed, 16 Jun 2021 Prob (F-statistic): 0.147
Time: 23:57:15 Log-Likelihood: -40.810
No. Observations: 23 AIC: 89.62
Df Residuals: 19 BIC: 94.16
Df Model: 3
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
x1 -0.0287 0.135 -0.213 0.834 -0.311 0.254
x2 0.2684 0.160 1.678 0.110 -0.066 0.603
x3 0.1339 0.160 0.839 0.412 -0.200 0.468
const 1.5123 0.986 1.534 0.142 -0.551 3.576
==============================================================================
Omnibus: 9.472 Durbin-Watson: 2.447
Prob(Omnibus): 0.009 Jarque-Bera (JB): 7.246
Skew: -1.153 Prob(JB): 0.0267
Kurtosis: 4.497 Cond. No. 29.7
==============================================================================
Mit der Funktion summary()
können wir die Ergebnisse und Koeffizienten der Regression ausgeben. Das R-Squared
und das Adjusted R-Squared
sagen uns über die Effizienz der Regression.
Verwenden Sie numpy.linalg.lstsq
, um mehrere lineare Regressionen in Python durchzuführen
Die Methode numpy.linalg.lstsq
gibt die Lösung der kleinsten Quadrate einer bereitgestellten Gleichung zurück, indem sie die Gleichung als Ax=B
löst, indem der Vektor x berechnet wird, um die Normale ||B-Ax||
zu minimieren.
Wir können es verwenden, um eine multiple Regression durchzuführen, wie unten gezeigt.
import numpy as np
y = [1, 2, 3, 4, 3, 4, 5, 3, 5, 5, 4, 5, 4, 5, 4, 5, 6, 0, 6, 3, 1, 3, 1]
X = [
[0, 2, 4, 1, 5, 4, 5, 9, 9, 9, 3, 7, 8, 8, 6, 6, 5, 5, 5, 6, 6, 5, 5],
[4, 1, 2, 3, 4, 5, 6, 7, 5, 8, 7, 8, 7, 8, 7, 8, 6, 8, 9, 2, 1, 5, 6],
[4, 1, 2, 5, 6, 7, 8, 9, 7, 8, 7, 8, 7, 4, 3, 1, 2, 3, 4, 1, 3, 9, 7],
]
X = np.transpose(X) # transpose so input vectors
X = np.c_[X, np.ones(X.shape[0])] # add bias term
linreg = np.linalg.lstsq(X, y, rcond=None)[0]
print(linreg)
Ausgabe:
[ 0.1338682 0.26840334 -0.02874936 1.5122571 ]
Wir können die Koeffizienten für jede Variable mit der vorherigen Methode vergleichen und feststellen, dass das Ergebnis dasselbe ist. Hier ist das Endergebnis ein NumPy
-Array.
Verwenden Sie die Methode scipy.curve_fit()
, um mehrere lineare Regressionen in Python durchzuführen
Dieses Modell verwendet eine Funktion, die weiter verwendet wird, um ein Modell für einige Werte zu berechnen, und das Ergebnis wird mit nichtlinearen kleinsten Quadraten verwendet, um diese Funktion an die gegebenen Daten anzupassen.
Siehe den Code unten.
from scipy.optimize import curve_fit
import scipy
import numpy as np
def function_calc(x, a, b, c):
return a + b * x[0] + c * x[1]
y = [1, 2, 3, 4, 3, 4, 5, 3, 5, 5, 4, 5, 4, 5, 4, 5, 6, 0, 6, 3, 1, 3, 1]
X = [
[0, 2, 4, 1, 5, 4, 5, 9, 9, 9, 3, 7, 8, 8, 6, 6, 5, 5, 5, 6, 6, 5, 5],
[4, 1, 2, 3, 4, 5, 6, 7, 5, 8, 7, 8, 7, 8, 7, 8, 6, 8, 9, 2, 1, 5, 6],
[4, 1, 2, 5, 6, 7, 8, 9, 7, 8, 7, 8, 7, 4, 3, 1, 2, 3, 4, 1, 3, 9, 7],
]
popt, pcov = curve_fit(function_calc, x, y)
print(popt)
print(pcov)
Ausgabe:
[1.44920591 0.12720273 0.26001833]
[[ 0.84226681 -0.06637804 -0.06977243]
[-0.06637804 0.02333829 -0.01058201]
[-0.06977243 -0.01058201 0.02288467]]