Costruzione della Regressione Polinomiale
Caricamento del file
Carichiamo poly.csv e lo ispezioniamo:
1234import 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())
Successivamente, visualizzare la relazione:
12345import matplotlib.pyplot as plt X = df['Feature'] y = df['Target'] plt.scatter(X, y) plt.show()
Una retta si adatta male, quindi la regressione polinomiale è più appropriata.
Ecco la sezione riscritta e adattata per Scikit-learn.
Costruzione della matrice trasformata
Per creare feature polinomiali, si possono aggiungere manualmente le feature al quadrato:
df['Feature_squared'] = df['Feature'] ** 2
Tuttavia, per gradi superiori, la classe PolynomialFeatures da sklearn.preprocessing è molto più semplice ed efficiente. Richiede una struttura 2-D (DataFrame o array 2-D):
from sklearn.preprocessing import PolynomialFeatures
X = df[['Feature']]
# Create the transformer
poly = PolynomialFeatures(degree=2, include_bias=False)
# Transform the data
X_poly = poly.fit_transform(X)
Parametri
La classe PolynomialFeatures dispone di diversi parametri importanti:
degree(default=2): il grado delle feature polinomiali. Ad esempio, sedegree=3, genera .interaction_only(default=False): se impostato suTrue, vengono prodotte solo le feature di interazione (ad esempio, ), evitando termini come .include_bias(default=True): se impostato suTrue, aggiunge una colonna di uni (colonna di bias).
Importante: poiché LinearRegression calcola automaticamente l'intercetta, solitamente si imposta include_bias=False per evitare ridondanze.
Costruzione della regressione polinomiale
Una volta ottenute le feature trasformate (X_poly), è possibile utilizzare il modello standard LinearRegression.
from sklearn.linear_model import LinearRegression
y = df['Target']
# Initialize and train the model
model = LinearRegression()
model.fit(X_poly, y)
Per effettuare previsioni è necessario trasformare i nuovi dati utilizzando la stessa istanza del trasformatore prima di passarli al modello:
# Transform new data
X_new_poly = poly.transform(X_new)
# Predict
y_pred = model.predict(X_new_poly)
Esempio completo
123456789101112131415161718192021222324252627282930import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures # Load data df = pd.read_csv(file_link) X = df[['Feature']] y = df['Target'] # 1. Create Polynomial Features n = 2 poly = PolynomialFeatures(degree=n, include_bias=False) X_poly = poly.fit_transform(X) # 2. Train Linear Regression model = LinearRegression() model.fit(X_poly, y) # 3. Predict on new data X_new = np.linspace(-0.1, 1.5, 80).reshape(-1, 1) X_new_poly = poly.transform(X_new) y_pred = model.predict(X_new_poly) # Visualization plt.scatter(X, y, label='Data') plt.plot(X_new, y_pred, color='red', label=f'Degree {n}') plt.legend() plt.show()
Prova a modificare il valore di degree (n) per osservare come cambia la curva. Noterai che gradi più alti si adattano meglio ai dati di addestramento ma possono comportarsi in modo irregolare fuori dall'intervallo—questo introduce il prossimo capitolo sull'Overfitting.
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
Fantastico!
Completion tasso migliorato a 3.33
Costruzione della Regressione Polinomiale
Scorri per mostrare il menu
Caricamento del file
Carichiamo poly.csv e lo ispezioniamo:
1234import 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())
Successivamente, visualizzare la relazione:
12345import matplotlib.pyplot as plt X = df['Feature'] y = df['Target'] plt.scatter(X, y) plt.show()
Una retta si adatta male, quindi la regressione polinomiale è più appropriata.
Ecco la sezione riscritta e adattata per Scikit-learn.
Costruzione della matrice trasformata
Per creare feature polinomiali, si possono aggiungere manualmente le feature al quadrato:
df['Feature_squared'] = df['Feature'] ** 2
Tuttavia, per gradi superiori, la classe PolynomialFeatures da sklearn.preprocessing è molto più semplice ed efficiente. Richiede una struttura 2-D (DataFrame o array 2-D):
from sklearn.preprocessing import PolynomialFeatures
X = df[['Feature']]
# Create the transformer
poly = PolynomialFeatures(degree=2, include_bias=False)
# Transform the data
X_poly = poly.fit_transform(X)
Parametri
La classe PolynomialFeatures dispone di diversi parametri importanti:
degree(default=2): il grado delle feature polinomiali. Ad esempio, sedegree=3, genera .interaction_only(default=False): se impostato suTrue, vengono prodotte solo le feature di interazione (ad esempio, ), evitando termini come .include_bias(default=True): se impostato suTrue, aggiunge una colonna di uni (colonna di bias).
Importante: poiché LinearRegression calcola automaticamente l'intercetta, solitamente si imposta include_bias=False per evitare ridondanze.
Costruzione della regressione polinomiale
Una volta ottenute le feature trasformate (X_poly), è possibile utilizzare il modello standard LinearRegression.
from sklearn.linear_model import LinearRegression
y = df['Target']
# Initialize and train the model
model = LinearRegression()
model.fit(X_poly, y)
Per effettuare previsioni è necessario trasformare i nuovi dati utilizzando la stessa istanza del trasformatore prima di passarli al modello:
# Transform new data
X_new_poly = poly.transform(X_new)
# Predict
y_pred = model.predict(X_new_poly)
Esempio completo
123456789101112131415161718192021222324252627282930import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures # Load data df = pd.read_csv(file_link) X = df[['Feature']] y = df['Target'] # 1. Create Polynomial Features n = 2 poly = PolynomialFeatures(degree=n, include_bias=False) X_poly = poly.fit_transform(X) # 2. Train Linear Regression model = LinearRegression() model.fit(X_poly, y) # 3. Predict on new data X_new = np.linspace(-0.1, 1.5, 80).reshape(-1, 1) X_new_poly = poly.transform(X_new) y_pred = model.predict(X_new_poly) # Visualization plt.scatter(X, y, label='Data') plt.plot(X_new, y_pred, color='red', label=f'Degree {n}') plt.legend() plt.show()
Prova a modificare il valore di degree (n) per osservare come cambia la curva. Noterai che gradi più alti si adattano meglio ai dati di addestramento ma possono comportarsi in modo irregolare fuori dall'intervallo—questo introduce il prossimo capitolo sull'Overfitting.
Grazie per i tuoi commenti!