Gradient Boosting Tree: "più variabile è meglio"?


10

Dal tutorial di XGBoost, penso che quando ogni albero cresce, tutte le variabili vengono scansionate per essere selezionate per dividere i nodi e verrà scelto quello con la divisione del guadagno massimo. Quindi la mia domanda è che cosa succede se aggiungo alcune variabili di rumore nel set di dati, queste variabili di rumore influenzerebbero la selezione delle variabili (per ogni albero che cresce)? La mia logica è che, poiché queste variabili di rumore NON danno la massima divisione del guadagno, non sarebbero mai selezionate, quindi non influenzano la crescita dell'albero.

Se la risposta è sì, allora è vero che "più variabili sono, meglio è per XGBoost"? Non consideriamo il tempo di allenamento.

Inoltre, se la risposta è sì, è vero che "non è necessario filtrare le variabili non importanti dal modello".

Grazie!

Risposte:


11

La mia logica è che, poiché queste variabili di rumore NON danno la massima divisione del guadagno, non sarebbero mai selezionate, quindi non influenzano la crescita dell'albero.

Questo è perfettamente corretto solo per set di dati molto grandi, quasi infiniti, in cui il numero di campioni nel set di allenamento offre una buona copertura di tutte le variazioni. In pratica, con dimensioni sufficienti si ottiene un sacco di rumore di campionamento, poiché la copertura di possibili esempi è più debole quanto più dimensioni hanno i dati.

Il rumore sulle variabili deboli che finisce per correlarsi per caso con la variabile target può limitare l'efficacia degli algoritmi di potenziamento, e ciò può accadere più facilmente su divisioni più profonde nell'albero decisionale, in cui i dati valutati sono già stati raggruppati in un piccolo sottoinsieme.

Più variabili aggiungi, più è probabile che otterrai variabili debolmente correlate che sembrano avere un bell'algoritmo di selezione divisa per una combinazione specifica, che quindi crea alberi che apprendono questo rumore invece del segnale previsto, e infine generalizzare male.

In pratica, ho trovato XGBoost abbastanza robusto per il rumore su piccola scala. Tuttavia, ho anche scoperto che a volte selezionerà variabili ingegnerizzate di scarsa qualità, preferibilmente a dati meglio correlati, per ragioni simili. Quindi non è un algoritmo in cui "più variabili sono migliori per XGBoost" e devi preoccuparti di possibili funzionalità di bassa qualità.


molto bella. Grazie! Quindi pensi che la selezione delle funzionalità prima di adattare XGBoost sia necessaria in base alla tua esperienza?
WCMC

@Frank: forse. Potresti anche iniziare con un set completo di funzionalità e utilizzare il rapporto di importanza variabile xgboost per aiutarti. In generale, tuttavia, XGBoost non ti salva completamente da nessuna delle solite preoccupazioni sulla selezione e sull'ingegnerizzazione delle funzionalità.
Neil Slater

Ciao @Neil, dai un'occhiata a datascience.stackexchange.com/questions/17288/… ogni volta che ne hai la possibilità. Grazie.
WCMC

@Frank: ho già fatto ieri e ho lasciato una domanda per chiarimenti perché i numeri sembravano un po 'fuori.
Neil Slater

Ciao @Neil, poiché il poster precedente non ha risposto alla tua domanda, lo ripubblico qui con il mio progetto. Ho anche fornito set di dati e script R lì, che spero sia più conveniente per gli altri per capire il problema. Apprezzo se ti piacerebbe fornire un aiuto.
WCMC
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.