Aprendendo em uma Floresta Aleatória

Veja a floresta e não as árvores

Josenildo Costa da Silva
Machina Sapiens
8 min readMar 12, 2018

--

Nota do Tradutor: Este artigo é uma tradução do artigo original publicado por

no blog Towards Data Science.

Photo by Achim Bongard

Floresta Aleatória (Random Forest) é um algoritmo de aprendizagem de máquina flexível e fácil de usar que produz excelentes resultados a maioria das vezes, mesmo sem ajuste de hiperparâmetros. É também um dos algoritmos mais utilizados, devido à sua simplicidade e o fato de que pode ser utilizado para tarefas de classificação e também de regressão. Neste post, você vai aprender como o Floresta Aleatória funciona e outras coisas importantes sobre ele.

Sumário

  • Como Funciona
  • Analogia da Vida Real
  • Importancia das Características (features)
  • Diferença entre Árvores de Decisão e Florestas Aleatórias
  • Hiperparâmetros Importantes (poder de predição, velocidade)
  • Vantagens e Desvantagens
  • Casos de Uso
  • Conclusão

Como Funciona

Floresta Aleatória (random forest) é um algoritmo de aprendizagem supervisionada. Como você pode perceber pelo seu nome, ele cria uma floresta de um modo aleatório. A “floresta” que ele cria é uma combinação (ensemble) de árvores de decisão, na maioria dos casos treinados com o método de bagging. A idéia principal do método de bagging é que a combinação dos modelos de aprendizado aumenta o resultado geral.

Dizendo de modo simples: o algoritmo de florestas aleatórias cria várias árvores de decisão e as combina para obter uma predição com maior acurácia e mais estável.

Uma grande vantagem do algoritmo de florestas aleatórias é que ele pode ser utilizado tanto para tarefas de classificação quanto para regressão, o que representa a maioria dos sistemas de aprendizagem de máquina atuais. Eu irei discutir florestas aleatórias em classificação já que esta tarefa é considerada um dos pilares da aprendizagem de máquina. Abaixo, você pode ver uma floresta aleatória com duas árvores:

Com raras exceções um classificador de floresta aletória tem todos os hiperparâmetros de uma árvore de decisão e também todos os hiperparâmetros de um classificador de bagging, para controlar a combinação de árvores. Ao invés de construir um classificador bagging e passá-lo para um classificador de árvore de decisão, você pode usar a classe da floresta aleatória, que é mais conveniente e otimizada para árvore de decisões. Note que também há um regressor de florestas aleatórias para tarefas de regressão.

O algoritmo de floresta aleatória adiciona aleatoriedade extra ao model, quando está criando as árvores. Ao invés de procurar pela melhor característica ao fazer a partição de nodos, ele busca a melhor característica em um subconjunto aleatório das características. Este processo cria uma grande diversidade, o que geralmente leva a geração de modelos melhores.

Portanto, quando você está criando uma árvore no floresta aleatória, apenas um subconjunto aleatório das características é considerada na partição de um nodo. Você pode até fazer as árvores ficarem mais aleatórias utilizando limiares (thresholds) aleatórios para cada característica, ao invés de procurar pelo melhor limiar (como uma árvore de decisão geralmente faz).

Analogia da Vida Real

Imagine que um cara chamado Andrew deseja decidir para onde deve viajar em uma viagem de férias de um ano. Ele pede informações para vários conhecidos. Primeiro, ele encontra com um amigo que o pergunta para onde ele já viajou e se ele gostou ou não. Baseado nestas respostas, ele dá algumas sugestões para Andrew.

Esta é uma abordagem típica de árvores de decisão. O amigo de Andrew criou regras para guiar sua decisão sobre o que recomendar, a partir das respostas de Andrew.

Depois disto, Andrew começa a pedir sugestões para mais amigos e eles fazem várias perguntas diferentes antes de darem alguma sugestão. Então, ele escolhe os lugares que receberam mais recomendações, o que é uma abordagem típica de florestas aleatórias.

Importancia das Características (features)

Outra grande qualidade das florestas aleatórias é a facilidade para se medir a importância relativa de cada característica (feature) para a predição. Sklearn provê uma excelente ferramenta para isto, que mede a importancia das características analisando quantos nodos das árvores, que usam uma dada característica, reduzem impureza geral da floresta. Ele calcula este valor automaticamente para cada característica após o treinamento e normaliza os resultados para que a soma de todas as importancias seja igual a 1.

Se você não sabe como funciona uma árvore de decisão e se você não sabe o que é uma folha ou nodo, veja uma boa descrição da Wikipedia: em uma árvore de decisão cada nodo interno representa um teste em um atributo (p. ex. se ao jogar uma moeda dará cara ou coroa), cada ramo da árvore representa uma saída do teste, e cada folha representa um rótulo de classe (decisão tomada após calcular todos os atributos). Um nodo que não tem descendentes é uma folha.

Através da inspeção da importância das características, você pode decidir quais características deixar de fora do modelo, já que eles não contribuem o suficiente ou nada para o processo de predição. Isto é importante, porque uma regra geral em aprendizagem de máquina é que quanto mais características você tem, mais provavelmente seu modelo irá sofrer de superajuste (overfitting) e vice versa.

Na tabela abaixo você observa uma visualização da importancia de 13 características, que usei durante o projeto de classificação supervisionada do famoso dataset Titanic no Kaggle. Você pode encontrar este projeto aqui.

Diferenças entre Árvore de Decisão e Florestas Aleatórias

Como mencionado anteriormente, Floresta Aleatória é uma coleção de árvores de decisão, mas há algumas diferenças.

Se você treinar uma árvore com um dataset de treinamento e rótulos, ela vai elaborar um conjunto de regras que serão utilizadas para realizar predições.

Por exemplo, se você quiser prever se uma pessoa vai clicar em um anúncio online, você pode colecionar anúncios que a pessoa clicou no passado e algumas características que descrevam esta decisão. Se você colocar as características e rótulos em uma árvore de decisão ela vai gerar nodos e algumas regras. Você poderá então prever ser o anúncio será clicado ou não. Quando uma árvore de decisão gera regras e nodos, normalmente utiliza calculos de ganho de informação e gini index. Por outro lado, a Floresta Aleatória faz isto de modo aleatório.

Outra diferença é que árvores de decisão profundas podem sofrer de sobreajuste (overfitting). Florestas Aleatórias evitam o sobreajuste na maioria dos casos, pois trabalha com subconjuntos aleatórios das características e constrói árvores menores a partir de tais subconjuntos. Depois do treinamento, as subárvores são combinadas. Esta abordagem torna a computação mais lenta, dependendo de quantas árvores serão construiídas pelo Floresta Aleatória.

Hiperparâmetros Importantes

Os parâmetros no Floresta Aleatória são utilizados ou para aumentar o poder preditivo do modelo ou para tornar o modelo mais rápido. Irei discutir os hiperparâmetros da função random forest do pacote sklearn.

1. Aumentar o poder preditivo

Primeiramente, há o hiperparâmetro n_estimators, que indica o número de árvores construídas pelo algoritmo antes de tomar uma votação ou fazer uma média de predições. Em geral, uma quantidade elevada de árvores aumenta a performance e torna as predições mais estáveis, mas também torna a computação mais lenta.

Outor hiperparâmetro importante é max_features, que indica o número máximo de características a serem utilizadas pelo Floresta Aleatória na construção de uma dada árvore. Sklearn oferece várias opções, descritas na sua documentação.

Um ultimo hiperparâmetro que discutiremos é o min_sample_leaf. Este parâmetro indica o número mínimo de folhas que devem existir em uma dada árvore.

2. Aumentar a velocidade do modelo

O hiperparâmetro n_jobs informa quantos processadores o algoritmo pode utilizar. Se ele tiver valor 1, pode utilizar apenas um processador. O valor -1 significa que não há limite na quantidade de processadores a ser utilizada.

O parâmetro random_state torna o resultado do modelo replicável. O modelo será produzido do mesmo modo se ele tiver um valor definido de random_state e se forem utilizados os mesmos parâmetros com o mesmos dados de treinamento.

Por último, há o oob_score(também chamado de oob sampling), que é um método de validação cruzada para floresta aleatória. Neste tipo de amostragem (sampling), cerca de um terço dos dados não é utilizado no treinamento e pode ser utilizado para avaliar a performance. Estas amostras são chamadas out of the bag samples. É uma técnica similar ao método de validação cruzada leave one out, mas sem nenhum custo computacional extra.

Vantagens e Desvantagens

Uma das vantagens do Floresta Aleatória é que ele pode ser utilizado tanto para regressão quanto para classificação e é fácil visualizar a importância relativa que ele atribui para cada característica na suas entradas.

O Floresta Aleatória é também considerado um algoritmo muito fácil e acessível, pois seus hiperparâmetros com valores default geralmente produzem um bom resultado de predição. O número de hiperparâmetros não é tão grande e são muito fáceis de compreender.

Um dos grande problemas em aprendizagem de máquina é subreajuste (overfitting), mas a maior parte do tempo isto não ocorrerá tão facilmente com um classificador de Floresta Aleatória qualquer. Isto porquê, se há árvores suficiente na floresta, o classificador não irá sobreajustar o modelo.

A maior limitação do Floresta Aleatória é que uma quantidade grande de árvores pode tornar o algoritmo lento e ineficiente para predições em tempo real. Em geral, estes algoritmos são rápidos para treinar, mas muito lentos para fazer predições depois de treinados. Uma predição com mais acurácia requer mais árvores, o que faz o modelo ficar mais lento. Em muitas aplicações do mundo real o Floresta Alatória é rápido o suficiente, mas pode certamente haver situações onde a performance em tempo de execução é importante e outras abordagens são mais apropriadas.

E é claro, o Floresta Aleatória é uma ferramenta de modelagem preditiva e não descritiva. Isto significa que, se você está procurando uma descrição dos relacionamentos nos seus dados, você deve escolher outras abordagens.

Aplicações

O algorimo Floresta Aleatória é utilizado em muitas áreas diferentes, tal como setor bancário, mercado financeiro, medicina, comércio eletrônico. No setor bancário ele é utilizado, por exemplo, para detectar clientes que irão utilizar os serviços bancários mais frequentemente que outros e pagar suas dívidas pontualmente. Neste domínio ele também é utilizado para detectar fraudes de clientes que querem lesar o banco. No setor financeiro, ele é utilizado para determinar o desempenho futuro de uma ação. Na área de saúde ele é utilizado para identificar a correta combinação de componentes em medicina, e também é utilizado para analisar o histórico médico de um paciente para identificar doenças. Por último, em comércio eletrônico o Floresta Aleatória é utilizado para determinar se um cliente irá gostar do produto ou não.

Resumo

O Floresta Aleatória é um excelente algoritmo para ser utilizado nos primeiros estágios de criação do processo de desenvolvimento de um modelo, para se ter uma ideia de performance. Devido à sua simplicidade, é difícil construir um Floresta Aleatória “ruim”. Este algoritmo é também uma boa opção se você precisa desenvolver um modelo em curto espaço de tempo. Além disso, ele provê um bom indicador de importância para as características.

O algoritmo Floresta Aleatória é também quase imbatível em termos de performance. É claro que você pode provavelmente encontrar um modelo com melhor performance, talvez uma rede neural, mas estas levaram muito mais tempo para desenvolver. Outra vantagem é que ele pode trabalhar com diferentes dipos de entradas, tais como binárias, categóricas ou numéricas.

Em resumo, Floresta Aleatória é uma ferramenta (geralmente) rápida, simples e flexível, embora apresente algumas limitações.

Nota do Tradutor: Este artigo é uma tradução do artigo original publicado por

no blog Towards Data Science. Foi publicado inicialmente no blog Machine Learning Blog, por (https://machinelearning-blog.com).

--

--