¿Qué significa la profundidad de interacción en GBM?


30

Tenía una pregunta sobre el parámetro de profundidad de interacción en gbm en R. Esta puede ser una pregunta novata, por lo que me disculpo, pero ¿cómo el parámetro, que creo que denota el número de nodos terminales en un árbol, básicamente indica X-way interacción entre los predictores? Solo trato de entender cómo funciona eso. Además, obtengo modelos bastante diferentes si tengo un conjunto de datos con, digamos, dos variables de factores diferentes versus el mismo conjunto de datos, excepto que esas dos variables de factores se combinan en un solo factor (por ejemplo, niveles X en el factor 1, niveles Y en el factor 2, la variable combinada tiene Factores X * Y). Este último es significativamente más predictivo que el primero. Pensé que aumentar la profundidad de la interacción mejoraría esta relación.

Respuestas:


22

Ambas respuestas anteriores son incorrectas. El paquete GBM usa el interaction.depthparámetro como una cantidad de divisiones que debe realizar en un árbol (comenzando desde un solo nodo). A medida que cada división aumenta el número total de nodos en 3 y el número de nodos terminales en 2 (nodo {nodo izquierdo, nodo derecho, nodo NA}), el número total de nodos en el árbol será 3 N + 1 y el número de nodos terminales 2 N + 1 . Esto se puede verificar observando la salida de la función.3N+12N+1pretty.gbm.tree

El comportamiento es bastante engañoso, ya que el usuario realmente espera que la profundidad sea la profundidad del árbol resultante. No lo es.


¿Qué es N aquí: número de nodos, profundidad de interacción u otra cosa?
Julián

Es una serie de divisiones realizadas, comenzando desde un solo nodo (también, profundidad de interacción).
aleatorio

1
Creo que cada división solo aumenta el número total de nodos terminales en 1. así que supongamos que un árbol solo tiene una división, luego tiene 2 nodos terminales, ahora realiza una división en uno de los nodos terminales anteriores, y luego hay 3 terminales nodos ahora. entonces el incremento es solo 1. ¿Lo entiendo bien o entendí mal algo?
Lily Long

1
@LilyLong Puede que no esté claro de inmediato, pero gbm en realidad divide los nodos en tres, el tercer hijo agrupa los valores de NA (es decir, aquellos que no se pueden comparar directamente con el valor dado). Eso significa que cada división aumenta el número de nodos en dos. El paquete podría haber evolucionado desde la última vez que lo usé para evitar crear este tercer hijo, así que por favor verifique esto ejecutando la función pretty.gbm.tree.
aleatorio

2

Tenía una pregunta sobre el parámetro de profundidad de interacción en gbm en R. Esta puede ser una pregunta novata, por lo que me disculpo, pero ¿cómo el parámetro, que creo que denota el número de nodos terminales en un árbol, básicamente indica X-way interacción entre los predictores?

Enlace entre la profundidad de la interacción y el número de nodos terminales

interaction.depthinteraction.depth

interaction.depth=#{TerminalNodes}+1

Enlace entre la profundidad de la interacción y el orden de interacción

El vínculo entre interaction.depthy el orden de interacción es más tedioso.

En lugar de razonar con el interaction.depth, vamos a la razón con el número de nodos terminales, que vamos a llamadas J .

Ejemplo: Supongamos que tiene J = 4 nodos terminales (Interaction.depth = 3) puede:

  1. haga la primera división en la raíz, luego la segunda división en el nodo izquierdo de la raíz y la tercera división en el nodo derecho de la raíz. El orden de interacción para este árbol será 2.
  2. haga la primera división en la raíz, luego la segunda división en el nodo izquierdo (respectivamente derecho) de la raíz, y una tercera división en este nodo muy izquierdo (respectivamente derecho). El orden de interacción para este árbol será 3.

Pmin(J1,n)

1

La respuesta anterior no es correcta.

Los tocones tendrán una profundidad de interacción de 1 (y tendrán dos hojas). Pero la interacción.depth = 2 da tres hojas.

Entonces: NumberOfLeaves = Interacción.depth + 1


0

En realidad, las respuestas anteriores son incorrectas.

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

2k

N=k=0K2k)

que es equivalente a:

N=2(K+1)1

0

Puedes probar

tabla (predecir (gbm (y ~., data = TrainingData, distribution = "gaussian", verbose = FALSE, n.trees = 1, shrinkage = 0.01, bag.fraction = 1, Interaction.depth = 1), n.trees = 1))

y vea que solo hay 2 valores predichos únicos. interactive.depth = 2 le dará 3 valores predichos distintos. Y convencerte a ti mismo.


No está claro cómo esto responde la pregunta.
Michael R. Chernick
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.