Intelligenza Artificiale

A un certo punto non fu più la biologia a dominare il destino dell'uomo, ma il prodotto del suo cervello: la cultura.
Cosicché: "Le uniche leggi della materia sono quelle che la nostra mente deve architettare e le uniche leggi della mente sono architettate per essa dalla materia".
JAMES CLERK MAXWELL

Regressione lineare e algortitmo del gradiente


La funzione di costo è una misura della discrepanza tra i valori predetti e i valori nei dati di addestramento. La discesa del gradiente è un algoritmo utilizzato per minimizzare una funzione di costo

Funzione di Costo

La funzione di costo è una misura della discrepanza tra i valori predetti dal modello e i valori osservati nei dati di addestramento.
In altre parole, misura quanto bene il modello si adatta ai dati. L'obiettivo dell'addestramento di un modello è minimizzare questa funzione di costo, quindi il modello sarà in grado di fare previsioni più accurate.

Discesa del Gradiente

La discesa del gradiente è un algoritmo di ottimizzazione utilizzato per minimizzare una funzione di costo. L'idea è quella di iterativamente spostarsi nella direzione opposta al gradiente della funzione di costo rispetto ai parametri del modello.
Questo processo continua fino a raggiungere un punto in cui il gradiente è quasi zero o raggiunge un valore accettabile.

Gradiente Stocastico

La discesa del gradiente può essere computazionalmente costosa quando il set di dati è grande.
Il gradiente stocastico è una versione della discesa del gradiente che ottimizza il modello utilizzando solo un campione casuale dei dati ad ogni iterazione, rendendo l'aggiornamento dei parametri più veloce.



Esempio di Regressione Lineare con Gradiente Stocastico

Supponiamo di avere un set di dati per una regressione lineare, dove vogliamo prevedere il valore di \( y \) (variabile dipendente) in base al valore di \( x \) (variabile indipendente).
Possiamo addestrare un modello di regressione lineare utilizzando il gradiente stocastico.
Ecco un esempio di codice in Python utilizzando scikit-learn:


import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
from sklearn.linear_model import SGDRegressor
from sklearn.metrics import r2_score
from sklearn.model_selection import train_test_split

# Generazione di dati di esempio
X, y = make_regression(n_samples=1000, n_features=1, noise=0.1, random_state=42)

# Divisione dei dati in set di addestramento e test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Addestramento del modello di regressione lineare con gradiente stocastico
model = SGDRegressor(max_iter=1000, tol=1e-3, random_state=42)
model.fit(X_train, y_train)

# Predizione sui dati di test
y_pred = model.predict(X_test)

# Calcolo del coefficiente di determinazione (R-squared)
r2 = r2_score(y_test, y_pred)

# Visualizzazione della regressione lineare e gradiente stocastico
plt.figure(figsize=(10, 6))
plt.scatter(X_train, y_train, color='blue', label='Train data')
plt.scatter(X_test, y_test, color='green', label='Test data')
plt.plot(X_train, model.predict(X_train), color='red', linewidth=2, label='Stochastic Gradient Descent')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Regression with Stochastic Gradient Descent')
plt.legend()
plt.grid(True)
plt.show()

print("Coefficient of Determination (R-squared):", r2)




In questo esempio, stiamo usando scikit-learn per generare dati di esempio per una regressione lineare.
Successivamente dividiamo i dati in set di addestramento e test. Usiamo quindi `SGDRegressor` per addestrare il modello utilizzando il gradiente stocastico.
Infine, calcoliamo il coefficiente di determinazione \( R^2 \) per valutare le prestazioni del modello.
Poiché la regressione lineare è un problema di regressione, non ha senso calcolare l'accuratezza come faremmo in un problema di classificazione.