La Regressione Lineare con Ordinary Least Square (OLS) nel Machine Learning con scikit-learn

Regressione Lineare con Ordinary Least Square header

Ordinary Least Squares (OLS) nell’ambito del Machine Learning è un metodo utilizzato per addestrare modelli di regressione lineare. In sostanza, cerca di minimizzare la somma dei quadrati delle differenze tra i valori predetti dal modello e i valori effettivi osservati nel set di dati di addestramento. Questo approccio è molto comune ed è alla base di molti modelli di regressione lineare.

Ordinary Least Squares (OLS)

Supponiamo di avere un insieme di dati di addestramento composto da ( n ) osservazioni. Ogni osservazione è costituita da una coppia di valori: una variabile indipendente ( x_i ) e la corrispondente variabile dipendente ( y_i ).

L’obiettivo del modello di regressione lineare è trovare la migliore retta di regressione che minimizza la somma dei quadrati delle differenze tra i valori predetti dal modello e i valori effettivi osservati.

La retta di regressione ha l’equazione:

 y = \beta_0 + \beta_1 x

Dove:

  • ( y ) è la variabile dipendente,
  • ( x ) è la variabile indipendente,
  •  \beta_0 è l’intercetta,
  •  \beta_1 è il coefficiente angolare.

Per addestrare il modello di regressione lineare usando OLS, dobbiamo trovare i valori ottimali per  \beta_0 e  \beta_1 che minimizzano la funzione di costo, che è definita come la somma dei quadrati degli errori (SSE):

 SSE = \sum_{i=1}^{n} (y_i - (\beta_0 + \beta_1 x_i))^2

L’approccio di OLS consiste nel trovare i valori ottimali di  \beta_0 e  \beta_1 che minimizzano questa funzione di costo. Questo può essere fatto risolvendo le derivate parziali della funzione SSE rispetto a  \beta_0 e  \beta_1 , impostandole a zero e risolvendo le equazioni risultanti. Le soluzioni risultanti sono chiamate stime dei minimi quadrati ordinari dei coefficienti di regressione.

Le formule per calcolare le stime dei minimi quadrati ordinari sono:

 \beta_1 = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{n} (x_i - \bar{x})^2}

 \beta_0 = \bar{y} - \beta_1 \bar{x}

Dove:

  •  \bar{x} è la media dei valori di ( x ),
  •  \bar{y} è la media dei valori di ( y ).

Queste formule ci forniscono i valori ottimali per i coefficienti di regressione  \beta_0 e  \beta_1 , che minimizzano la somma dei quadrati degli errori. Una volta ottenuti questi valori, possiamo utilizzare la retta di regressione per fare previsioni su nuovi dati.

Ordinary Least Squares (OLS) e la Linear Regression in scikit-learn

La libreria scikit-learn non fornisce una classe specifica chiamata “Ordinary Least Squares (OLS)” perché l’algoritmo OLS è implicitamente implementato nella classe LinearRegressiondi scikit-learn.

La classe LinearRegression di scikit-learn utilizza l’approccio dei minimi quadrati ordinari per addestrare il modello di regressione lineare. Quando chiami il metodo fit() su un oggetto LinearRegression, il modello viene addestrato utilizzando l’algoritmo OLS per trovare i coefficienti ottimali che minimizzano la somma dei quadrati degli errori.

Quindi, per utilizzare l’approccio OLS in scikit-learn, è sufficiente utilizzare la classe LinearRegression e chiamare il metodo fit() sul set di dati di addestramento.

Ecco un esempio di utilizzo della classe LinearRegression per addestrare un modello di regressione lineare utilizzando l’approccio OLS

import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

# Generating synthetic data
np.random.seed(0)
X_train = 2 * np.random.rand(100, 1)  # Independent variable
y_train = 4 + 3 * X + np.random.randn(100, 1)  # Dependent variable with Gaussian noise

# Training the linear regression model
model = LinearRegression()
model.fit(X_train, y_train)

# Printing the model coefficients
print("Intercept:", model.intercept_)
print("Coefficients:", model.coef_)

# Predictions on new data
X_test = np.array([[0], [1], [2]])
Y_test = 4 + 3 * X_test
predictions = model.predict(X_test)

# Visualizing the data and the regression line
plt.scatter(X_train, y_train, color='blue')
plt.plot(X_test, predictions, color='red')
plt.xlabel('Independent Variable')
plt.ylabel('Dependent Variable')
plt.title('Linear Regression with scikit-learn')
plt.show()

Eseguendo si ottiene

Intercept: [4.22215108]
Coefficients: [[2.96846751]]
OLS Linear Regression - scatter plot 1

Valutazione della validità del modello

Per valutare la bontà di un modello di regressione lineare, ci sono diversi metodi che si possono utilizzare. Alcuni dei più comuni includono:

  • Errore Quadratico Medio (MSE): Calcolare l’errore quadratico medio tra le previsioni del modello e i valori effettivi nel set di dati di test. L’MSE misura la media dei quadrati delle differenze tra le previsioni del modello e i valori effettivi. Un MSE più basso indica una migliore bontà del modello.
  • R^2 Score: Calcolare il coefficiente di determinazione, noto come R^2 score. R^2 è una misura statistica della bontà di adattamento del modello alle osservazioni. Può essere interpretato come la proporzione della varianza nei dati che è spiegata dal modello. Un R^2 score più vicino a 1 indica un modello migliore, mentre un valore vicino a 0 indica un modello peggiore.
  • Grafico dei Residui: Visualizzare un grafico dei residui, che rappresenta le differenze tra i valori effettivi e le previsioni del modello. Se i residui sono distribuiti in modo casuale attorno a zero e non mostrano alcun pattern evidente, è un segno di un buon modello.
  • Validazione Incrociata: Utilizzare la tecnica della validazione incrociata per valutare le prestazioni del modello su più fold dei dati. Questo fornisce una stima più robusta delle prestazioni del modello rispetto a una singola divisione dei dati in set di addestramento e test.

Inoltre, è sempre importante considerare il contesto specifico del problema e come le metriche di valutazione si traducono nel contesto del problema di dominio. Ad esempio, in alcuni casi, una certa quantità di errore può essere accettabile, mentre in altri casi anche un piccolo errore può avere conseguenze significative.

Applichiamo adesso questi metodi di valutazione sul nostro esempio di regressione lineare.

from sklearn.metrics import mean_squared_error, r2_score

# Computing Mean Squared Error (MSE) on training and test sets
train_predictions = model.predict(X_train)
train_mse = mean_squared_error(y_train, train_predictions)
print("Mean Squared Error on training set:", train_mse)

test_predictions = model.predict(X_test)
test_mse = mean_squared_error(y_test, test_predictions)
print("Mean Squared Error on test set:", test_mse)

# Computing R^2 score on training and test sets
train_r2 = r2_score(y_train, train_predictions)
test_r2 = r2_score(y_test, test_predictions)

print("R^2 score on training set:", train_r2)
print("R^2 score on test set:", test_r2)

Eseguendo si ottiene il seguente risultato:

Mean Squared Error on training set: 0.9924386487246479
Mean Squared Error on test set: 0.03699831140189244
R^2 score on training set: 0.7469629925504755
R^2 score on test set: 0.9938336147663512

Ecco come possiamo valutare i risultati:

Errore quadratico medio (MSE):

  • MSE sul set di addestramento: 0.992
  • MSE sul set di test: 0.037 Questi valori indicano l’entità media degli errori al quadrato tra le previsioni del modello e i valori effettivi. Poiché il MSE è una misura dell’errore, valori più bassi sono migliori. Nel nostro caso, l’errore quadratico medio sul set di test è notevolmente inferiore rispetto a quello sul set di addestramento, il che suggerisce che il modello potrebbe generalizzare bene su nuovi dati.

Coefficiente di determinazione (R^2):

  • R^2 sul set di addestramento: 0.747
  • R^2 sul set di test: 0.994 Il coefficiente di determinazione, o R^2, è una misura della proporzione di varianza nei dati che è spiegata dal modello. Un valore più vicino a 1 indica un modello migliore. Entrambi i valori R^2 sono abbastanza elevati, il che suggerisce che il modello è in grado di spiegare una percentuale significativa della variazione nei dati sia sul set di addestramento che su quello di test. Tuttavia, il R^2 sul set di test è particolarmente elevato, il che indica che il modello è ben adattato ai dati di test e che la sua capacità di generalizzazione è molto buona.

In generale, i risultati indicano che il modello di regressione lineare ha buone prestazioni sia sul set di addestramento che su quello di test, con un MSE basso e un R^2 alto su entrambi i set di dati. Tuttavia, è sempre consigliabile valutare anche altri aspetti del modello e considerare il contesto specifico del problema prima di trarre conclusioni definitive sulla sua bontà.

Il Grafico dei Residui

Vediamo adesso come valutare la bontà del nostro modello predittivo di regressione lineare in maniera grafica, attraverso il grafico dei residui.

# Calculation of residuals
train_residuals = y_train - train_predictions
test_residuals = y_test - test_predictions

# Plot of residuals
plt.figure(figsize=(10, 6))
plt.scatter(train_predictions, train_residuals, color='blue', label='Training set')
plt.scatter(test_predictions, test_residuals, color='red', label='Test set')
plt.axhline(y=0, color='black', linestyle='--')
plt.xlabel('Predictions')
plt.ylabel('Residuals')
plt.title('Residual Plot')
plt.legend()
plt.show()

In questo codice, calcoliamo i residui sottraendo le previsioni del modello dai valori effettivi sia per il set di addestramento che per il set di test. Quindi, plottiamo i residui rispetto alle previsioni del modello su un grafico a dispersione. L’asse y rappresenta i residui e l’asse x rappresenta le previsioni del modello. La linea tratteggiata nera indica la linea di riferimento a zero, che rappresenta la situazione in cui i residui sono nulli.

OLS Linear Regression - residual plot

Esaminare il grafico dei residui può aiutare a identificare eventuali pattern o strutture nei residui, come eteroschedasticità o problemi di omoschedasticità, che possono fornire ulteriori informazioni sulla bontà del modello.

L’eteroschedasticità e l’omoschedasticità sono due concetti importanti che riguardano la varianza degli errori (o residui) nei modelli di regressione. Questi concetti sono fondamentali per valutare la bontà del modello e per assicurare che le assunzioni del modello siano soddisfatte.

  • Eteroschedasticità: Si verifica quando la varianza degli errori non è costante su tutte le gamme dei valori delle variabili indipendenti. In altre parole, la dispersione degli errori varia in modo non uniforme lungo il range delle variabili indipendenti. Questo può manifestarsi come una forma di cono o ventaglio nei residui quando sono plottati rispetto ai valori predetti. L’eteroschedasticità può portare a stime imprecise dei coefficienti di regressione e a stime erronee degli errori standard dei coefficienti.
  • Omoschedasticità: Si verifica quando la varianza degli errori è costante su tutte le gamme dei valori delle variabili indipendenti. In altre parole, la dispersione degli errori è uniforme lungo il range delle variabili indipendenti. Questo è desiderabile perché indica che il modello è accurato e affidabile in tutto il range delle variabili indipendenti.

In sintesi, l’eteroschedasticità indica una variazione non uniforme della dispersione degli errori, mentre l’omoschedasticità indica una variazione uniforme della dispersione degli errori. È importante identificare e correggere l’eteroschedasticità quando si valuta la bontà di un modello di regressione, poiché può influenzare la precisione delle stime e delle previsioni del modello.

Andando a vedere nel nostro grafico dei residui, possiamo vedere che i punti rossi sono tutti equidistanti dalla linea nera centrale ma tutti sottostanti. Ora nel nostro caso abbiamo usato solo 3 punti, ma facciamo conto di averne usati molti e tutti si comportassero come i tre punti dell’esempio.

Se i punti rossi delle previsioni del test set sono tutti equidistanti dalla riga nera del grafico dei residui, ma sono tutti posizionati sotto di essa, questo suggerisce che potrebbe essere presente un problema di eteroschedasticità. L’eteroschedasticità si manifesta quando la varianza degli errori non è costante su tutte le gamme dei valori delle variabili indipendenti. Nel caso in cui i residui siano tutti situati al di sotto della linea di riferimento a zero, questo suggerisce che la varianza degli errori potrebbe essere maggiore per valori più alti delle previsioni del modello rispetto ai valori più bassi. Questo fenomeno potrebbe indicare che il modello non riesce a catturare la variabilità nei dati in modo uniforme su tutta la gamma delle previsioni.

Quando usare Ordinary Least Square (OLS) con Linear Regression?

La scelta di utilizzare la regressione lineare (Linear Regression) rispetto ad altri metodi di regressione dipende da diversi fattori, tra cui la natura del problema, la relazione tra le variabili, la distribuzione dei dati e gli obiettivi dell’analisi. Ecco alcuni scenari in cui la regressione lineare potrebbe essere preferibile rispetto ad altri metodi di regressione forniti da scikit-learn:

  • Relazione Lineare tra Variabili: Se c’è una relazione lineare chiara tra la variabile dipendente e le variabili indipendenti nel dataset, la regressione lineare può essere una scelta appropriata. La regressione lineare è semplice, interpretabile e può essere facilmente estesa a modelli più complessi come la regressione polinomiale.
  • Interpretabilità dei Coefficienti: La regressione lineare fornisce coefficienti che hanno interpretazioni dirette. Ad esempio, nel caso di una regressione lineare semplice, il coefficiente angolare indica il cambiamento medio nella variabile dipendente per un aumento unitario nella variabile indipendente. Questa interpretabilità dei coefficienti può essere preziosa in molte situazioni.
  • Efficienza Computazionale: La regressione lineare è computazionalmente efficiente e può essere addestrata rapidamente anche su grandi set di dati. Se si ha a che fare con un dataset di grandi dimensioni e si desidera un modello che possa essere addestrato rapidamente, la regressione lineare potrebbe essere una scelta conveniente.
  • Assenza di Assunzioni Complesse: La regressione lineare è basata su poche assunzioni, come la linearità e la normalità dei residui. Se queste assunzioni sono soddisfatte o se si può accettare un certo grado di violazione delle assunzioni, la regressione lineare può essere una scelta appropriata senza la necessità di modelli più complessi.

Tuttavia, ci sono casi in cui altri metodi di regressione forniti da scikit-learn potrebbero essere più adatti, ad esempio:

  • Quando la relazione tra le variabili è non lineare, potrebbero essere necessari metodi di regressione non lineare come la regressione polinomiale, la regressione spline o i modelli basati su alberi decisionali.
  • Se si desidera affrontare il problema di overfitting o underfitting, si potrebbero preferire altri metodi di regressione che permettono di controllare la complessità del modello, come la regressione ridge, la regressione lasso o i modelli di regressione basati su alberi decisionali.
  • Quando si desidera esplorare relazioni più complesse tra le variabili, si potrebbero preferire metodi di regressione più flessibili, come la regressione polinomiale di grado superiore o modelli di regressione non parametrici come il support vector regression (SVR) o la regressione k-NN.

In sintesi, la scelta tra la regressione lineare e altri metodi di regressione dipende dalle caratteristiche specifiche del problema, dalle assunzioni del modello e dagli obiettivi dell’analisi. È importante esaminare attentamente queste considerazioni prima di selezionare il metodo di regressione più appropriato per un determinato scenario.

Lascia un commento