Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Costruzione della Regressione Polinomiale | Regressione Polinomiale
Regressione Lineare con Python
course content

Contenuti del Corso

Regressione Lineare con Python

Regressione Lineare con Python

1. Regressione Lineare Semplice
2. Regressione Lineare Multipla
3. Regressione Polinomiale
4. Scelta del Modello Migliore

book
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:

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

Qui abbiamo quindi una caratteristica e il target. Successivamente, costruiremo un diagramma a dispersione per comprendere la relazione tra la caratteristica e il target:

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

È 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 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 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)
Note
Nota

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 , 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.

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

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.

question mark

Considera il seguente codice. In quale caso il codice verrà eseguito senza errori?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 3

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

course content

Contenuti del Corso

Regressione Lineare con Python

Regressione Lineare con Python

1. Regressione Lineare Semplice
2. Regressione Lineare Multipla
3. Regressione Polinomiale
4. Scelta del Modello Migliore

book
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:

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

Qui abbiamo quindi una caratteristica e il target. Successivamente, costruiremo un diagramma a dispersione per comprendere la relazione tra la caratteristica e il target:

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

È 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 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 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)
Note
Nota

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 , 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.

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

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.

question mark

Considera il seguente codice. In quale caso il codice verrà eseguito senza errori?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 3
some-alt