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

Suggested prompts:

Spørg mig spørgsmål om dette emne

Opsummér dette kapitel

Vis virkelige eksempler

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