Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Bygge Polynomisk Regresjon | Polynomisk Regresjon
Lineær Regresjon med Python

bookBygge Polynomisk Regresjon

Laster inn fil

I dette kapittelet har vi en fil som heter poly.csv, som vi først skal laste inn og se på innholdet i:

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 variabel og målet. Deretter skal vi lage et spredningsdiagram for å forstå sammenhengen mellom variabelen og målet:

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 vanskelig å forestille seg at en rett linje passer godt til disse dataene, så en polynomisk regresjon vil være et langt bedre valg.

Bygging av X̃-matrise

Vi skal igjen bruke OLS-klassen. Likevel må vi opprette en -matrise. Dette gjør vi manuelt ved å legge til en kvadrert 'Feature'-kolonne i DataFrame slik:

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

Men hvis vi ønsker å bygge en polynomisk regresjon av høyere grad, vil det kreve at vi legger til mange slike kolonner. Heldigvis tilbyr Scikit-Learn en enklere måte å gjøre dette på ved hjelp av PolynomialFeatures-klassen.

Metoden fit_transform(X) forventer at X enten er et 2-d array eller en pandas DataFrame. Hvis X er et 1-d numpy array, vil metoden reshape(-1,1) gjøre det om til et 2-d array med samme innhold:

X = X.reshape(-1,1)

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

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

For å bygge en for polynomregresjon av grad n, bruker vi:

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

Klassen PolynomialFeatures legger også til en kolonne med 1-ere, så du trenger ikke bruke sm.add_constant().

Bygging av polynomisk regresjon og prediksjoner

Når vi vet hvordan vi får en , er vi klare til å bygge polynomisk regresjon på samme måte som 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 å predikere nye verdier må også X_new transformeres ved bruk av PolynomialFeatures.

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

Det følgende kjørbare eksempelet viser hele prosessen med å bygge polynomisk regresjon. X_new her er et 1-d array av punkter mellom -0.1 og 1.5. Disse brukes til visualisering. Og siden det er et 1-d array, må vi bruke reshape(-1,1)-metoden før vi bruker det 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 gjerne eksperimentere med verdiene til n på den åttende linjen. Du vil se hvordan plottet endrer seg avhengig av graden til polynomregresjonen. Hvis du følger med, kan du legge merke til hvor forskjellige prediksjonene er for funksjonsverdier lavere enn 0, eller høyere enn 1.4. Dette er temaet for neste kapittel.

question mark

Vurder følgende kode. I hvilket tilfelle vil koden kjøre uten feil?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 3

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

Can you explain what the X̃ matrix represents in polynomial regression?

How does the PolynomialFeatures class work in practice?

What happens if I increase the degree n in the polynomial regression?

Awesome!

Completion rate improved to 5.26

bookBygge Polynomisk Regresjon

Sveip for å vise menyen

Laster inn fil

I dette kapittelet har vi en fil som heter poly.csv, som vi først skal laste inn og se på innholdet i:

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 variabel og målet. Deretter skal vi lage et spredningsdiagram for å forstå sammenhengen mellom variabelen og målet:

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 vanskelig å forestille seg at en rett linje passer godt til disse dataene, så en polynomisk regresjon vil være et langt bedre valg.

Bygging av X̃-matrise

Vi skal igjen bruke OLS-klassen. Likevel må vi opprette en -matrise. Dette gjør vi manuelt ved å legge til en kvadrert 'Feature'-kolonne i DataFrame slik:

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

Men hvis vi ønsker å bygge en polynomisk regresjon av høyere grad, vil det kreve at vi legger til mange slike kolonner. Heldigvis tilbyr Scikit-Learn en enklere måte å gjøre dette på ved hjelp av PolynomialFeatures-klassen.

Metoden fit_transform(X) forventer at X enten er et 2-d array eller en pandas DataFrame. Hvis X er et 1-d numpy array, vil metoden reshape(-1,1) gjøre det om til et 2-d array med samme innhold:

X = X.reshape(-1,1)

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

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

For å bygge en for polynomregresjon av grad n, bruker vi:

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

Klassen PolynomialFeatures legger også til en kolonne med 1-ere, så du trenger ikke bruke sm.add_constant().

Bygging av polynomisk regresjon og prediksjoner

Når vi vet hvordan vi får en , er vi klare til å bygge polynomisk regresjon på samme måte som 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 å predikere nye verdier må også X_new transformeres ved bruk av PolynomialFeatures.

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

Det følgende kjørbare eksempelet viser hele prosessen med å bygge polynomisk regresjon. X_new her er et 1-d array av punkter mellom -0.1 og 1.5. Disse brukes til visualisering. Og siden det er et 1-d array, må vi bruke reshape(-1,1)-metoden før vi bruker det 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 gjerne eksperimentere med verdiene til n på den åttende linjen. Du vil se hvordan plottet endrer seg avhengig av graden til polynomregresjonen. Hvis du følger med, kan du legge merke til hvor forskjellige prediksjonene er for funksjonsverdier lavere enn 0, eller høyere enn 1.4. Dette er temaet for neste kapittel.

question mark

Vurder følgende kode. I hvilket tilfelle vil koden kjøre uten feil?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 3
some-alt