Site icon Meccanismo Complesso

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

Regressione Lineare con Ordinary Least Square
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:

Dove:

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

L’approccio di OLS consiste nel trovare i valori ottimali di e che minimizzano questa funzione di costo. Questo può essere fatto risolvendo le derivate parziali della funzione SSE rispetto a e , 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:

Dove:

Queste formule ci forniscono i valori ottimali per i coefficienti di regressione e , 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]]

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:

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

Coefficiente di determinazione (R^2):

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.

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.

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:

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

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.

Exit mobile version