Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Erstellung der Polynomialregression | Polynomiale Regression
Lineare Regression mit Python
course content

Kursinhalt

Lineare Regression mit Python

Lineare Regression mit Python

1. Einfache Lineare Regression
2. Multiple Lineare Regression
3. Polynomiale Regression
4. Das Beste Modell Auswählen

book
Erstellung der Polynomialregression

Datei laden

Für dieses Kapitel haben wir eine Datei namens poly.csv, die wir zunächst laden und deren Inhalt wir uns ansehen:

123456
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))
copy

Hier haben wir also ein Merkmal und das Ziel. Als Nächstes erstellen wir ein Streudiagramm, um die Beziehung zwischen Merkmal und Ziel zu verstehen:

123456789
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()
copy

Es ist schwer vorstellbar, dass eine Gerade diese Daten gut abbilden kann, daher ist eine Polynomregression die deutlich bessere Wahl.

Aufbau der X̃-Matrix

Wir verwenden erneut die OLS-Klasse. Dennoch müssen wir eine -Matrix erstellen. Dies geschieht manuell, indem wir eine quadrierte Spalte 'Feature' zum DataFrame hinzufügen:

df['Feature_squared'] = df['Feature'] ** 2

Wenn jedoch eine Polynomregression höheren Grades erstellt werden soll, müssten viele solcher Spalten hinzugefügt werden. Glücklicherweise bietet Scikit-Learn mit der Klasse PolynomialFeatures eine weniger aufwendige Möglichkeit.

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, wandelt die Methode reshape(-1,1) es in ein 2D-Array mit denselben Inhalten um:

X = X.reshape(-1,1)

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, da eine Series für fit_transform() nicht geeignet ist:

X = df['Feature']   # X is a pandas Series
X = df[['Feature']]  # X is a pandas DataFrame

Um also ein für die Polynomialregression vom Grad n zu erstellen, verwenden wir:

from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n)  # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
Note
Hinweis

Die Klasse PolynomialFeatures fügt außerdem eine Spalte mit Einsen hinzu, daher ist die Verwendung von sm.add_constant() nicht erforderlich.

Aufbau der Polynomialregression und Durchführung von Vorhersagen

Nachdem wir wissen, wie man ein erhält, sind wir bereit, die Polynomialregression auf die gleiche Weise wie die vorherigen Modelle zu erstellen:

y = df['Target']
# Prepare X_tilde
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
# Initialize the OLS object and train it
regression_model = sm.OLS(y, X_tilde).fit()

Für die Vorhersage neuer Werte muss auch X_new mit PolynomialFeatures transformiert werden.

X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = regression_model.predict(X_new_tilde)

Das folgende ausführbare Beispiel zeigt den gesamten Prozess des Aufbaus einer Polynomialregression. X_new ist hier ein 1-dimensionales Array von Punkten zwischen -0.1 und 1.5. Diese werden für die Visualisierung benötigt. Da es sich um ein 1-dimensionales Array handelt, sollte die Methode reshape(-1,1) angewendet werden, bevor es in der PolynomialFeatures-Klasse verwendet wird.

12345678910111213141516171819
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 plt.show()
copy

Experimentieren Sie gerne mit den Werten von n in der achten Zeile. Sie werden sehen, wie sich die Grafik je nach Grad der Polynomregression verändert. Wenn Sie genau hinsehen, werden Sie feststellen, wie unterschiedlich die Vorhersagen für Merkmalswerte kleiner als 0 oder größer als 1,4 sind. Das ist das Thema des nächsten Kapitels.

question mark

Betrachten Sie den folgenden Code. In welchem Fall wird der Code fehlerfrei ausgeführt?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 3

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

course content

Kursinhalt

Lineare Regression mit Python

Lineare Regression mit Python

1. Einfache Lineare Regression
2. Multiple Lineare Regression
3. Polynomiale Regression
4. Das Beste Modell Auswählen

book
Erstellung der Polynomialregression

Datei laden

Für dieses Kapitel haben wir eine Datei namens poly.csv, die wir zunächst laden und deren Inhalt wir uns ansehen:

123456
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))
copy

Hier haben wir also ein Merkmal und das Ziel. Als Nächstes erstellen wir ein Streudiagramm, um die Beziehung zwischen Merkmal und Ziel zu verstehen:

123456789
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()
copy

Es ist schwer vorstellbar, dass eine Gerade diese Daten gut abbilden kann, daher ist eine Polynomregression die deutlich bessere Wahl.

Aufbau der X̃-Matrix

Wir verwenden erneut die OLS-Klasse. Dennoch müssen wir eine -Matrix erstellen. Dies geschieht manuell, indem wir eine quadrierte Spalte 'Feature' zum DataFrame hinzufügen:

df['Feature_squared'] = df['Feature'] ** 2

Wenn jedoch eine Polynomregression höheren Grades erstellt werden soll, müssten viele solcher Spalten hinzugefügt werden. Glücklicherweise bietet Scikit-Learn mit der Klasse PolynomialFeatures eine weniger aufwendige Möglichkeit.

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, wandelt die Methode reshape(-1,1) es in ein 2D-Array mit denselben Inhalten um:

X = X.reshape(-1,1)

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, da eine Series für fit_transform() nicht geeignet ist:

X = df['Feature']   # X is a pandas Series
X = df[['Feature']]  # X is a pandas DataFrame

Um also ein für die Polynomialregression vom Grad n zu erstellen, verwenden wir:

from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n)  # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
Note
Hinweis

Die Klasse PolynomialFeatures fügt außerdem eine Spalte mit Einsen hinzu, daher ist die Verwendung von sm.add_constant() nicht erforderlich.

Aufbau der Polynomialregression und Durchführung von Vorhersagen

Nachdem wir wissen, wie man ein erhält, sind wir bereit, die Polynomialregression auf die gleiche Weise wie die vorherigen Modelle zu erstellen:

y = df['Target']
# Prepare X_tilde
X = df[['Feature']]
X_tilde = PolynomialFeatures(n).fit_transform(X)
# Initialize the OLS object and train it
regression_model = sm.OLS(y, X_tilde).fit()

Für die Vorhersage neuer Werte muss auch X_new mit PolynomialFeatures transformiert werden.

X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = regression_model.predict(X_new_tilde)

Das folgende ausführbare Beispiel zeigt den gesamten Prozess des Aufbaus einer Polynomialregression. X_new ist hier ein 1-dimensionales Array von Punkten zwischen -0.1 und 1.5. Diese werden für die Visualisierung benötigt. Da es sich um ein 1-dimensionales Array handelt, sollte die Methode reshape(-1,1) angewendet werden, bevor es in der PolynomialFeatures-Klasse verwendet wird.

12345678910111213141516171819
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 plt.show()
copy

Experimentieren Sie gerne mit den Werten von n in der achten Zeile. Sie werden sehen, wie sich die Grafik je nach Grad der Polynomregression verändert. Wenn Sie genau hinsehen, werden Sie feststellen, wie unterschiedlich die Vorhersagen für Merkmalswerte kleiner als 0 oder größer als 1,4 sind. Das ist das Thema des nächsten Kapitels.

question mark

Betrachten Sie den folgenden Code. In welchem Fall wird der Code fehlerfrei ausgeführt?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 3
some-alt