Que signifie la profondeur d'interaction dans GBM?

30

J'avais une question sur le paramètre de profondeur d'interaction en gbm dans R. Cela peut être une question noob, pour laquelle je m'excuse, mais comment le paramètre, qui je crois dénote le nombre de nœuds terminaux dans un arbre, indique fondamentalement X-way interaction entre les prédicteurs? J'essaie juste de comprendre comment cela fonctionne. De plus, j'obtiens des modèles assez différents si j'ai un ensemble de données avec par exemple deux variables de facteur différentes par rapport au même ensemble de données, sauf que ces deux variables de facteur sont combinées en un seul facteur (par exemple, les niveaux X dans le facteur 1, les niveaux Y dans le facteur 2, la variable combinée a Facteurs X * Y). Ce dernier est nettement plus prédictif que le premier. J'avais pensé que l'augmentation de la profondeur d'interaction permettrait de reprendre cette relation.

tomas
la source

Réponses:

22

Les deux réponses précédentes sont fausses. Le package GBM utilise le interaction.depthparamètre comme un certain nombre de divisions qu'il doit effectuer sur une arborescence (à partir d'un seul nœud). Comme chaque groupe augmente le nombre total de noeuds par trois et le nombre de noeuds terminaux par 2 (noeud {node gauche, au noeud droit, le noeud NA}) le nombre total de noeuds dans l'arbre sera 3N+1 et le nombre des nœuds terminaux 2N+1 . Cela peut être vérifié en regardant la sortie de la pretty.gbm.treefonction.

Le comportement est plutôt trompeur, car l'utilisateur s'attend en effet à ce que la profondeur soit la profondeur de l'arbre résultant. Ce n'est pas.

au hasard
la source
Qu'est-ce que N ici: nombre de nœuds, interaction.depth ou autre chose?
Julian
Il s'agit d'un certain nombre de divisions effectuées, à partir d'un seul nœud (également, la profondeur d'interaction).
aléatoire
1
Je pense que chaque division n'augmente le nombre total de nœuds terminaux que de 1. Supposons donc qu'un arbre n'ait qu'une seule division, puis il a 2 nœuds terminaux, maintenant vous effectuez une division sur l'un des nœuds terminaux précédents, et puis il y a 3 terminaux nœuds maintenant. donc l'incrément est juste de 1. Est-ce que je comprends bien ou j'ai mal compris quelque chose?
Lily Long
1
@LilyLong Ce n'est peut-être pas immédiatement clair, mais gbm divise en fait les nœuds en trois, le troisième enfant regroupant les valeurs NA (c'est-à-dire celles qui ne peuvent pas être directement comparées à la valeur donnée). Cela signifie que chaque division augmente le nombre de nœuds de deux. Le package a peut-être évolué depuis que je l'ai utilisé pour la dernière fois pour éviter de créer ce troisième enfant, alors veuillez vérifier ceci en exécutant la fonction pretty.gbm.tree.
aléatoire
2

J'avais une question sur le paramètre de profondeur d'interaction en gbm dans R. Cela peut être une question noob, pour laquelle je m'excuse, mais comment le paramètre, qui je crois dénote le nombre de nœuds terminaux dans un arbre, indique fondamentalement X-way interaction entre les prédicteurs?

Lien entre interaction.depth et le nombre de nœuds terminaux

interaction.depthinteraction.depth

interaction.depth=#{TerminalNodes}+1

Lien entre interaction.depth et l'ordre d'interaction

Le lien entre interaction.depthet l'ordre d'interaction est plus fastidieux.

Au lieu de raisonner avec le interaction.depth, nous allons raisonner avec le nombre de noeuds terminaux, que nous appelle J .

Exemple: Disons que vous avez J = 4 nœuds terminaux (interaction.depth = 3), vous pouvez soit:

  1. faire le premier fractionnement sur la racine, puis le deuxième fractionnement sur le nœud gauche de la racine et le troisième fractionnement sur le nœud droit de la racine. L'ordre d'interaction pour cet arbre sera 2.
  2. faire le premier fractionnement sur la racine, puis le deuxième fractionnement sur le nœud gauche (respectivement droit) de la racine, et un troisième fractionnement sur ce nœud très gauche (respectivement droit). L'ordre d'interaction pour cet arbre sera 3.

Pmin(J1,n)
Etienne Kintzler
la source
1

La réponse précédente n'est pas correcte.

Les souches auront une profondeur d'interaction de 1 (et auront deux feuilles). Mais interaction.depth = 2 donne trois feuilles.

Donc: NumberOfLeaves = interaction.depth + 1

alexeigor
la source
0

En fait, les réponses précédentes sont incorrectes.

Soit K la profondeur d'interaction, alors le nombre de nœuds N et de feuilles L (c'est-à-dire les nœuds terminaux) sont respectivement donnés par :

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

2k

N=k=0K2k)

ce qui équivaut à:

N=2(K+1)1
Marion Azoulai
la source
0

Tu peux essayer

table (prédire (gbm (y ~., data = TrainingData, distribution = "gaussian", verbose = FALSE, n.trees = 1, shrinkage = 0.01, bag.fraction = 1, interaction.depth = 1), n.trees = 1))

et voyez qu'il n'y a que 2 valeurs prédites uniques. interaction.depth = 2 vous obtiendrez 3 valeurs prédites distinctes. Et convaincez-vous.

StatPhD
la source
Je ne sais pas comment cela répond à la question.
Michael R. Chernick