Árvore de Decisão

Um dos algoritmos mais poderosos do aprendizado de máquina.

Gustavo Candido
Data Hackers
7 min readOct 31, 2023

--

Photo by Adarsh Kummur on Unsplash

O que é?

Árvore de Decisão é um algoritmo supervisionado de aprendizado de máquina utilizado para classificação e regressão. O objetivo é criar um modelo que prevê o valor do target, aprendendo regras simples através das features.

Vantagens

  • Simples de entender e interpretar
  • Necessita pouca preparação dos dados
  • É capaz de lidar com variáveis númericas e categóricas

Desvantagens

  • Árvores de decisão são propensos a criar modelos com overfitting que não generalizam bem
  • Podem ser instáveis pois pequenas variáveis podem gerar árvores totalmente diferentes
  • As previsões não são contínuas, mas sim aproximações

Na prática

Iremos utilizar um dataset de classificação de flores do Scikit-Learn, onde há 3 possíveis classes. Vamos treinar uma árvore de decisão para classificar uma flor, a partir de suas características, em setosa, versicolor ou virginica.

Após o modelo treinado, podemos utilizar a biblioteca GraphViz para visualizar a árvore de decisão

Visualização da Árvore de Decisão com o GraphViz

Cada retângulo é um nó. Cada nó possui exatamente 1 pai e 2 filhos. O nó que não possui pai é o nó raíz.

Pegando uma instância para usar como exemplo, vamos ver como ela se comporta e qual caminho faz na árvore?

Perceba que o nó raíz pergunta se a largura da pétala é menor ou igual 0.8. Se for verdadeiro, vai para o nó da esquerda. Caso contrário, iremos para direita.

No nosso exemplo, a largura da pétala é de 1.5, portanto é falso, não é menor ou igual à 0.8. Vamos para o nó da direita:

No segundo nó, a pergunta é se a largura da pétala é menor ou igual à 1.75. A nossa flor possui 1.5 de largura de pétala. Logo, é verdadeiro. Vamos para o nó da esquerda:

Agora, a condição é se o tamanho da pétala é maior ou igual à 4.95. O nosso é 4.9, então é verdadeiro. Seguimos no nó da esquerda:

Nesse nó, a pergunta é se a largura pétala é menor ou igual à 1.65. A nossa é 1.5. Como é verdadeiro, vamos para o nó da esquerda:

Chegamos no nó folha, que é aquele que não possui filhos. Quando a instância chega nesse nó, ela é classificada.

Samples é a quantidade de instâncias que durante o treinamento caíram naquele nó.

Value é um array que mostra a quantidade de instâncias de cada classe que caíram nesse nó.

Class indica qual classe a árvore irá atribuir para os valores que caírem naquele nó.

Gini

A impureza de Gini mede a probabilidade de uma instância qualquer ser escolhida aleatoriamente. Quanto menor o valor o valor, maior o grau de pureza daquele nó. Atinge seu mínimo (zero) quando todos os casos no nó caem em uma única categoria de destino. Isto é um nó puro.

Fórmula do Coeficiente de Gini
  • GI é o coeficiente de gini
  • n é número de amostras
  • pi é a probabilidade da classe

Pegando um nó qualquer, é possível perceber que o gini é de 0.168. A conta para obter esse resultado seria essa:

Como a árvore trabalha com valores exatos e eu arredondei, houve uma diferença de 0.001. Mas nada que impacte o nosso resultado final, podemos ignorar essa diferença.

Entropia

De forma similar ao gini, a entropia é a medida da desordem, ou da pureza. Basicamente, é a mensuração da impureza ou aleatoriedade dos dados observados. Se aproxima de 0 quando o nó está puro. Por padrão, a árvore de decisão utiliza o gini, para trocar é só especificar “entropy” no parâmetro criterion.

Fórmula do Coeficiente de Entropia
  • Hi é o coeficiente de entropia
  • n é o número de amostras
  • pi é a probabilidade da classe

Perceba que é o mesmo nó utilizado para calcular o gini, mas agora com entropia. O cálculo de impureza desse nó seria o seguinte:

Photo by Lucas K on Unsplash

Hiperparâmetros

Como dito anteriormente, a árvore de decisão é um algoritmo muito poderoso e que aprende os dados muito bem. Se não for passado nenhum parâmetro, provavelmente o modelo irá overffitar.

  • max_depth controla a profundidade da árvore.
  • min_samples_split representa o minímo de instâncias que um nó precisa para fazer um split.
  • min_samples_leaf representa o minímo de instâncias em um nó folha.
  • max_leaf_nodes controla o número máximo de nó folha.

Perceba que é crucial saber controlar esse parâmetros. Se colocar números altos, irá fazer com que a árvore aprenda demais e cause overfitting. Do outro lado, números muito baixos irá fazer com que o modelo não aprenda nada. O ajuste dos parâmetros é crucial para encontrar um modelo ideal.

Árvore de Decisão para Regressão

Compreendido o conceito de árvore de decisão para problemas de classificação, podemos entender para regressão, que é bem similar!

Vamos utilizar esse dataset abaixo, que apresenta um target contínuo (salário) e features númericas.

Após treinar o modelo, a árvore ficou muito maior do que a de classificação. Para fins didáticos, colocarei apenas uma parte dela aqui, mas o conceito é o mesmo da classificação:

Parte da Árvore de Decisão em um problema de Regressão

Há algumas diferenças: ao invés de utilizar o coeficiente de gini ou entropia para divisões, a árvore utiliza a métrica squared_error. Aqui, o value é a média de todas as instância daquele nó. Ao chegar no nó folha, o value assume a média de todas as instâncias de treinamento daquele nó folha.

Função de Custo

Função de Custo para Classificação
Função de Custo para Regressão
  • J (K, Tk) representa a função de custo em que K é a feature e Tk é o limiar
  • m é o número de samples do nó atual
  • esquerdo se refere ao nó esquerdo e direito ao nó direito
  • G é o coeficiente de gini
  • MSE é o mean squared error

Vamos fazer um exemplo usando uma instância de classificação:

É possível perceber que K é petal length e Tk é 4.85. O número de samples do nó atual é igual à 46, do nó da esquerda é 3 e da direita é 43. O gini do nó da esquerda é 0.444 e da direita é 0, sendo considerado um nó puro. Aplicando a fórmula de função de custo para classificação:

Portanto, é correto dizer que 0.0289 é o custo desse split. Quanto mais baixo o valor da função de custo, melhor o modelo.

Complexidade

No geral, o número de operações para construção de uma árvore binária balanceada é dado pela fórmula:

Número de operações para construção

Enquanto para consulta (query), é:

Número de operações para consulta

O que aprendemos?

  • O que é e como funciona uma árvore de decisão
  • O que é gini e entropia e como calcular
  • Hiperparâmetros de uma árvore de decisão
  • Função de custo da árvore
  • Complexidade da árvore

Links

Para se conectar comigo, acesse meu LinkedIn.

Para ver o código desse artigo, acesse meu GitHub.

Referências

  1. Clube de Assinatura Universidade dos Dados
  2. Scikit-Learn — Decision Tree
  3. Preditiva AI

--

--

Gustavo Candido
Data Hackers

Estudante de Sistemas de Informação na ESPM - SP. Alguém interessado em ciência de dados, computação e matemática.