Opbygning 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:
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))
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:
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 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 X̃-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 X̃ 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)
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 X̃, 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.
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 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.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 5.26
Opbygning 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:
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))
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:
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 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 X̃-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 X̃ 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)
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 X̃, 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.
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 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.
Tak for dine kommentarer!