Alberi potenziati con gradiente XGBoost vs Python Sklearn


20

Sto cercando di capire come funziona XGBoost. Capisco già come funzionano gli alberi con gradiente potenziato su Python sklearn. Ciò che non mi è chiaro è se XGBoost funziona allo stesso modo, ma più velocemente, o se ci sono differenze fondamentali tra esso e l'implementazione di Python.

Quando ho letto questo documento

http://learningsys.org/papers/LearningSys_2015_paper_32.pdf

Mi sembra che il risultato finale che esce da XGboost sia lo stesso dell'implementazione di Python, tuttavia la differenza principale è come XGboost trova la migliore divisione da fare in ogni albero di regressione.

Fondamentalmente, XGBoost dà lo stesso risultato, ma è più veloce.

È corretto o c'è qualcos'altro che mi manca?

Risposte:


18

Hai ragione, XGBoost ('eXtreme Gradient Boosting') e sklearn's GradientBoost sono fondamentalmente gli stessi in quanto sono entrambe implementazioni di aumento del gradiente.

Tuttavia, ci sono differenze molto significative sotto il cofano in senso pratico. XGBoost è molto più veloce (vedi http://machinelearningmastery.com/gentle-introduction-xgboost-applied-machine-learning/ ) di sklearn. XGBoost è abbastanza efficiente in termini di memoria e può essere parallelizzato (penso che sklearn non possa farlo di default, non so esattamente dell'efficienza della memoria di sklearn ma sono abbastanza sicuro che sia inferiore a XGBoost).

Avendo usato entrambi, la velocità di XGBoost è piuttosto impressionante e le sue prestazioni sono superiori a GradientBoosting di sklearn.


1
C'è anche una differenza di prestazioni. Xgboost ha usato seconde derivate per trovare la costante ottimale in ciascun nodo terminale. L'implementazione standard utilizza solo la prima derivata.
Zelazny7,

@ Zelazny7 Hai dei riferimenti per la tua dichiarazione? Ci si aspetterebbe che il calcolo dei derivati ​​secondari degraderebbe la performance. Significherebbe anche che è stato usato qualcosa di diverso (qualsiasi sapore di) discesa del gradiente.
Meh



Conferma a @ post di K88, di sklearn GradientBoostingClassifier non dispone di n_jobsun'interfaccia di parametro disponibile; l'elaborazione parallela non è possibile internamente con l'implementazione dell'algoritmo da parte di sklearn.
bmc,

7

A differenza del potenziamento del gradiente di Sklearn, Xgboost esegue anche la regolarizzazione dell'albero per evitare un eccesso di adattamento e si occupa anche dei valori mancanti. Il seguente link potrebbe essere utile per imparare esattamente xgboost https://www.youtube.com/watch?v=Vly8xGnNiWs


Il GBM di SkLearn effettua la regolarizzazione tramite il parametro learning_rate.
Teja Chebrole,

1

XGboost è l'implementazione di GBDT con randmization (utilizza il campionamento delle colonne e il campionamento delle righe). Il campionamento delle righe è possibile non utilizzando tutti i dati di addestramento per ciascun modello base del GBDT. Invece di utilizzare tutti i dati di addestramento per ciascun modello di base, campioniamo un sottoinsieme di righe e utilizziamo solo quelle righe di dati per costruire ciascuno dei modelli di base. Ciò garantisce che vi sia una minore possibilità di overfitting, il che è un grosso problema con un semplice GBDT che XGBoost cerca di affrontare usando questa randomizzazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.