Kursinhalt
Lineare Regression mit Python
Lineare Regression mit Python
Erstellen Einer Polynomialen Regression
Datei laden
Für dieses Kapitel haben wir eine Datei namens poly.csv
. Laden wir die Datei und schauen uns den Inhalt an.
import pandas as pd 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) print(df.head(5))
Hier haben wir also ein Merkmal und das Ziel. Lassen Sie uns ein Streudiagramm erstellen.
import pandas as pd import matplotlib.pyplot as plt 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) X = df['Feature'] y = df['Target'] plt.scatter(X,y) plt.show()
Es ist schwer vorstellbar, dass eine gerade Linie diese Daten gut anpasst. Also lass uns eine Polynomiale Regression erstellen!
Aufbau der X̃-Matrix
Wir werden erneut die OLS
-Klasse verwenden. Dennoch müssen wir eine X̃-Matrix erstellen. Wir machen das manuell, indem wir eine quadratische Feature
-Spalte zum DataFrame hinzufügen, wie folgt:
Aber wenn wir eine hochgradige polynomiale Regression erstellen wollen, erfordert das das Hinzufügen vieler solcher Spalten. Glücklicherweise bietet Scikit-Learn eine Möglichkeit, dies weniger schmerzhaft mit der PolynomialFeatures
-Klasse zu tun.
Hinweis
Die Methode
fit_transform(X)
erwartet, dass X entweder ein 2D-Array oder ein pandas DataFrame ist. Wenn Ihr X ein 1D-numpy-Array ist, wird die Methodereshape(-1,1)
es in ein 2D-Array mit denselben Inhalten umwandeln:Wenn Ihr X eine Spalte aus einem DataFrame ist, können Sie
X = df[['col1']]
verwenden, um ein DataFrame anstelle einer pandas Series zu erhalten, die nicht fürfit_transform()
geeignet ist.
X = df['Feature'] # X ist eine pandas Series X = df[['Feature']] # X ist ein pandas DataFrame
Um ein X̃ für die Polynomialregression vom Grad n
zu erstellen, würden wir verwenden:
Hinweis
Die Klasse
PolynomialFeatures
fügt auch eine Spalte mit 1en hinzu, sodass Siesm.add_constant()
nicht verwenden müssen.
Aufbau der Polynomialregression und Vorhersagen treffen
Da wir wissen, wie man ein X̃ erhält, sind wir bereit, die Polynomialregression auf die gleiche Weise wie die vorherigen Modelle zu erstellen:
Um neue Werte vorherzusagen, sollte X_new
ebenfalls mit PolynomialFeatures
transformiert werden.
Das folgende ausführbare Beispiel zeigt den gesamten Prozess des Aufbaus einer Polynomialregression. X_new
ist hier ein 1D-Array von Punkten zwischen -0.1 und 1.5. Sie werden für die Visualisierung benötigt. Und da es sich um ein 1D-Array handelt, sollten wir die Methode reshape(-1,1)
anwenden, bevor wir es in der PolynomialFeatures-Klasse verwenden.
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 = 2 # 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).reshape(-1,1) # 2-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph
Fühlen Sie sich frei, mit den Werten von n
in der achten Zeile zu experimentieren. Sie werden sehen, wie sich das Diagramm je nach Grad der polynomialen Regression ändert. Wenn Sie genau hinsehen, werden Sie bemerken, wie unterschiedlich die Vorhersagen für Feature-Werte sind, die kleiner als 0 oder größer als 1,4 sind. Das ist das Thema des nächsten Kapitels.
Danke für Ihr Feedback!