O que significa profundidade de interação no GBM?


30

Eu tinha uma pergunta sobre o parâmetro de profundidade de interação em gbm em R. Esta pode ser uma pergunta noob, pela qual peço desculpas, mas como o parâmetro, que acredito denota o número de nós terminais em uma árvore, indica basicamente X-way interação entre os preditores? Apenas tentando entender como isso funciona. Além disso, recebo modelos bem diferentes se eu tiver um conjunto de dados com, digamos, duas variáveis ​​de fator diferentes versus o mesmo conjunto de dados, exceto que essas duas variáveis ​​de fator sejam combinadas em um único fator (por exemplo, níveis X no fator 1, níveis Y no fator 2, a variável combinada tem Fatores X * Y). O último é significativamente mais preditivo que o primeiro. Eu pensava que o aumento da profundidade da interação pegaria esse relacionamento.

Respostas:


22

Ambas as respostas anteriores estão erradas. O pacote GBM usa o interaction.depthparâmetro como um número de divisões que ele deve executar em uma árvore (iniciando em um único nó). À medida que cada divisão aumenta o número total de nós em 3 e o número de nós terminais em 2 (nó {nó esquerdo, nó direito, nó NA}), o número total de nós na árvore será 3 N + 1 e o número dos nós terminais 2 N + 1 . Isso pode ser verificado dando uma olhada na saída da função.3N+12N+1pretty.gbm.tree

O comportamento é bastante enganador, pois o usuário realmente espera que a profundidade seja a profundidade da árvore resultante. Não é.


O que é N aqui: número de nós, interação.de profundidade ou outra coisa?
Julian

É um número de divisões realizadas, iniciando em um único nó (também, profundidade de interação).
aleatório

1
Eu acho que cada divisão apenas aumenta o número total de nós de terminal em 1. Portanto, suponha que uma árvore tenha apenas uma divisão, então ela tem 2 nós de terminal, agora você realiza uma divisão em um dos nós de terminal anteriores e há 3 terminais nós agora. portanto, o incremento é apenas 1. Entendi direito ou entendi algo errado?
Lily Long

1
@LilyLong Pode não estar imediatamente claro, mas o gbm realmente divide os nós em três, o terceiro filho, agrupando os valores de NA (ou seja, aqueles que não podem ser comparados diretamente com o valor fornecido). Isso significa que cada divisão aumenta o número de nós em dois. O pacote pode ter evoluído desde a última vez que o usei para evitar a criação desse terceiro filho. Portanto, verifique isso executando a função pretty.gbm.tree.
aleatório

2

Eu tinha uma pergunta sobre o parâmetro de profundidade de interação em gbm em R. Esta pode ser uma pergunta noob, pela qual peço desculpas, mas como o parâmetro, que acredito denota o número de nós terminais em uma árvore, indica basicamente X-way interação entre os preditores?

Link entre a interação.depth e o número de nós do terminal

interaction.depthinteraction.depth

interaction.depth=#{TerminalNodes}+1

Link entre a interação.depth e a ordem de interação

O link entre interaction.depthe ordem de interação é mais tedioso.

Em vez de raciocínio com o interaction.depth, vamos raciocinar com o número de nós terminais, que vamos chamados J .

Exemplo: Digamos que você tenha J = 4 nós de terminal (interação.depth = 3), você pode:

  1. faça a primeira divisão na raiz, depois a segunda divisão no nó esquerdo da raiz e a terceira divisão no nó direito da raiz. A ordem de interação para esta árvore será 2.
  2. faça a primeira divisão na raiz, depois a segunda divisão no nó esquerdo (respectivamente à direita) da raiz e uma terceira divisão neste nó muito à esquerda (respectivamente à direita). A ordem de interação para esta árvore será 3.

Pmin(J1,n)

1

A resposta anterior não está correta.

Os tocos terão uma interação. Profundidade de 1 (e duas folhas). Mas interação.depth = 2 dá três folhas.

Então: NumberOfLeaves = interação.depth + 1


0

Na verdade, as respostas anteriores estão incorretas.

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

Cada um desses níveis tem 2k

N=k=0 0K2k)

que é equivalente a:

N=2(K+1)-1

0

Podes tentar

tabela (prever (gbm (y ~., dados = TrainingData, distribuição = "gaussian", detalhado = FALSE, n.trees = 1, encolhimento = 0,01, bag.fraction = 1, interação.depth = 1), n.trees = 1))

e veja que existem apenas 2 valores previstos exclusivos. interação.depth = 2, você obterá 3 valores previstos distintos. E se convencer.


Não está claro como isso responde à pergunta.
Michael R. Chernick
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.