Atualmente, estou usando o XGBoost em um conjunto de dados com 21 recursos (selecionados da lista de cerca de 150 recursos), depois os codifiquei com um hot-code para obter ~ 98 recursos. Alguns desses 98 recursos são um pouco redundantes, por exemplo: uma variável (recurso) também aparece como B eC .
Minhas perguntas são:
- Como ( se? ) As Árvores de Decisão Impulsionadas lidam com multicolinearidade?
- Como a existência da multicolinearidade afetaria a previsão se não fosse tratada?
Pelo que entendi, o modelo está aprendendo mais de uma árvore e a previsão final é baseada em algo como uma "soma ponderada" das previsões individuais. Portanto, se isso estiver correto, as Boosted Decision Trees devem poder lidar com a co-dependência entre variáveis.
Além disso, em uma observação relacionada - como o objeto de importância variável no XGBoost funciona?
feature-selection
correlation
xgboost
gbm
user140323
fonte
fonte
Respostas:
As árvores de decisão são, por natureza, imunes à multicolinearidade. Por exemplo, se você tiver 2 recursos que são 99% correlacionados, ao decidir sobre uma divisão, a árvore escolherá apenas um deles. Outros modelos, como a regressão logística, usariam os dois recursos.
Como as árvores reforçadas usam árvores de decisão individuais, elas também não são afetadas pela multicolinearidade. No entanto, é uma boa prática remover todos os recursos redundantes de qualquer conjunto de dados usado para treinamento, independentemente do algoritmo do modelo. No seu caso, como você está obtendo novos recursos, você pode usar essa abordagem, avaliar a importância de cada recurso e reter apenas os melhores para o seu modelo final.
A matriz de importância de um modelo xgboost é na verdade um objeto data.table com a primeira coluna listando os nomes de todos os recursos realmente usados nas árvores aumentadas. A segunda coluna é a métrica Ganho, que implica a contribuição relativa do recurso correspondente ao modelo calculado, levando-se a contribuição de cada recurso para cada árvore no modelo. Um valor mais alto dessa métrica quando comparado a outro recurso implica que é mais importante para gerar uma previsão.
fonte
Fiquei curioso sobre isso e fiz alguns testes.
Treinei um modelo no conjunto de dados de diamantes e observei que a variável "x" é a mais importante para prever se o preço de um diamante é maior que um determinado limite. Em seguida, adicionei várias colunas altamente correlacionadas com x, executei o mesmo modelo e observei os mesmos valores.
Parece que quando a correlação entre duas colunas é 1, o xgboost remove a coluna extra antes de calcular o modelo, portanto a importância não é afetada. No entanto, quando você adiciona uma coluna parcialmente correlacionada a outra, portanto, com um coeficiente mais baixo, a importância da variável original x é reduzida.
Por exemplo, se eu adicionar uma variável xy = x + y, a importância de x e y diminui. Da mesma forma, a importância de x diminui se eu adicionar novas variáveis com r = 0,4, 0,5 ou 0,6, embora apenas um pouco.
Eu acho que a colinearidade não é um problema para aumentar quando você calcula a precisão do modelo, porque a árvore de decisão não se importa com qual das variáveis é usada. No entanto, isso pode afetar a importância das variáveis, porque a remoção de uma das duas variáveis correlacionadas não afeta muito a precisão do modelo, uma vez que a outra contém informações semelhantes.
Avalie um modelo nos dados de diamantes
Prevemos se o preço é superior a 400, considerando todas as variáveis numéricas disponíveis (quilate, profundidade, tabela, x, y, x)
Observe que x é a variável mais importante, com uma pontuação de ganho de importância de 0,375954.
Modelo treinado em diamantes, adicionando uma variável com r = 1 ex
Aqui, adicionamos uma nova coluna, que, no entanto, não adiciona nenhuma informação nova, pois está perfeitamente correlacionada com x.
Observe que essa nova variável não está presente na saída. Parece que o xgboost remove automaticamente variáveis perfeitamente correlacionadas antes de iniciar o cálculo. O ganho de importância de x é o mesmo, 0,3759.
Modelo treinado em diamantes, adicionando uma coluna para x + y
Nós adicionamos uma nova coluna xy = x + y. Isso está parcialmente correlacionado com ambos x e y.
Observe que a importância de xey é ligeiramente reduzida, passando de 0,3759 para 0,3592 para x e de 0,116 para 0,079 para y.
Modelo treinado em dados de diamantes, modificado adicionando colunas redundantes
Adicionamos três novas colunas que estão correlacionadas com x (r = 0,4, 0,5 e 0,6) e vemos o que acontece.
Observe que a importância de x é reduzida, passando de 0,3759 para 0,279.
fonte
Há uma resposta de Tianqi Chen (2018).
Para resumir, o Xgboost não usa aleatoriamente os recursos correlatos em cada árvore, que modelo de floresta aleatória sofre com essa situação.
Referência :
Tianqi Chen, Michaël Benesty, Tong He. 2018. “Entenda seu conjunto de dados com o Xgboost.” Https://cran.r-project.org/web/packages/xgboost/vignettes/discoverYourData.html#numeric-vs-categorical-variables .
fonte
Uma observação sobre a resposta de Sandeep: Supondo que dois de seus recursos sejam altamente colineares (digamos, 99% do tempo), de fato, apenas um recurso é selecionado em cada divisão, mas para a próxima divisão, o xgb pode selecionar o outro recurso. Portanto, o ranking de recursos xgb provavelmente classificará os dois recursos colineares igualmente. Sem algum conhecimento prévio ou outro processamento de recurso, você quase não tem meios desta classificação fornecida para detectar que os dois recursos são colineares.
Agora, quanto à importância relativa que gera o xgboost, ele deve ser muito semelhante (ou talvez exatamente semelhante) ao ranking de árvores impulsionadas pelo gradiente sklearn. Veja aqui as explicações.
fonte