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.

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.


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)

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


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

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.


Je ne sais pas comment cela répond à la question.
Michael R. Chernick
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.