Cosa significa profondità di interazione in GBM?


30

Avevo una domanda sul parametro della profondità di interazione in gbm in R. Questa potrebbe essere una domanda noob, per la quale mi scuso, ma come fa il parametro, che credo denota il numero di nodi terminali in un albero, sostanzialmente indica X-way interazione tra i predittori? Sto solo cercando di capire come funziona. Inoltre, ottengo modelli piuttosto diversi se ho un set di dati con due diverse variabili fattoriali rispetto allo stesso set di dati, tranne per il fatto che quelle due variabili fattoriali sono combinate in un singolo fattore (ad es. Livelli X nel fattore 1, livelli Y nel fattore 2, la variabile combinata ha Fattori X * Y). Il secondo è significativamente più predittivo del primo. Avevo pensato che aumentare la profondità dell'interazione avrebbe sollevato questa relazione.

Risposte:


22

Entrambe le risposte precedenti sono sbagliate. Il pacchetto GBM utilizza il interaction.depthparametro come numero di suddivisioni che deve eseguire su un albero (a partire da un singolo nodo). Man mano che ogni divisione aumenta il numero totale di nodi di 3 e il numero di nodi terminali di 2 (nodo {nodo sinistro, nodo destro, nodo NA}) il numero totale di nodi nella struttura sarà e il numero di nodi terminali . Questo può essere verificato dando un'occhiata all'output della funzione.3 N + 1 2 N + 13*N+12*N+1pretty.gbm.tree

Il comportamento è piuttosto fuorviante, poiché l'utente si aspetta davvero che la profondità sia la profondità dell'albero risultante. Non è.


Che cos'è N qui: numero di nodi, interazione.depth o qualcos'altro?
Julian,

È un numero di divisioni eseguite, a partire da un singolo nodo (anche, profondità di interazione).
casuale,

1
Penso che ogni divisione aumenti solo il numero totale di nodi terminali di 1. quindi supponiamo che un albero abbia solo una divisione, quindi ha 2 nodi terminali, ora esegui una divisione su uno dei nodi terminali precedenti, e poi ci sono 3 terminali nodi adesso. quindi l'incremento è solo 1. Ho capito bene o ho capito male qualcosa?
Lily Long,

1
@LilyLong Potrebbe non essere immediatamente chiaro, ma gbm divide effettivamente i nodi in tre, il terzo figlio raggruppa i valori NA (cioè quelli che non possono essere confrontati direttamente con il valore dato). Ciò significa che ogni divisione aumenta il numero di nodi di due. Il pacchetto potrebbe essersi evoluto dall'ultima volta che l'ho usato per evitare di creare questo terzo figlio, quindi ricontrolla eseguendo la funzione pretty.gbm.tree.
casuale

2

Avevo una domanda sul parametro della profondità di interazione in gbm in R. Questa potrebbe essere una domanda noob, per la quale mi scuso, ma come fa il parametro, che credo denota il numero di nodi terminali in un albero, sostanzialmente indica X-way interazione tra i predittori?

Collegamento tra interazione.depth e il numero di nodi terminali

interaction.depthinteraction.depth

ionterun'ctioon.depth=#{Termionun'lNodeS}+1

Collegamento tra interazione.depth e l'ordine di interazione

Il legame tra interaction.depthe l'ordine di interazione è più noioso.

Invece di ragionare con l'interaction.depth, cerchiamo di ragionare con il numero di nodi terminali, che verrà chiamato J .

Esempio: supponiamo che tu abbia J = 4 nodi terminali (interaction.depth = 3) che puoi:

  1. eseguire la prima divisione sulla radice, quindi la seconda divisione sul nodo sinistro della radice e la terza divisione sul nodo destro della radice. L'ordine di interazione per questo albero sarà 2.
  2. eseguire la prima divisione sulla radice, quindi la seconda divisione sul nodo sinistro (rispettivamente a destra) della radice e una terza divisione su questo nodo molto a sinistra (rispettivamente a destra). L'ordine di interazione per questo albero sarà 3.

Pmion(J-1,n)

1

La risposta precedente non è corretta.

I monconi avranno una interazione con una profondità di 1 (e due foglie). Interaction.depth = 2 dà tre foglie.

Quindi: NumberOfLeaves = interaction.depth + 1


0

In realtà, le risposte precedenti sono errate.

N=2(K+1)-1L=2K

2K

N=ΣK=0K2K)

che equivale a:

N=2(K+1)-1

0

Puoi provare

tabella (predict (gbm (y ~., data = TrainingData, distribution = "gaussian", verbose = FALSE, n.trees = 1, restringimento = 0,01, bag.fraction = 1 ,action.depth = 1), n.trees = 1))

e vedi che ci sono solo 2 valori previsti unici. interaction.depth = 2 ti darà 3 distinti valori previsti. E convincerti.


Non è chiaro come questo risponda alla domanda.
Michael R. Chernick,
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.