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
course content

Kursinnehåll

Linjär Regression med Python

Linjär Regression med Python

1. Enkel Linjär Regression
2. Multipel Linjär Regression
3. Polynomregression
4. Välja Den Bästa Modellen

book
Bygga Polynomregression

Laddar fil

För 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. Vi behöver dock 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 vi lägger till många sådana kolumner. 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 tvådimensionell array eller en pandas DataFrame. Om din X är en endimensionell numpy-array, kommer metoden reshape(-1,1) att omvandla den till en tvådimensionell 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 polynomregression 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
Observera

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 prediktioner

När vi vet hur man 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 bör X_new också transformeras med hjälp av 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 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 den används 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 gärna experimentera med värdena för 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 är 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

course content

Kursinnehåll

Linjär Regression med Python

Linjär Regression med Python

1. Enkel Linjär Regression
2. Multipel Linjär Regression
3. Polynomregression
4. Välja Den Bästa Modellen

book
Bygga Polynomregression

Laddar fil

För 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. Vi behöver dock 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 vi lägger till många sådana kolumner. 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 tvådimensionell array eller en pandas DataFrame. Om din X är en endimensionell numpy-array, kommer metoden reshape(-1,1) att omvandla den till en tvådimensionell 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 polynomregression 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
Observera

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 prediktioner

När vi vet hur man 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 bör X_new också transformeras med hjälp av 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 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 den används 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 gärna experimentera med värdena för 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 är 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