Polynomiale Regressie Bouwen
Bestand laden
We laden poly.csv en inspecteren het:
1234import 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())
Vervolgens de relatie visualiseren:
12345import matplotlib.pyplot as plt X = df['Feature'] y = df['Target'] plt.scatter(X, y) plt.show()
Een rechte lijn past slecht, daarom is polynomiale regressie geschikter.
Hier volgt de herschreven sectie aangepast voor Scikit-learn.
Getransformeerde matrix opbouwen
Om polynomiale kenmerken te creëren, kunnen kwadratische kenmerken handmatig worden toegevoegd:
df['Feature_squared'] = df['Feature'] ** 2
Maar voor hogere graden is de PolynomialFeatures-klasse uit sklearn.preprocessing veel eenvoudiger en efficiënter. Deze vereist een 2D-structuur (DataFrame of 2D-array):
from sklearn.preprocessing import PolynomialFeatures
X = df[['Feature']]
# Create the transformer
poly = PolynomialFeatures(degree=2, include_bias=False)
# Transform the data
X_poly = poly.fit_transform(X)
Parameters
De klasse PolynomialFeatures heeft verschillende belangrijke parameters:
degree(standaard=2): de graad van de polynomiale features. Bijvoorbeeld, alsdegree=3, worden er .interaction_only(standaard=False): alsTrue, worden alleen interactie-features gegenereerd (bijvoorbeeld ), waardoor termen zoals worden vermeden.include_bias(standaard=True): alsTrue, wordt er een kolom met enen toegevoegd (bias-kolom).
Belangrijk: omdat LinearRegression de intercept automatisch berekent, stellen we meestal include_bias=False in om overbodigheid te voorkomen.
Polynomiale regressie bouwen
Zodra we de getransformeerde features (X_poly) hebben, kunnen we het standaard LinearRegression-model gebruiken.
from sklearn.linear_model import LinearRegression
y = df['Target']
# Initialize and train the model
model = LinearRegression()
model.fit(X_poly, y)
Voor voorspellen moet de nieuwe data met dezelfde transformer-instantie worden getransformeerd voordat deze aan het model wordt doorgegeven:
# Transform new data
X_new_poly = poly.transform(X_new)
# Predict
y_pred = model.predict(X_new_poly)
Volledig voorbeeld
123456789101112131415161718192021222324252627282930import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures # Load data df = pd.read_csv(file_link) X = df[['Feature']] y = df['Target'] # 1. Create Polynomial Features n = 2 poly = PolynomialFeatures(degree=n, include_bias=False) X_poly = poly.fit_transform(X) # 2. Train Linear Regression model = LinearRegression() model.fit(X_poly, y) # 3. Predict on new data X_new = np.linspace(-0.1, 1.5, 80).reshape(-1, 1) X_new_poly = poly.transform(X_new) y_pred = model.predict(X_new_poly) # Visualization plt.scatter(X, y, label='Data') plt.plot(X_new, y_pred, color='red', label=f'Degree {n}') plt.legend() plt.show()
Probeer de degree (n) aan te passen om te zien hoe de kromme verandert. U zult merken dat hogere graden de trainingsdata beter benaderen, maar zich grillig kunnen gedragen buiten het bereik—dit leidt naar het volgende hoofdstuk over Overfitting.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Geweldig!
Completion tarief verbeterd naar 3.33
Polynomiale Regressie Bouwen
Veeg om het menu te tonen
Bestand laden
We laden poly.csv en inspecteren het:
1234import 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())
Vervolgens de relatie visualiseren:
12345import matplotlib.pyplot as plt X = df['Feature'] y = df['Target'] plt.scatter(X, y) plt.show()
Een rechte lijn past slecht, daarom is polynomiale regressie geschikter.
Hier volgt de herschreven sectie aangepast voor Scikit-learn.
Getransformeerde matrix opbouwen
Om polynomiale kenmerken te creëren, kunnen kwadratische kenmerken handmatig worden toegevoegd:
df['Feature_squared'] = df['Feature'] ** 2
Maar voor hogere graden is de PolynomialFeatures-klasse uit sklearn.preprocessing veel eenvoudiger en efficiënter. Deze vereist een 2D-structuur (DataFrame of 2D-array):
from sklearn.preprocessing import PolynomialFeatures
X = df[['Feature']]
# Create the transformer
poly = PolynomialFeatures(degree=2, include_bias=False)
# Transform the data
X_poly = poly.fit_transform(X)
Parameters
De klasse PolynomialFeatures heeft verschillende belangrijke parameters:
degree(standaard=2): de graad van de polynomiale features. Bijvoorbeeld, alsdegree=3, worden er .interaction_only(standaard=False): alsTrue, worden alleen interactie-features gegenereerd (bijvoorbeeld ), waardoor termen zoals worden vermeden.include_bias(standaard=True): alsTrue, wordt er een kolom met enen toegevoegd (bias-kolom).
Belangrijk: omdat LinearRegression de intercept automatisch berekent, stellen we meestal include_bias=False in om overbodigheid te voorkomen.
Polynomiale regressie bouwen
Zodra we de getransformeerde features (X_poly) hebben, kunnen we het standaard LinearRegression-model gebruiken.
from sklearn.linear_model import LinearRegression
y = df['Target']
# Initialize and train the model
model = LinearRegression()
model.fit(X_poly, y)
Voor voorspellen moet de nieuwe data met dezelfde transformer-instantie worden getransformeerd voordat deze aan het model wordt doorgegeven:
# Transform new data
X_new_poly = poly.transform(X_new)
# Predict
y_pred = model.predict(X_new_poly)
Volledig voorbeeld
123456789101112131415161718192021222324252627282930import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures # Load data df = pd.read_csv(file_link) X = df[['Feature']] y = df['Target'] # 1. Create Polynomial Features n = 2 poly = PolynomialFeatures(degree=n, include_bias=False) X_poly = poly.fit_transform(X) # 2. Train Linear Regression model = LinearRegression() model.fit(X_poly, y) # 3. Predict on new data X_new = np.linspace(-0.1, 1.5, 80).reshape(-1, 1) X_new_poly = poly.transform(X_new) y_pred = model.predict(X_new_poly) # Visualization plt.scatter(X, y, label='Data') plt.plot(X_new, y_pred, color='red', label=f'Degree {n}') plt.legend() plt.show()
Probeer de degree (n) aan te passen om te zien hoe de kromme verandert. U zult merken dat hogere graden de trainingsdata beter benaderen, maar zich grillig kunnen gedragen buiten het bereik—dit leidt naar het volgende hoofdstuk over Overfitting.
Bedankt voor je feedback!