Interpolazione vs Estrapolazione
Nel capitolo precedente, abbiamo osservato che le nostre previsioni utilizzando modelli diversi diventano più varie ai margini.
Le previsioni diventano inaffidabili una volta che ci si sposta al di fuori dell'intervallo dei dati di addestramento. Prevedere oltre tale intervallo è estrapolazione, mentre prevedere al suo interno è interpolazione.
La regressione non gestisce bene l'estrapolazione. Viene utilizzata per l'interpolazione e può produrre previsioni assurde quando nuove istanze sono fuori dall'intervallo del set di addestramento.
Intervalli di confidenza
OLS può anche restituire intervalli di confidenza per la retta di regressione:
lower = model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_lower']
upper = model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_upper']
alpha rappresenta il livello di confidenza (tipicamente 0.05). Questo fornisce i limiti inferiore e superiore per ciascun valore in X_new_tilde.
È possibile quindi tracciare la retta di regressione insieme al suo intervallo di confidenza.
12345678910111213141516171819202122import 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 = 4 # 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) # 1-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new.reshape(-1,1)) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) lower = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_lower'] # Get lower bound for each point upper = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_upper'] # get upper bound for each point plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.fill_between(X_new, lower, upper, alpha=0.4) plt.show()
Poiché non si conosce la distribuzione reale del target, la retta di regressione rappresenta solo un'approssimazione. L’intervallo di confidenza indica dove probabilmente si trova la retta reale. L’intervallo si allarga man mano che ci si allontana dai dati di addestramento.
Gli intervalli di confidenza sono costruiti assumendo che il modello sia stato scelto correttamente (ad esempio, Regressione Lineare Semplice o Regressione Polinomiale di grado 4).
Se il modello è scelto in modo errato, l'intervallo di confidenza non è affidabile, così come la retta stessa. Imparerai come selezionare il modello migliore nella sezione successiva.
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
Interpolazione vs Estrapolazione
Scorri per mostrare il menu
Nel capitolo precedente, abbiamo osservato che le nostre previsioni utilizzando modelli diversi diventano più varie ai margini.
Le previsioni diventano inaffidabili una volta che ci si sposta al di fuori dell'intervallo dei dati di addestramento. Prevedere oltre tale intervallo è estrapolazione, mentre prevedere al suo interno è interpolazione.
La regressione non gestisce bene l'estrapolazione. Viene utilizzata per l'interpolazione e può produrre previsioni assurde quando nuove istanze sono fuori dall'intervallo del set di addestramento.
Intervalli di confidenza
OLS può anche restituire intervalli di confidenza per la retta di regressione:
lower = model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_lower']
upper = model.get_prediction(X_new_tilde).summary_frame(alpha)['mean_ci_upper']
alpha rappresenta il livello di confidenza (tipicamente 0.05). Questo fornisce i limiti inferiore e superiore per ciascun valore in X_new_tilde.
È possibile quindi tracciare la retta di regressione insieme al suo intervallo di confidenza.
12345678910111213141516171819202122import 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 = 4 # 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) # 1-d array of new feature values X_new_tilde = PolynomialFeatures(n).fit_transform(X_new.reshape(-1,1)) # Transform X_new for predict() method y_pred = regression_model.predict(X_new_tilde) lower = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_lower'] # Get lower bound for each point upper = regression_model.get_prediction(X_new_tilde).summary_frame(0.05)['mean_ci_upper'] # get upper bound for each point plt.scatter(X, y) # Build a scatterplot plt.plot(X_new, y_pred) # Build a Polynomial Regression graph plt.fill_between(X_new, lower, upper, alpha=0.4) plt.show()
Poiché non si conosce la distribuzione reale del target, la retta di regressione rappresenta solo un'approssimazione. L’intervallo di confidenza indica dove probabilmente si trova la retta reale. L’intervallo si allarga man mano che ci si allontana dai dati di addestramento.
Gli intervalli di confidenza sono costruiti assumendo che il modello sia stato scelto correttamente (ad esempio, Regressione Lineare Semplice o Regressione Polinomiale di grado 4).
Se il modello è scelto in modo errato, l'intervallo di confidenza non è affidabile, così come la retta stessa. Imparerai come selezionare il modello migliore nella sezione successiva.
Grazie per i tuoi commenti!