-->

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

Spillting Dati


Divisione dei dati in training, validation e test set per i modelli di machine learning. Validazione dei dati

Preparazione del Data Set Machine learning

Divisione dei Dati

Divisione dei Dati: Training, Test e Validation Set
Nel machine learning, è fondamentale dividere i dati in diversi set per garantire che il modello costruito sia generalizzabile e non sovradattato ai dati di addestramento.
Training Set È utilizzato per addestrare il modello. Rappresenta solitamente il 70-80% del dataset totale.
Validation Set Viene utilizzato per sintonizzare i parametri del modello e prevenire l'overfitting. Di solito costituisce il 10-15% del dataset.
Test Set Serve per valutare le performance del modello finale. Costituisce il 10-15% del dataset.

import pandas as pd
from sklearn.model_selection import train_test_split

# Caricamento dei dati
df = pd.read_csv('data.csv')

# Separazione delle variabili indipendenti e dipendenti
X = df.drop('target', axis=1)
y = df['target']

# Divisione del dataset in training set e test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Divisione del training set in training set e validation set
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.25, random_state=42)

# Verifica delle dimensioni dei dataset
print("Training set:", X_train.shape, y_train.shape)
print("Validation set:", X_val.shape, y_val.shape)
print("Test set:", X_test.shape, y_test.shape)

K-Fold Cross-Validation

La k-fold cross-validation è una tecnica che suddivide il dataset in k sottoinsiemi o "fold". Il modello è addestrato k volte, ogni volta utilizzando k-1 fold come training set e il restante fold come validation set. Questo processo aiuta a garantire che ogni osservazione del dataset sia utilizzata sia per l'addestramento che per la validazione.

from sklearn.model_selection import KFold
kf = KFold(n_splits=5)
for train_index, val_index in kf.split(df):
    train_set = df.iloc[train_index]
    val_set = df.iloc[val_index]
    # Addestrare e validare il modello qui

Misure di Validazione


Per valutare le performance del modello, si utilizzano diverse metriche a seconda del tipo di problema (classificazione o regressione):
Classificazione Accuratezza, precisione, recall, F1-score, area sotto la curva (AUC). Regressione Mean Absolute Error (MAE), Mean Squared Error (MSE), Root Mean Squared Error (RMSE), R-squared.

from sklearn.metrics import accuracy_score, mean_squared_error
# Per un modello di classificazione
accuracy = accuracy_score(y_true, y_pred)
# Per un modello di regressione

Tuning del Modello


Il tuning dei modelli implica l'ottimizzazione degli iperparametri per migliorare le performance del modello.
Alcune tecniche comuni includono la **Grid Search** e la **Random Search**.

Grid Search

Esplora una griglia predefinita di iperparametri e valuta le performance del modello per ciascuna combinazione.

from sklearn.model_selection import GridSearchCV
param_grid = {'param1': [1, 10], 'param2': [0.1, 0.01]}
grid_search = GridSearchCV(model, param_grid)
grid_search.fit(X_train, y_train)


Random Search

Esplora casualmente combinazioni di iperparametri da una distribuzione specificata.

from sklearn.model_selection import RandomizedSearchCV
param_dist = {'param1': [1, 10], 'param2': [0.1, 0.01]}
random_search = RandomizedSearchCV(model, param_distributions=param_dist, n_iter=10)
random_search.fit(X_train, y_train)