-->

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

Modelli Ensemble Bagging


Il concetto di base del Bagging è di combinare le previsioni di diversi modelli deboli per creare un modello forte.

Modello Bagging nei Modelli Ensemble

Il Bagging, abbreviazione di Bootstrap Aggregating, è una tecnica utilizzata nei modelli ensemble del machine learning per migliorare la stabilità e l'accuratezza dei modelli di apprendimento automatico.
Il concetto di base del Bagging è di combinare le previsioni di diversi modelli deboli per creare un modello forte.

Come Funziona il Bagging

Il processo di Bagging può essere riassunto nei seguenti passaggi:
1.Campionamento Bootstrapping: Si creano diversi set di dati di addestramento campionando con ripetizione dal set di dati originale. Ogni campione è della stessa dimensione del set di dati originale, ma alcuni esempi possono apparire più volte, mentre altri possono non apparire affatto.
2.Addestramento Modelli: Si addestra un modello debole su ciascun campione bootstrap.
3.Aggregazione: Si combinano le previsioni di tutti i modelli deboli per ottenere la previsione finale. Nel caso di problemi di classificazione, si usa la votazione maggioritaria, mentre per problemi di regressione si utilizza la media delle previsioni.

Vantaggi del Bagging

- Riduzione della Varianza: Il Bagging aiuta a ridurre la varianza del modello, rendendolo meno suscettibile alle fluttuazioni del dataset di addestramento.
- Miglioramento della Precisione: Combinando diversi modelli deboli, si ottiene un modello più robusto e preciso.
- Riduzione del Sovradattamento: Campionando con sostituzione e aggregando le previsioni, si riduce il rischio di sovradattamento.

Esempio con il Dataset Wine

Utilizziamo il dataset del vino, applichiamo l'Analisi delle Componenti Principali (PCA) per la riduzione della dimensionalità e poi applichiamo il modello BaggingClassifier per la classificazione.
    
import pandas as pd
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix, classification_report

# Carica il dataset del vino
wine = load_wine()
X = wine.data
y = wine.target

# Dividi il 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)

# Applica PCA per ridurre la dimensionalità
pca = PCA(n_components=2)
X_train_pca = pca.fit_transform(X_train)
X_test_pca = pca.transform(X_test)

# Crea il modello BaggingClassifier
bagging_clf = BaggingClassifier(base_estimator=DecisionTreeClassifier(), n_estimators=50, random_state=42)

# Addestra il modello
bagging_clf.fit(X_train_pca, y_train)

# Effettua le previsioni
y_pred = bagging_clf.predict(X_test_pca)

# Calcola la matrice di confusione
conf_matrix = confusion_matrix(y_test, y_pred)

# Stampa la matrice di confusione
print("Matrice di Confusione:\n", conf_matrix)

# Genera il report di classificazione
class_report = classification_report(y_test, y_pred, target_names=wine.target_names)
print("\nClassification Report:\n", class_report)