Corso
I recenti progressi nel machine learning hanno introdotto nuovi modi per affrontare problemi complessi. Il boosting è una tecnica che continua a mostrare risultati promettenti. Sta cambiando il modo in cui affrontiamo il data modeling utilizzando più algoritmi per migliorare le prestazioni. Con l'evoluzione del concetto di boosting, sono emerse varianti più recenti come Gradient Boosting e XGBoost, che spingono oltre i confini di velocità e accuratezza.
Non preoccuparti se ti sembra che ci sia molto da imparare nell'area del predictive modeling. Prova i nostri percorsi di carriera Associate Data Scientist in Python o Data Scientist in Python, oltre al tutorial Esplora le tecniche di Ensemble Learning per continuare a imparare.
Boosting nel machine learning
Il boosting è un potente metodo di ensemble learning nel machine learning, progettato specificamente per migliorare l'accuratezza dei modelli predittivi combinando più weak learner—modelli che performano solo leggermente meglio del caso—in un unico strong learner.
L'essenza del boosting risiede in un processo iterativo in cui ogni weak learner è addestrato per correggere gli errori del suo predecessore, migliorando gradualmente le prestazioni complessive del modello. Concentrandosi sugli errori commessi dai modelli precedenti, il boosting trasforma una collezione di weak learner in un modello più accurato.
Come funziona il boosting
Il boosting trasforma weak learner in un unico strong learner attraverso un processo sistematico che si concentra sulla riduzione degli errori nell'addestramento sequenziale dei modelli. I passaggi coinvolti includono:
- Seleziona i pesi iniziali: assegna pesi iniziali a tutti i punti dati per indicare la loro importanza nel processo di apprendimento.
- Addestra in sequenza: addestra il primo weak learner sui dati. Dopo aver valutato le sue prestazioni, aumenta i pesi delle istanze erroneamente classificate. Questo fa sì che il weak learner successivo si concentri maggiormente sui casi più difficili.
- Ripeti il processo: ripeti il processo di aggiustamento dei pesi e addestramento dei learner successivi. Ogni nuovo modello si concentra sui punti deboli dell'ensemble finora.
- Combina i risultati: aggreghi le previsioni di tutti i weak learner per formare l'output finale. L'aggregazione è in genere pesata, dove i learner più accurati hanno maggiore influenza.
Questo metodo riduce efficacemente gli errori concentrandosi in modo più intenso sui casi difficili nei dati di addestramento, ottenendo forti prestazioni predittive.
Tipi di algoritmi di boosting
Diamo un'occhiata ad alcuni dei più noti algoritmi di boosting.
AdaBoost (Adaptive Boosting)
AdaBoost è uno dei primi algoritmi di boosting. Si concentra sulla ripesatura degli esempi di addestramento ogni volta che viene aggiunto un learner, dando maggiore enfasi alle istanze classificate in modo errato. AdaBoost è particolarmente efficace per i problemi di classificazione binaria. Leggi il nostro tutorial AdaBoost Classifier in Python per saperne di più.
Gradient Boosting
Il gradient boosting costruisce i modelli in sequenza e corregge gli errori lungo il percorso. Utilizza un algoritmo di discesa del gradiente per minimizzare la loss quando si aggiungono nuovi modelli. Questo metodo è flessibile e può essere utilizzato sia per problemi di regressione che di classificazione. Il nostro tutorial, A Guide to The Gradient Boosting Algorithm, descrive questo processo in dettaglio.
XGBoost (Extreme Gradient Boosting)
XGBoost è una libreria ottimizzata di gradient boosting distribuito ed è il metodo di riferimento per molti vincitori di competizioni su Kaggle. È progettata per essere altamente efficiente, flessibile e portabile. Implementa algoritmi di machine learning all'interno del framework del Gradient Boosting, offrendo una soluzione scalabile e accurata a molti problemi pratici sui dati. Per un approfondimento, valuta di consultare il nostro tutorial Using XGBoost in Python e di seguire il corso dedicato: Extreme Gradient Boosting with XGBoost.
Metodi di ensemble
Il boosting appartiene al più ampio gruppo dei metodi di ensemble. I metodi di ensemble sono un approccio nel machine learning che combina più modelli per produrre previsioni più accurate di quelle che un singolo modello potrebbe in genere ottenere da solo. Queste tecniche funzionano sfruttando la diversità dei modelli, ciascuno con i propri punti di forza e limiti, per creare un processo decisionale collettivo.
Diversi tipi di metodi di ensemble
Il boosting è una tecnica di ensemble learning di rilievo, ma è solo una tra diverse che aumentano la forza predittiva dei modelli. Diamo un'occhiata ad alcune altre.
- Bagging (Bootstrap Aggregating): un metodo che addestra più modelli su sottoinsiemi casuali dei dati di addestramento e aggrega le loro previsioni. Riduce la varianza e aiuta a evitare l'overfitting.
- Stacking (Stacked Generalization): una tecnica che combina più modelli addestrando un meta-modello per imparare come combinare al meglio le previsioni dei modelli base. Può catturare schemi complessi che i singoli modelli potrebbero non cogliere.
- Blending: simile allo stacking, ma utilizza un set di validazione tenuto da parte per addestrare il meta-modello invece della cross-validation. È più semplice e veloce dello stacking, ma può essere meno robusto.
- Voting: combina le previsioni di più modelli tramite voto di maggioranza (hard voting) o media pesata delle probabilità previste (soft voting). È semplice da implementare e può essere efficace con modelli base eterogenei.
Boosting vs. bagging
Il boosting viene spesso confrontato in particolare con il bagging. Sebbene siano simili per alcuni aspetti, ci sono grandi differenze. Di seguito una tabella che confronta boosting e bagging:
| Caratteristica | Boosting | Bagging |
|---|---|---|
| Focus concettuale | Migliora l'accuratezza in sequenza concentrandosi sugli esempi precedentemente classificati in modo errato. | Addestra più modelli su sottoinsiemi casuali, mediandone le previsioni. |
| Addestramento del modello | L'addestramento sequenziale consente a ogni modello di apprendere dagli errori del precedente. | L'addestramento in parallelo su campioni di dati variati aumenta la diversità. |
| Riduzione dell'errore | Riduce principalmente il bias e, in misura minore, la varianza. | Riduce la varianza, in particolare nei modelli complessi soggetti a overfitting. |
| Sensibilità agli outlier | Più sensibile a causa del maggiore focus sui dati classificati in modo errato. | Meno sensibile poiché il campionamento casuale diluisce l'impatto degli outlier. |
| Esempi | AdaBoost, Gradient Boosting, XGBoost. | Random Forest, Bootstrap Aggregating. |
Se ti interessa approfondire il bagging, leggi il nostro tutorial What is Bagging in Machine Learning?, che utilizza sklearn.
Un'implementazione del boosting in Python
Uno dei modi migliori per capire il boosting è provarlo in pratica. Per farlo, useremo questo dataset di Kaggle Almond Types Classification, che include tre tipi di mandorle: MAMRA, SANORA e REGULAR, e i loro attributi fisici unici come area, perimetro e rotondità.
Le feature di ciascun campione di mandorla sono state estratte tramite sofisticate tecniche di image processing. I valori null nel dataset rappresentano i casi in cui l'orientamento della mandorla—che fosse in piedi, sdraiata su un lato o sulla schiena—ha influenzato l'accuratezza del processo di estrazione delle feature.
Usiamo ora questo dataset per provare un compito di classificazione. Useremo l'algoritmo AdaBoost che, come abbiamo detto, migliora le prestazioni del modello combinando più weak learner in un unico strong learner.
1. Importazione delle librerie
Iniziamo importando le librerie necessarie e caricando il dataset delle mandorle. Poi separiamo le variabili di feature e target.
import pandas as pd
almonds = pd.read_csv('Almond.csv', index_col=0)
X = almonds.drop('Type', axis=1)
y = almonds['Type']
2. Gestione dei dati mancanti
Successivamente, ripuliamo il dataset riempiendo i valori mancanti con il KNN imputer. Questo ci assicura un dataset completo per il nostro modello.
from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=5)
X_imputed = imputer.fit_transform(X)
3. Suddivisione dei dati per training e test
Dividiamo i dati in set di addestramento e di test, così da poter valutare quanto bene il nostro modello gestirebbe nuovi dati.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_imputed, y, test_size=0.2, random_state=42)
4. Addestramento di un classificatore ad albero decisionale
Addestriamo qui un semplice modello ad albero decisionale, che ci fornisce un'accuratezza di base prima di procedere a potenziarne le prestazioni.
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
tree = DecisionTreeClassifier(max_depth=1, random_state=42)
tree.fit(X_train, y_train)
tree_accuracy = accuracy_score(y_test, tree.predict(X_test))
5. Migliorare le prestazioni con AdaBoost
Usiamo quindi AdaBoost per migliorare le prestazioni del nostro albero decisionale concentrandoci sui suoi errori e aumentando l'accuratezza.
from sklearn.ensemble import AdaBoostClassifier
ada = AdaBoostClassifier(base_estimator=tree, n_estimators=100, learning_rate=1.0, random_state=42)
ada.fit(X_train, y_train)
ada_accuracy = accuracy_score(y_test, ada.predict(X_test))
# Print the accuracies
print(f'Accuracy of the weak learner (Decision Tree): {tree_accuracy * 100:.2f}%')
print(f'Accuracy of AdaBoost model: {ada_accuracy * 100:.2f}%')
6. Output finale
Infine, confrontiamo i risultati e vediamo come AdaBoost migliori significativamente l'accuratezza.
Accuracy of the weak learner (Decision Tree): 43.14%
Accuracy of AdaBoost model: 61.50%
Qual è quindi la conclusione? I risultati illustrano la potenza dell'ensemble learning attraverso AdaBoost. Qui, il weak learner era un albero decisionale con profondità massima pari a uno, che aveva un'accuratezza modesta di circa il 43%. Considerando che c'erano solo tre tipi di mandorle, un'accuratezza del 43% non è molto superiore alla media del caso. Tuttavia, quando questo weak learner è stato utilizzato come base estimator in un modello AdaBoost con 100 iterazioni, l'accuratezza è migliorata fino al 62%.
Facendo un passo indietro, come nota di cautela, sebbene AdaBoost abbia riportato un'accuratezza più alta sul nostro dataset Almonds, potrebbe non essere sempre la scelta migliore in ogni situazione. C'è il rischio di overfitting, soprattutto con dataset piccoli come questo, in cui il modello può diventare eccessivamente complesso. Nella pratica, tecniche di classificazione più semplici potrebbero performare altrettanto bene o addirittura meglio per alcuni compiti. Quindi, se qui abbiamo usato AdaBoost per illustrare il concetto, è importante fermarsi e valutare se vogliamo davvero un livello di complessità così alto.
Conclusione
Il boosting rappresenta un importante passo avanti nel campo del machine learning, mostrando la potenza dei metodi di ensemble nel migliorare l'accuratezza predittiva. Come abbiamo visto, algoritmi di boosting come AdaBoost, Gradient Boosting e XGBoost operano su un principio fondamentale: combinare più modelli deboli per creare un unico predittore più efficace.
Tuttavia, è importante ricordare che il boosting è solo uno degli strumenti nel toolkit del machine learning. La sua efficacia può variare a seconda del problema specifico. Come per qualsiasi tecnica di machine learning, capire quando e come applicare il boosting è la chiave per sfruttarne appieno il potenziale.
Per approfondire la comprensione del boosting e di altri concetti di machine learning, prendi in considerazione i percorsi completi di DataCamp Machine Learning for Everyone. Per chi desidera specializzarsi ulteriormente, il percorso Machine Learning Scientist with Python offre una formazione approfondita su tecniche avanzate e applicazioni pratiche.
Vinod Chugani ha iniziato la sua carriera a Tokyo come il più giovane Head dell'Hedge Fund Sales Desk di JPMorgan e in seguito ha stabilito un record personale di vendite a Lehman Brothers, poi ha costruito un'attività di distribuzione di elettronica in 30 paesi superando i 100 milioni di SG$ di fatturato prima di passare ai dati. Laureato in Economia alla Duke e diplomato alla NYC Data Science Academy, è stato uno dei tre beneficiari di borsa di studio su oltre 100 candidati per il corso Building AI Applications di Hugo Bowne-Anderson su Maven. Oggi scrive per DataCamp, KDnuggets, Machine Learning Mastery e Statology su argomenti che vanno dalla statistica all'AI agentica, e fa da mentor a professionisti dei dati alla NYC Data Science Academy con oltre 1.000 sessioni one-to-one all'attivo.
Domande frequenti
Che cos'è il boosting nel machine learning?
Il boosting è una tecnica di ensemble learning usata per migliorare l'accuratezza dei modelli predittivi. Combina più weak learner—modelli che performano solo leggermente meglio del caso—in un unico strong learner, migliorando in modo significativo le prestazioni complessive del modello.
In che cosa il boosting è diverso dal bagging?
Boosting e bagging sono entrambe tecniche di ensemble che combinano più modelli per migliorare le previsioni, ma operano in modo diverso. Il boosting addestra i modelli in sequenza, con ogni nuovo modello che si concentra sugli errori dei precedenti per ridurre il bias e migliorare l'accuratezza. Al contrario, il bagging addestra i modelli in parallelo su diversi sottoinsiemi di dati, mediando i loro output per ridurre la varianza e aumentare la stabilità. Mentre il boosting è sensibile agli outlier e al rumore, il bagging è più robusto grazie al metodo di media.
Il boosting può essere usato sia per problemi di classificazione che di regressione?
Sì, le tecniche di boosting possono essere adattate sia alla classificazione sia alla regressione. Sebbene AdaBoost sia più comunemente usato per problemi di classificazione, altre varianti come il Gradient Boosting possono essere utilizzate efficacemente anche per la regressione.
Come si sceglie il numero di iterazioni del boosting?
Il numero di iterazioni, o di weak learner, in un algoritmo di boosting dipende in genere dallo specifico dataset e dalla complessità del problema. Può essere determinato utilizzando la cross-validation o tecniche simili per bilanciare tra underfitting e overfitting.
In che cosa AdaBoost differisce da altre tecniche di boosting, come il Gradient Boosting?
AdaBoost aumenta i pesi delle istanze classificate in modo errato per far concentrare i modelli successivi su questi casi difficili. Il Gradient Boosting, invece, adatta nuovi learner agli errori residui dei modelli precedenti.
Quali sono i principali vantaggi dell'utilizzo di AdaBoost?
I principali vantaggi di AdaBoost sono semplicità, efficacia e il fatto che non richiede conoscenze pregresse sul weak learner. È anche molto flessibile, in quanto può essere combinato con qualsiasi algoritmo di apprendimento, ed è spesso molto efficace in classificazioni in cui altri metodi potrebbero faticare.
Quali sono alcune alternative rilevanti ad AdaBoost per migliorare le prestazioni dei modelli di machine learning?
Alcune alternative rilevanti ad AdaBoost includono Gradient Boosting, XGBoost, CatBoost, LightGBM e HistGradientBoost.
Quali sono alcuni tipi di metodi di ensemble learning oltre al boosting?
Forme comuni di ensemble learning, oltre al boosting, includono bagging e stacking, ciascuna con strategie diverse per integrare i modelli e massimizzare la potenza predittiva.


