XGBoost La Guida Definitiva (Parte 2)

XGBoost Guida Definitiva (Parte 2)

Implementazione dell’algoritmo XGBoost in Python da zero

Immagine di StockSnap da Pixabay

Nell’articolo precedente abbiamo discusso dell’algoritmo XGBoost e mostrato la sua implementazione in pseudocodice. In questo articolo andremo ad implementare l’algoritmo in Python da zero.

Il codice fornito è un’implementazione concisa e leggera dell’algoritmo XGBoost (con solamente circa 300 righe di codice), inteso a dimostrare la sua funzionalità principale. Pertanto, non è ottimizzato per la velocità o l’utilizzo della memoria, e non include l’intera gamma di opzioni fornite dalla libreria XGBoost (vedi https://xgboost.readthedocs.io/ per ulteriori dettagli sulle funzionalità della libreria). In particolare:

  1. Il codice è scritto in puro Python, mentre il nucleo della libreria XGBoost è scritto in C++ (le sue classi Python sono solo sottili wrapper sopra l’implementazione in C++).
  2. Non include varie ottimizzazioni che consentono a XGBoost di gestire enormi quantità di dati, come l’uso del weighted quantile sketch, l’apprendimento degli alberi out-of-core e l’elaborazione parallela e distribuita dei dati. Queste ottimizzazioni verranno discusse più dettagliatamente nell’articolo successivo della serie.
  3. L’implementazione attuale supporta solo compiti di regressione e classificazione binaria, mentre la libreria XGBoost supporta anche problemi di classificazione multi-classe e di ranking.
  4. La nostra implementazione supporta solo un piccolo sottoinsieme degli iperparametri presenti nella libreria XGBoost. In particolare, supporta i seguenti iperparametri:
  • n_estimators (default = 100): il numero di alberi di regressione nell’ensemble (che è anche il numero di iterazioni di boosting).
  • max_depth (default = 6): la profondità massima (numero di livelli) di ciascun albero.
  • learning_rate (default = 0.3): il tasso di riduzione applicato agli alberi.
  • reg_lambda (default = 1): termine di regolarizzazione L2 applicato ai pesi delle foglie.
  • gamma (default = 0): riduzione minima della perdita richiesta per dividere un determinato nodo.

Per coerenza, ho mantenuto gli stessi nomi e valori predefiniti di questi iperparametri come sono definiti nella libreria XGBoost.