Árvore de aumento de gradiente: “quanto mais variável, melhor”?

10

No tutorial do XGBoost, acho que quando cada árvore cresce, todas as variáveis ​​são verificadas para serem selecionadas para dividir os nós, e aquela com a divisão de ganho máximo será escolhida. Portanto, minha pergunta é: e se eu adicionar algumas variáveis ​​de ruído ao conjunto de dados, essas variáveis ​​de ruído influenciam a seleção de variáveis ​​(para cada árvore que cresce)? Minha lógica é que, como essas variáveis ​​de ruído NÃO fornecem divisão máxima de ganho, nunca seriam selecionadas, portanto, não influenciam o crescimento da árvore.

Se a resposta for sim, então é verdade que "quanto mais variáveis, melhor para o XGBoost"? Não vamos considerar o tempo de treinamento.

Além disso, se a resposta for afirmativa, é verdade que "não precisamos filtrar variáveis ​​não importantes do modelo".

Obrigado!

WCMC
fonte

Respostas:

10

Minha lógica é que, como essas variáveis ​​de ruído NÃO fornecem divisão máxima de ganho, nunca seriam selecionadas, portanto, não influenciam o crescimento da árvore.

Isso é perfeitamente correto para conjuntos de dados muito grandes e quase infinitos, em que o número de amostras em seu conjunto de treinamento oferece uma boa cobertura de todas as variações. Na prática, com dimensões suficientes, você acaba com muito ruído de amostragem, porque sua cobertura de possíveis exemplos é mais fraca quanto mais dimensões seus dados tiverem.

O ruído em variáveis ​​fracas que acaba se correlacionando por acaso com a variável de destino pode limitar a eficácia dos algoritmos de impulso, e isso pode acontecer mais facilmente em divisões mais profundas na árvore de decisão, onde os dados que estão sendo avaliados já foram agrupados em um pequeno subconjunto.

Quanto mais variáveis ​​você adicionar, maior será a probabilidade de obter variáveis ​​fracamente correlacionadas que pareçam boas com o algoritmo de seleção dividida para alguma combinação específica, que cria árvores que aprendem esse ruído em vez do sinal pretendido e, finalmente, generalizar mal.

Na prática, eu achei o XGBoost bastante robusto ao ruído em pequena escala. No entanto, também descobri que algumas vezes ele seleciona variáveis ​​de engenharia de baixa qualidade, de preferência a dados mais correlacionados, por razões semelhantes. Portanto, não é um algoritmo em que "quanto mais variáveis, melhor para o XGBoost" e você precisa se preocupar com possíveis recursos de baixa qualidade.

Neil Slater
fonte
muito agradável. Obrigado! Então, você acha que a seleção de recursos antes de instalar o XGBoost é necessária com base na sua experiência?
WCMC 5/17
@ Frank: Talvez. Você também pode começar com um conjunto completo de recursos e usar o relatório de importância variável do xgboost para ajudá-lo. Em geral, porém, o XGBoost não o salva completamente de nenhuma das preocupações comuns sobre seleção e engenharia de recursos.
Neil Slater
Olá @Neil, consulte datascience.stackexchange.com/questions/17288/… sempre que tiver uma chance. Obrigado.
WCMC
@ Frank: Eu já fiz ontem e deixei uma pergunta para esclarecimento, porque os números pareciam um pouco fora.
Neil Slater
Olá @Neil, como o pôster anterior não respondeu à sua pergunta, eu o reponto aqui com meu próprio projeto. Também forneci o conjunto de dados e o script R, que espero que seja mais conveniente para outras pessoas entenderem o problema. Agradeço se você gostaria de fornecer alguma ajuda.
WCMC