Dimensione dell'albero nell'incremento dell'albero gradiente


10

L'incremento dell'albero dei gradienti, come proposto da Friedman, utilizza gli alberi decisionali con Jnodi terminali (= foglie) come apprendenti di base. Esistono diversi modi per far crescere un albero con esattamente Jnodi, ad esempio si può far crescere l'albero in un modo molto profondo prima o in un modo molto ampio, ...

Esiste un modo consolidato per far crescere alberi con Jnodi esattamente terminali per il potenziamento dell'albero a gradiente?

Ho esaminato la procedura di crescita dell'albero del gbmpacchetto di R e sembra che espanda l'albero in modo approfondito e utilizzi un'euristica basata sul miglioramento dell'errore per scegliere se espandere il nodo figlio sinistro o destro - è corretto?


2
gbm usa CART per costruire gli alberi, un noto algoritmo degli anni '80. L'euristica si chiama impurità gini, una scelta abbastanza standard per la regressione con perdita quadratica.

2
L'impurità di Afaik gini viene utilizzata per la classificazione dei problemi. Tuttavia, la domanda si riferisce alla dimensione degli alberi.
Peter Prettenhofer,

Aggiunge un ramo alla volta. Sarei sorpreso se ogni divisione successiva fosse la migliore dei candidati rimanenti nella divisione, non solo il ramo. Ci sono momenti in cui i dati non supportano un numero esatto, ad esempio quando i dati sono troppo piccoli per "J".
EngrStudent,

Come diceva @EngrStudent, non è possibile forzare un numero preciso di nodi. Tuttavia, hai un certo controllo su un limite superiore del numero di nodi. gbmha un parametro n.minobsinnodeche controlla il numero minimo di oggetti per nodo. Naturalmente, il numero di nodi è inferiore o uguale a NumberOfPoints / n.minobsinnode
G5W

Se stavo cercando foglie "J", allora avrei costruito completamente l'albero e poi, supponendo che ci fossero più di J foglie, potrei potare fino a J. Questo mi darebbe nodi "J", e sarebbero i più divisioni informative - sarebbe il modello CART più sano che potrebbe essere. Se non ci sono abbastanza divisioni, potrei semplicemente dividere casualmente all'interno dei domini per ottenere "J" ma sarebbero spuri e in qualche modo banali. Potrei esaminare la distribuzione del valore all'interno della foglia e utilizzare un'aproossimazione basata su CDF, ma ciò si discosterebbe dal modello media per foglia.
EngrStudent,

Risposte:


2

La soluzione in R gbmnon è tipica.

Altri pacchetti, come scikit-learno LightGBMusano i cosiddetti (in scikit-learn) BestFirstTreeBuilder, quando il numero di foglie è limitato. Supporta una coda prioritaria di tutte le foglie e ad ogni iterazione divide la foglia che porta la migliore riduzione dell'impurità. Quindi non è né il primo in profondità né l'ampiezza per primo, ma un terzo algoritmo, basato sui calcoli nelle foglie.

In un certo senso, questo approccio è più ottimale della divisione alla cieca di tutte le foglie a turno. Tuttavia, è ancora un avido euristico, perché la scelta se dividere l' -esimo nodo ora dipende solo dalla prima divisione di e non dalle possibili divisioni successive che possono ridurre l'impurità molto più della divisione attuale.ioio

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.