Redes Neurais ou Random Forest/Gradient Boosting? Qual o melhor?
- #Machine Learning
De uns tempos para cá venho me dedicando a conhecer melhor sobre as metodologias Ensemble e suas confluências e dissonâncias com as redes neurais. E é um assunto muito amplo e vale a pena conferir quem quiser pesquisar um pouco mais sobre. Não venho fazer polêmica, na verdade busco trazer neste post resumidamente o que eu estudei por esses meses e também demonstrar alguns desenvolvimentos bacanas que trazem o “melhor dos dois mundos”.
Hoje em dia existem diversas ferramentas muito interessantes de Ensemble que vão muito além do famoso Random Forest, citando alguma delas, o conhecido XGBoost, temos também a biblioteca bem diversificada do Tensorflow Decision Forest que incorpora desde o Random Forest até o Gradient Boosting, com facilidade de inclusão de redes neurais em diversas fases do pipeline e também o LightGBM da Microsoft, trazendo um algoritmo muito eficaz e com uma proposta diferente do XGBoost, todavia, muito funcional.
Agora quando o assunto são Redes Neurais e Ensemble, existem diversos caminhos interessantes que podemos pensar. Como pontuei no meu Linkedin, podemos fazer um Ensemble de Random Forest com Deep Learning, colocarei novamente neste post a ilustração para facilitar a visualização da ideia. É possível, em um caminho muito parecido, fazer um processamento de linguagem natural (NLP), prévio ao Random Forest ou outra metodologia, quando trabalhamos com dados tabulares e as categoriais possuem uma cardinalidade muito grande (ou seja, muitos atributos diferentes dentro da mesma variável).
Todavia, o universo de possibilidades é enorme e não pára por ai. Quando tratamos desse assunto, vemos Redes Neurais se tornando Decision Forest e indico o artigo a seguir que fala sobre isso:
https://arxiv.org/pdf/1806.06988.pdf
E para quem prefere o código ao invés da leitura acadêmica, a seguir está a implementação em TensorFlow com a API Keras da Deep Neural Decision Forest:
https://keras.io/examples/structured_data/deep_neural_decision_forests/
Mas você pode estar pensando neste momento que Decision Tree não são necessariamente ensembles. Sim, realmente, não o são. Todavia seu stacking, permite denominar de Ensemble. E aumentando o grau de dificuldade da questão que estou abordando, existem também as Redes Neurais que englobam isso, como por exemplo o NODE (Neural Oblivious Decision Ensembles) e segue o artigo científico denotando essa técnica:
https://arxiv.org/abs/1909.06312
E como não pode faltar, para aqueles que preferem a parte prática, a sua implementação está no GitHub do próprio autor do artigo:
https://github.com/Qwicen/node
E para finalizar esse meus rabiscos, não posso deixar de citar o GrowNet que faz a junção do Gradient Boosting e das redes neurais com maestria. Vou deixar o link do paper que traz na íntegra essa técnica em sua implementação em 2020:
https://arxiv.org/abs/2002.07971v2
E o GitHub do autor para aqueles que quiserem testar o código em algum dataset ou mesmo conhecê-lo para aprendizado:
https://github.com/sbadirli/GrowNet.
Abraço a todos,
André de Paula Galhardo