Costruzione della Regressione Polinomiale
Caricamento del file
Per questo capitolo, abbiamo un file chiamato poly.csv
, che caricheremo per primo e ne osserveremo il contenuto:
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))
Qui abbiamo quindi una caratteristica e il target. Successivamente, costruiremo un diagramma a dispersione per comprendere la relazione tra la caratteristica e il target:
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()
È difficile immaginare che una retta possa adattarsi bene a questi dati, quindi una regressione polinomiale sarà una scelta molto migliore.
Costruzione della matrice X̃
Utilizzeremo nuovamente la classe OLS
. Tuttavia, è necessario creare manualmente una matrice X̃ aggiungendo una colonna 'Feature'
al DataFrame come segue:
df['Feature_squared'] = df['Feature'] ** 2
Tuttavia, se si desidera costruire una regressione polinomiale di grado elevato, sarà necessario aggiungere molte colonne in questo modo. Fortunatamente, Scikit-Learn offre un modo meno laborioso per farlo utilizzando la classe PolynomialFeatures
.
Il metodo fit_transform(X)
si aspetta che X sia un array bidimensionale o un DataFrame di pandas.
Se X è un array numpy monodimensionale, il metodo reshape(-1,1)
lo trasformerà in un array bidimensionale con lo stesso contenuto:
X = X.reshape(-1,1)
Se X è una colonna di un DataFrame, puoi usare X = df[['col1']]
per ottenere un DataFrame invece di una Series di pandas, che non è adatta per fit_transform()
:
X = df['Feature'] # X is a pandas Series
X = df[['Feature']] # X is a pandas DataFrame
Per costruire una X̃ per la Regressione Polinomiale di grado n
, si utilizza:
from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n) # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
La classe PolynomialFeatures
aggiunge anche una colonna di 1, quindi non è necessario utilizzare sm.add_constant()
.
Costruzione della Regressione Polinomiale e Predizione dei Valori
Avendo appreso come ottenere una X̃, siamo pronti a costruire la Regressione Polinomiale nello stesso modo dei modelli precedenti:
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()
Per prevedere nuovi valori, anche X_new
deve essere trasformato utilizzando PolynomialFeatures
.
X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = regression_model.predict(X_new_tilde)
Il seguente esempio eseguibile mostra l'intero processo di costruzione della regressione polinomiale. X_new
qui è un array monodimensionale di punti compresi tra -0.1 e 1.5. Questi sono necessari per la visualizzazione. E poiché si tratta di un array monodimensionale, è necessario applicare il metodo reshape(-1,1)
prima di utilizzarlo nella classe PolynomialFeatures.
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()
Sentiti libero di modificare i valori di n
all'ottava riga. Potrai osservare come il grafico cambia a seconda del grado della regressione polinomiale. Se presti attenzione, potresti notare quanto siano diverse le previsioni per valori della variabile indipendente inferiori a 0 o superiori a 1.4. Questo sarà l'argomento del prossimo capitolo.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Awesome!
Completion rate improved to 5.26
Costruzione della Regressione Polinomiale
Scorri per mostrare il menu
Caricamento del file
Per questo capitolo, abbiamo un file chiamato poly.csv
, che caricheremo per primo e ne osserveremo il contenuto:
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))
Qui abbiamo quindi una caratteristica e il target. Successivamente, costruiremo un diagramma a dispersione per comprendere la relazione tra la caratteristica e il target:
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()
È difficile immaginare che una retta possa adattarsi bene a questi dati, quindi una regressione polinomiale sarà una scelta molto migliore.
Costruzione della matrice X̃
Utilizzeremo nuovamente la classe OLS
. Tuttavia, è necessario creare manualmente una matrice X̃ aggiungendo una colonna 'Feature'
al DataFrame come segue:
df['Feature_squared'] = df['Feature'] ** 2
Tuttavia, se si desidera costruire una regressione polinomiale di grado elevato, sarà necessario aggiungere molte colonne in questo modo. Fortunatamente, Scikit-Learn offre un modo meno laborioso per farlo utilizzando la classe PolynomialFeatures
.
Il metodo fit_transform(X)
si aspetta che X sia un array bidimensionale o un DataFrame di pandas.
Se X è un array numpy monodimensionale, il metodo reshape(-1,1)
lo trasformerà in un array bidimensionale con lo stesso contenuto:
X = X.reshape(-1,1)
Se X è una colonna di un DataFrame, puoi usare X = df[['col1']]
per ottenere un DataFrame invece di una Series di pandas, che non è adatta per fit_transform()
:
X = df['Feature'] # X is a pandas Series
X = df[['Feature']] # X is a pandas DataFrame
Per costruire una X̃ per la Regressione Polinomiale di grado n
, si utilizza:
from sklearn.preprocessing import PolynomialFeatures # Import the class
poly = PolynomialFeatures(n) # Initialize a PolynomialFeatures object
X_tilde = poly.fit_transform(X)
La classe PolynomialFeatures
aggiunge anche una colonna di 1, quindi non è necessario utilizzare sm.add_constant()
.
Costruzione della Regressione Polinomiale e Predizione dei Valori
Avendo appreso come ottenere una X̃, siamo pronti a costruire la Regressione Polinomiale nello stesso modo dei modelli precedenti:
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()
Per prevedere nuovi valori, anche X_new
deve essere trasformato utilizzando PolynomialFeatures
.
X_new_tilde = PolynomialFeatures(n).fit_transform(X_new)
y_pred = regression_model.predict(X_new_tilde)
Il seguente esempio eseguibile mostra l'intero processo di costruzione della regressione polinomiale. X_new
qui è un array monodimensionale di punti compresi tra -0.1 e 1.5. Questi sono necessari per la visualizzazione. E poiché si tratta di un array monodimensionale, è necessario applicare il metodo reshape(-1,1)
prima di utilizzarlo nella classe PolynomialFeatures.
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()
Sentiti libero di modificare i valori di n
all'ottava riga. Potrai osservare come il grafico cambia a seconda del grado della regressione polinomiale. Se presti attenzione, potresti notare quanto siano diverse le previsioni per valori della variabile indipendente inferiori a 0 o superiori a 1.4. Questo sarà l'argomento del prossimo capitolo.
Grazie per i tuoi commenti!