Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Bygga Polynomregression | Polynomregression
Linjär Regression med Python

bookBygga Polynomregression

Laddar fil

I detta kapitel har vi en fil som heter poly.csv, som vi först kommer att ladda och titta på dess innehåll:

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

Här har vi alltså en variabel och målet. Nästa steg är att skapa ett spridningsdiagram för att förstå relationen mellan variabeln och 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 är svårt att föreställa sig att en rät linje skulle passa dessa data väl, så en polynomregression är ett mycket bättre val.

Bygga X̃-matrisen

Vi kommer återigen att använda klassen OLS. Dock behöver vi skapa en -matris. Detta görs manuellt genom att lägga till en kvadrerad kolumn 'Feature' till DataFrame enligt följande:

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

Men om vi vill bygga en polynomregression av högre grad krävs det att många sådana kolumner läggs till. Lyckligtvis erbjuder Scikit-Learn ett enklare sätt att göra detta med klassen PolynomialFeatures.

fit_transform(X)-metoden förväntar sig att X är antingen en 2-d array eller en pandas DataFrame. Om din X är en 1-d numpy array, kommer metoden reshape(-1,1) att omvandla den till en 2-d array med samma innehåll:

X = X.reshape(-1,1)

Om din X är en kolumn från en DataFrame kan du använda X = df[['col1']] för att få en DataFrame istället för en pandas Series, vilket inte är lämpligt för fit_transform():

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

För att konstruera en för Polynomial Regression av grad n, används:

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

Klassen PolynomialFeatures lägger även till en kolumn med 1:or, så det är inte nödvändigt att använda sm.add_constant().

Bygga polynomregression och göra förutsägelser

När vi vet hur vi får en , är vi redo att bygga polynomregressionen på samma sätt som tidigare 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()

För att förutsäga nya värden ska X_new också transformeras med PolynomialFeatures.

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

Följande körbara exempel visar hela processen för att bygga en polynomregression. X_new här är en endimensionell array av punkter mellan -0.1 och 1.5. Dessa behövs för visualisering. Eftersom det är en endimensionell array bör vi använda metoden reshape(-1,1) innan vi använder den 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

Testa gärna att ändra värdet på n på den åttonde raden. Du kommer att se hur diagrammet förändras beroende på gradtalet för polynomregressionen. Om du är uppmärksam kan du märka hur olika förutsägelserna blir för funktionsvärden mindre än 0 eller större än 1.4. Det är ämnet för nästa kapitel.

question mark

Tänk på följande kod. I vilket fall kommer koden att köras utan fel?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 3

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

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

bookBygga Polynomregression

Svep för att visa menyn

Laddar fil

I detta kapitel har vi en fil som heter poly.csv, som vi först kommer att ladda och titta på dess innehåll:

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

Här har vi alltså en variabel och målet. Nästa steg är att skapa ett spridningsdiagram för att förstå relationen mellan variabeln och 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 är svårt att föreställa sig att en rät linje skulle passa dessa data väl, så en polynomregression är ett mycket bättre val.

Bygga X̃-matrisen

Vi kommer återigen att använda klassen OLS. Dock behöver vi skapa en -matris. Detta görs manuellt genom att lägga till en kvadrerad kolumn 'Feature' till DataFrame enligt följande:

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

Men om vi vill bygga en polynomregression av högre grad krävs det att många sådana kolumner läggs till. Lyckligtvis erbjuder Scikit-Learn ett enklare sätt att göra detta med klassen PolynomialFeatures.

fit_transform(X)-metoden förväntar sig att X är antingen en 2-d array eller en pandas DataFrame. Om din X är en 1-d numpy array, kommer metoden reshape(-1,1) att omvandla den till en 2-d array med samma innehåll:

X = X.reshape(-1,1)

Om din X är en kolumn från en DataFrame kan du använda X = df[['col1']] för att få en DataFrame istället för en pandas Series, vilket inte är lämpligt för fit_transform():

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

För att konstruera en för Polynomial Regression av grad n, används:

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

Klassen PolynomialFeatures lägger även till en kolumn med 1:or, så det är inte nödvändigt att använda sm.add_constant().

Bygga polynomregression och göra förutsägelser

När vi vet hur vi får en , är vi redo att bygga polynomregressionen på samma sätt som tidigare 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()

För att förutsäga nya värden ska X_new också transformeras med PolynomialFeatures.

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

Följande körbara exempel visar hela processen för att bygga en polynomregression. X_new här är en endimensionell array av punkter mellan -0.1 och 1.5. Dessa behövs för visualisering. Eftersom det är en endimensionell array bör vi använda metoden reshape(-1,1) innan vi använder den 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

Testa gärna att ändra värdet på n på den åttonde raden. Du kommer att se hur diagrammet förändras beroende på gradtalet för polynomregressionen. Om du är uppmärksam kan du märka hur olika förutsägelserna blir för funktionsvärden mindre än 0 eller större än 1.4. Det är ämnet för nästa kapitel.

question mark

Tänk på följande kod. I vilket fall kommer koden att köras utan fel?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 3. Kapitel 3
some-alt