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:
123456import 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))
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:
123456789import 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()
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 X̃-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 X̃ 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)
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 X̃, ä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.
12345678910111213141516171819import 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()
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.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 5.26
Bygga Polynomregression
Svep för att visa menyn
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:
123456import 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))
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:
123456789import 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()
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 X̃-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 X̃ 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)
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 X̃, ä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.
12345678910111213141516171819import 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()
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.
Tack för dina kommentarer!