Kursinhalt
Lineare Regression mit Python
Lineare Regression mit Python
Interpolation vs Extrapolation
Im vorherigen Kapitel haben wir festgestellt, dass unsere Vorhersagen mit verschiedenen Modellen an den Rändern vielfältiger werden.
Genauer gesagt, werden die Vorhersagen seltsam, sobald wir den Wertebereich des Trainingssatzes überschreiten. Das Vorhersagen von Werten außerhalb des Wertebereichs des Trainingssatzes wird als Extrapolation bezeichnet, und das Vorhersagen von Werten innerhalb des Bereichs als Interpolation.
Die Regression behandelt die Extrapolation nicht gut. Sie wird für die Interpolation verwendet und kann absurde Vorhersagen liefern, wenn neue Instanzen außerhalb des Bereichs des Trainingssatzes liegen.
Konfidenzintervalle
Mit der OLS
-Klasse können Sie auch die Konfidenzintervalle für die Regressionslinie an jedem Punkt erhalten. Aber die Syntax ist etwas kompliziert:
Dabei ist alpha
ein Konfidenzniveau, das normalerweise auf 0.05
gesetzt wird.
Mit dem obigen Code erhalten Sie die unteren und oberen Grenzen des Konfidenzintervalls der Regressionslinie am Punkt X_new_tilde
(oder ein Array von oberen und unteren Grenzen, wenn X_new_tilde
ein Array ist).
Lassen Sie uns dies verwenden, um die Regressionslinie zusammen mit ihrem Konfidenzintervall zu zeichnen.
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm from sklearn.preprocessing import PolynomialFeatures # Import PolynomialFeatures class file_link = 'https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/poly.csv' df = pd.read_csv(file_link) n = 4 # A degree of the polynomial regression X = df[['Feature']] # Assign X as a DataFrame y = df['Target'] # Assign y X_tilde = PolynomialFeatures(n).fit_transform(X) # Get X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train the model X_new = np.linspace(-0.1, 1.5, 80) # 1-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new.reshape(-1,1)) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) lower = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_lower'] # Get lower bound for each point upper = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_upper'] # get upper bound for each point plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.fill_between(X_new, lower, upper, alpha=0.4) plt.show()
Ohne die Verteilung eines Ziels zu kennen, können wir die genaue Regressionslinie nicht finden. Alles, was wir tun, ist, sie basierend auf unseren Daten zu approximieren. Das Konfidenzintervall der Regressionslinie ist das Intervall, in dem die genaue Regressionslinie mit dem Konfidenzniveau alpha
liegt.
Man kann sehen, dass das Intervall größer und größer wird, je weiter es sich vom Bereich des Trainingssatzes entfernt.
Hinweis
Die Konfidenzintervalle werden unter der Annahme erstellt, dass wir das Modell korrekt gewählt haben (z.B. einfache lineare Regression oder polynomiale Regression vom Grad 4).
Wenn das Modell schlecht gewählt ist, ist das Konfidenzintervall unzuverlässig, und ebenso die Linie selbst. Sie werden im folgenden Abschnitt lernen, wie man das beste Modell auswählt.
Danke für Ihr Feedback!