Multiple Regression in Python

Shivam Arora 10 Oktober 2023
  1. Verwenden Sie das Modul statsmodel.api, um mehrere lineare Regressionen in Python durchzuführen
  2. Verwenden Sie numpy.linalg.lstsq, um mehrere lineare Regressionen in Python durchzuführen
  3. Verwenden Sie die Methode scipy.curve_fit(), um mehrere lineare Regressionen in Python durchzuführen
Multiple Regression in Python

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]]

Verwandter Artikel - Python Regression