Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Polynomiale Regressie Opbouwen | Polynomiale Regressie
Lineaire Regressie Met Python
course content

Cursusinhoud

Lineaire Regressie Met Python

Lineaire Regressie Met Python

1. Eenvoudige Lineaire Regressie
2. Meervoudige Lineaire Regressie
3. Polynomiale Regressie
4. Het Beste Model Kiezen

book
Polynomiale Regressie Opbouwen

Bestand laden

Voor dit hoofdstuk hebben we een bestand genaamd poly.csv, dat we eerst zullen laden en de inhoud ervan bekijken:

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 hebben we dus één kenmerk en de target. Vervolgens maken we een spreidingsdiagram om de relatie tussen het kenmerk en de target te begrijpen:

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

Het is moeilijk voor te stellen dat een rechte lijn deze gegevens goed kan benaderen, dus een polynomiale regressie is een veel betere keuze.

X̃-matrix opbouwen

We gebruiken opnieuw de OLS-klasse. Toch moeten we een -matrix creëren. Dit doen we handmatig door een gekwadrateerde kolom 'Feature' toe te voegen aan de DataFrame als volgt:

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

Maar als we een polynomiale regressie van hoge graad willen bouwen, vereist dat het toevoegen van veel van zulke kolommen. Gelukkig biedt Scikit-Learn een minder omslachtige manier met de PolynomialFeatures-klasse.

fit_transform(X)-methode verwacht dat X een 2-d array of een pandas DataFrame is. Als je X een 1-d numpy array is, zal de methode reshape(-1,1) deze omzetten naar een 2-d array met dezelfde inhoud:

X = X.reshape(-1,1)

Als je X een kolom uit een DataFrame is, kun je X = df[['col1']] gebruiken om een DataFrame te verkrijgen in plaats van een pandas Series, wat niet geschikt is voor fit_transform():

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

Om een te construeren voor de Polynomial Regression van graad n, gebruiken we:

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

De klasse PolynomialFeatures voegt ook een kolom met 1'en toe, dus het is niet nodig om sm.add_constant() te gebruiken.

Het bouwen van de polynomiale regressie en het maken van voorspellingen

Nu we weten hoe we een verkrijgen, zijn we klaar om de polynomiale regressie op dezelfde manier te bouwen als de eerdere modellen:

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

Voor het voorspellen van nieuwe waarden moet X_new ook worden getransformeerd met behulp van PolynomialFeatures.

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

Het volgende uitvoerbare voorbeeld toont het volledige proces van het bouwen van een polynomiale regressie. X_new is hier een 1-d array van punten tussen -0.1 en 1.5. Deze zijn nodig voor visualisatie. En omdat het een 1-d array is, moet de methode reshape(-1,1) worden toegepast voordat deze wordt gebruikt in de PolynomialFeatures-klasse.

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

Voel je vrij om te experimenteren met de waarden van n in de achtste regel. Je zult zien hoe de grafiek verandert afhankelijk van de graad van de polynomiale regressie. Als je goed oplet, kun je merken hoe verschillend de voorspellingen zijn voor featurewaarden lager dan 0 of groter dan 1.4. Dat is het onderwerp van het volgende hoofdstuk.

question mark

Beschouw de volgende code. In welk geval zal de code zonder fouten worden uitgevoerd?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 3

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

course content

Cursusinhoud

Lineaire Regressie Met Python

Lineaire Regressie Met Python

1. Eenvoudige Lineaire Regressie
2. Meervoudige Lineaire Regressie
3. Polynomiale Regressie
4. Het Beste Model Kiezen

book
Polynomiale Regressie Opbouwen

Bestand laden

Voor dit hoofdstuk hebben we een bestand genaamd poly.csv, dat we eerst zullen laden en de inhoud ervan bekijken:

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 hebben we dus één kenmerk en de target. Vervolgens maken we een spreidingsdiagram om de relatie tussen het kenmerk en de target te begrijpen:

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

Het is moeilijk voor te stellen dat een rechte lijn deze gegevens goed kan benaderen, dus een polynomiale regressie is een veel betere keuze.

X̃-matrix opbouwen

We gebruiken opnieuw de OLS-klasse. Toch moeten we een -matrix creëren. Dit doen we handmatig door een gekwadrateerde kolom 'Feature' toe te voegen aan de DataFrame als volgt:

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

Maar als we een polynomiale regressie van hoge graad willen bouwen, vereist dat het toevoegen van veel van zulke kolommen. Gelukkig biedt Scikit-Learn een minder omslachtige manier met de PolynomialFeatures-klasse.

fit_transform(X)-methode verwacht dat X een 2-d array of een pandas DataFrame is. Als je X een 1-d numpy array is, zal de methode reshape(-1,1) deze omzetten naar een 2-d array met dezelfde inhoud:

X = X.reshape(-1,1)

Als je X een kolom uit een DataFrame is, kun je X = df[['col1']] gebruiken om een DataFrame te verkrijgen in plaats van een pandas Series, wat niet geschikt is voor fit_transform():

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

Om een te construeren voor de Polynomial Regression van graad n, gebruiken we:

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

De klasse PolynomialFeatures voegt ook een kolom met 1'en toe, dus het is niet nodig om sm.add_constant() te gebruiken.

Het bouwen van de polynomiale regressie en het maken van voorspellingen

Nu we weten hoe we een verkrijgen, zijn we klaar om de polynomiale regressie op dezelfde manier te bouwen als de eerdere modellen:

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

Voor het voorspellen van nieuwe waarden moet X_new ook worden getransformeerd met behulp van PolynomialFeatures.

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

Het volgende uitvoerbare voorbeeld toont het volledige proces van het bouwen van een polynomiale regressie. X_new is hier een 1-d array van punten tussen -0.1 en 1.5. Deze zijn nodig voor visualisatie. En omdat het een 1-d array is, moet de methode reshape(-1,1) worden toegepast voordat deze wordt gebruikt in de PolynomialFeatures-klasse.

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

Voel je vrij om te experimenteren met de waarden van n in de achtste regel. Je zult zien hoe de grafiek verandert afhankelijk van de graad van de polynomiale regressie. Als je goed oplet, kun je merken hoe verschillend de voorspellingen zijn voor featurewaarden lager dan 0 of groter dan 1.4. Dat is het onderwerp van het volgende hoofdstuk.

question mark

Beschouw de volgende code. In welk geval zal de code zonder fouten worden uitgevoerd?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 3
some-alt