Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Opbygning af Polynomiel Regression | Polynomiel Regression
Lineær Regression med Python

bookOpbygning af Polynomiel Regression

Indlæsning af fil

I dette kapitel har vi en fil ved navn poly.csv, som vi først vil indlæse og se på indholdet af:

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

Her har vi altså én feature og målet. Dernæst vil vi oprette et scatter plot for at forstå relationen mellem feature og mål:

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

Det er svært at forestille sig, at en ret linje passer godt til disse data, så en polynomiel regression vil være et langt bedre valg.

Opbygning af X̃-matrix

Vi vil igen bruge OLS-klassen. Vi skal dog manuelt oprette en -matrix ved at tilføje en kvadreret 'Feature'-kolonne til DataFrame på følgende måde:

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

Men hvis vi ønsker at opbygge en polynomiel regression af højere grad, vil det kræve, at vi tilføjer mange kolonner på denne måde. Heldigvis tilbyder Scikit-Learn en mindre besværlig metode ved hjælp af PolynomialFeatures-klassen.

Metoden fit_transform(X) forventer, at X enten er et 2-d array eller en pandas DataFrame. Hvis din X er et 1-d numpy array, vil metoden reshape(-1,1) omdanne det til et 2-d array med samme indhold:

X = X.reshape(-1,1)

Hvis din X er en kolonne fra en DataFrame, kan du bruge X = df[['col1']] for at få en DataFrame i stedet for en pandas Series, som ikke er egnet til fit_transform():

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

For at konstruere en til Polynomial Regression af grad n, anvendes:

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

Klassen PolynomialFeatures tilføjer også en kolonne med 1-taller, så det er ikke nødvendigt at bruge sm.add_constant().

Opbygning af polynomiel regression og forudsigelser

Når vi ved, hvordan vi får en , er vi klar til at opbygge polynomiel regression på samme måde som de tidligere modeller:

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

For at forudsige nye værdier skal X_new også transformeres ved hjælp af PolynomialFeatures.

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

Det følgende eksekverbare eksempel viser hele processen med at opbygge polynomiel regression. X_new her er et 1-d array af punkter mellem -0.1 og 1.5. De bruges til visualisering. Og da det er et 1-d array, skal vi anvende reshape(-1,1)-metoden, før det bruges i PolynomialFeatures-klassen.

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

Du kan frit eksperimentere med værdierne af n på ottende linje. Du vil se, hvordan plottet ændrer sig afhængigt af graden af polynomiel regression. Hvis du er opmærksom, kan du bemærke, hvor forskellige forudsigelserne er for feature-værdier mindre end 0 eller større end 1.4. Dette er emnet for det næste kapitel.

question mark

Overvej følgende kode. I hvilket tilfælde vil koden køre uden fejl?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 3

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Awesome!

Completion rate improved to 5.26

bookOpbygning af Polynomiel Regression

Stryg for at vise menuen

Indlæsning af fil

I dette kapitel har vi en fil ved navn poly.csv, som vi først vil indlæse og se på indholdet af:

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

Her har vi altså én feature og målet. Dernæst vil vi oprette et scatter plot for at forstå relationen mellem feature og mål:

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

Det er svært at forestille sig, at en ret linje passer godt til disse data, så en polynomiel regression vil være et langt bedre valg.

Opbygning af X̃-matrix

Vi vil igen bruge OLS-klassen. Vi skal dog manuelt oprette en -matrix ved at tilføje en kvadreret 'Feature'-kolonne til DataFrame på følgende måde:

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

Men hvis vi ønsker at opbygge en polynomiel regression af højere grad, vil det kræve, at vi tilføjer mange kolonner på denne måde. Heldigvis tilbyder Scikit-Learn en mindre besværlig metode ved hjælp af PolynomialFeatures-klassen.

Metoden fit_transform(X) forventer, at X enten er et 2-d array eller en pandas DataFrame. Hvis din X er et 1-d numpy array, vil metoden reshape(-1,1) omdanne det til et 2-d array med samme indhold:

X = X.reshape(-1,1)

Hvis din X er en kolonne fra en DataFrame, kan du bruge X = df[['col1']] for at få en DataFrame i stedet for en pandas Series, som ikke er egnet til fit_transform():

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

For at konstruere en til Polynomial Regression af grad n, anvendes:

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

Klassen PolynomialFeatures tilføjer også en kolonne med 1-taller, så det er ikke nødvendigt at bruge sm.add_constant().

Opbygning af polynomiel regression og forudsigelser

Når vi ved, hvordan vi får en , er vi klar til at opbygge polynomiel regression på samme måde som de tidligere modeller:

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

For at forudsige nye værdier skal X_new også transformeres ved hjælp af PolynomialFeatures.

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

Det følgende eksekverbare eksempel viser hele processen med at opbygge polynomiel regression. X_new her er et 1-d array af punkter mellem -0.1 og 1.5. De bruges til visualisering. Og da det er et 1-d array, skal vi anvende reshape(-1,1)-metoden, før det bruges i PolynomialFeatures-klassen.

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

Du kan frit eksperimentere med værdierne af n på ottende linje. Du vil se, hvordan plottet ændrer sig afhængigt af graden af polynomiel regression. Hvis du er opmærksom, kan du bemærke, hvor forskellige forudsigelserne er for feature-værdier mindre end 0 eller større end 1.4. Dette er emnet for det næste kapitel.

question mark

Overvej følgende kode. I hvilket tilfælde vil koden køre uden fejl?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 3
some-alt