Kursinhalt
Lineare Regression mit Python
Lineare Regression mit Python
Erstellung Einer Linearen Regression Mit Statsmodels
Im vorherigen Kapitel haben wir eine Funktion aus NumPy verwendet, um die Parameter zu berechnen.
Nun werden wir anstelle der Funktion das Klassenobjekt verwenden, um die lineare Regression darzustellen. Dieser Ansatz erfordert mehr Codezeilen zur Bestimmung der Parameter, speichert jedoch viele hilfreiche Informationen im Objekt und vereinfacht die Vorhersage.
Aufbau eines linearen Regressionsmodells
In statsmodels kann die Klasse OLS
verwendet werden, um ein lineares Regressionsmodell zu erstellen.
Zunächst muss ein Objekt der Klasse OLS
initialisiert werden mit
sm.OLS(y, X_tilde)
.
Anschließend wird es mit der Methode fit()
trainiert.
model = sm.OLS(y, X_tilde)
model = model.fit()
Dies entspricht:
model = sm.OLS(y, X_tilde).fit()
Der Konstruktor der OLS
-Klasse erwartet ein bestimmtes Array X_tilde
als Eingabe, das wir in der Normalengleichung gesehen haben. Daher muss das X
-Array in X_tilde
umgewandelt werden. Dies ist mit der Funktion sm.add_constant()
möglich.
Parameterermittlung
Nach dem Training des Modells können die Parameter einfach über das Attribut params
abgerufen werden.
import statsmodels.api as sm # import statsmodels import pandas as pd file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/simple_height_data.csv' df = pd.read_csv(file_link) # Open the file X, y = df['Father'], df['Height'] # Assign the variables # Get the correct form of input for OLS X_tilde = sm.add_constant(X) # Initialize an OLS object regression_model = sm.OLS(y, X_tilde) # Train the object regression_model = regression_model.fit() # Get the paramters beta_0, beta_1 = regression_model.params print('beta_0 is: ', beta_0) print('beta_1 is: ', beta_1)
Vorhersagen erstellen
Neue Instanzen können einfach mit der Methode predict()
vorhergesagt werden, jedoch müssen auch diese Eingabedaten vorverarbeitet werden:
import statsmodels.api as sm import pandas as pd import numpy as np file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/simple_height_data.csv' df = pd.read_csv(file_link) # Open the file X, y = df['Father'], df['Height'] # Assign the variables X_tilde = sm.add_constant(X) # Preprocess regression_model = sm.OLS(y, X_tilde) # Initialize an OLS object regression_model = regression_model.fit() # Train the object # Predict new values X_new = np.array([65,70,75]) # Feature values of new instances X_new_tilde = sm.add_constant(X_new) # Preprocess X_new y_pred = regression_model.predict(X_new_tilde) # Predict the target print(y_pred)
Zusammenfassung abrufen
Wie Sie wahrscheinlich bemerkt haben, ist die Verwendung der OLS
-Klasse nicht so einfach wie die Funktion polyfit()
. Die Nutzung von OLS
bietet jedoch Vorteile. Während des Trainings werden zahlreiche statistische Informationen berechnet. Auf diese Informationen kann mit der Methode summary()
zugegriffen werden.
import statsmodels.api as sm import pandas as pd file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/simple_height_data.csv' df = pd.read_csv(file_link) # Read the file X, y = df['Father'], df['Height'] X_tilde = sm.add_constant(X) # Preprocess X regression_model = sm.OLS(y, X_tilde) # Initialize an OLS object regression_model = regression_model.fit() # Train the object # Print the summary print(regression_model.summary())
Das sind viele statistische Kennzahlen. Die wichtigsten Teile der Tabelle werden wir in späteren Abschnitten besprechen.
Danke für Ihr Feedback!