Trilha machine learning: Algoritmo de árvore de decisão



Anteriormente vimos que dentro do aprendizado de máquina, podemos ter algoritmos de aprendizado supervisionado e não supervisionado, e dentro dos supervisionados temos aqueles que podem ser usados para regressão (previsão) ou classificação (separação). 

Hoje vamos conhecer o algoritmo chamado árvore de decisão, que é um dos algoritmos de classificação mais conhecidos e com certeza já deve ter ouvido falar dele por aí, então vamos lá conhecer esse recurso melhor.

A árvore é construída por meio da divisão dos dados e agrupados com base em características que eles tem em comum, quanto mais homogêneo é um grupo, mais assertivo é o resultado. Cada nó interno da árvore representa uma condição de divisão, enquanto as folhas representam as decisões ou rótulos finais. 

A árvore é construída usando os atributos que melhor separam cada grupo, isso para casos de classificação. Para a predição, os dados percorrem a árvore seguindo as condições até alcançar uma folha, onde é atribuído um rótulo ou valor previsto.

O algoritmo de árvore de decisão é super simples de entender, se você conhece os dados consegue fazer isso manualmente pra ter noção de como ele funciona; ele pode ainda entender e trabalhar bem com dados complexos e dados não lineares, em comparação com outros algoritmos esse é o que menos tende a ter problemas com os outliers. Mas como qualquer outro algoritmo, ele também tem suas desvantagens, conjuntos muito pequenos ou árvores muito profundas são propensas ao overfitting (sobreajuste), é um algoritmo bem sensível, qualquer variação nos dados de treinamento pode afetar no momento do teste. 

Vamos ver alguns exemplos do seu uso:

Classificação:

Suponha que temos um conjunto de dados com informações sobre e-mails rotulados como "spam" ou "não spam". Podemos anotar características que incluem palavras-chave, comprimento do e-mail, se tem muitos links, muitas imagens... Com base nessas características o algoritmo de decisão teria o "poder" de separar nossos e-mails em "spam" e "não-spam". 

Se pensar bem isso é o que já fazemos hoje, quando acessamos o aplicativo de e-mail, e classificamos um e-mail como spam, estamos fazendo nada mais do que indicar o que é um spam, e com base naquelas características todos os próximos e-mails serão selecionados, separados e enviados para a pasta destinada.

Previsão:

Em um conjunto de dados com informações sobre casas, como tamanho, número de quartos, número de banheiros, localização e preço de venda... Com uma de árvore de decisão, podemos criar um modelo que prevê o preço de venda de uma casa com base nessas características. O modelo aprenderá padrões nos dados de treinamento como por exemplo, uma casa com três quartos e dois banheiros, será mais cara do que uma com dois quartos e um banheiro, e se baseando nessas associações ele poderá fazer previsões sobre o preço de venda de outras casas.

Agora a parte mais legal, a aplicação, hoje vamos usar um conjunto de dados bem comum, conhecido como Iris, ele é composto por três tipos de lírio, o lírio setosa, o lírio versicolor e o lírio virginica, ele contempla a largura e comprimento das pétalas e sépalas das flores e com base nelas podemos realizar nossa classificação. O conjunto de dados é pequeno, contém 150 dados mas isso é o suficiente para nosso exemplo, e podemos carregá-lo diretamente da biblioteca Scikit-learn do Python.

 Notebooks abertos e vamos lá!


Esse é o resultado da nossa árvore:


Agora vamos entender o que significam cada um desses campos. A nossa árvore foi gerada com base na função "plot_tree", e cada quadrinho desses representa um nó da nossa árvore, e nos nossos nós podemos encontrar as seguintes informações:

Critério, que é a condição usada para dividir os nós, é o que os diferencia, é a pergunta que fazemos aos dados, por exemplo, o comprimento da pétala é menor ou igual a 2,45 cm? Se sim são Lírios Versicolor, se não, novos nós são gerados para gerar novas perguntas sobre os dados.

Value, a quantidade de cada espécie analisada naquele nó, esses dados vem sempre em ordem alfabética, então no primeiro nó temos, 40 setosa, 43 versicolor e 39 virginica. 

Gini, é uma medida que indica a impureza do nó, ele mostra o quão bagunçado é nosso conjunto, quanto mais perto de 0 mais puro é conjunto, no caso do nosso prometo nó, o valor é 0,667, o que significa que ainda temos alguns dados misturados nessas amostras.

Samples (amostras), é a quantidade de dados que estão sendo analisados naquele nó, no caso do primeiro, 120 amostras.

Class, que é a classe/rótulo daquele conjunto e ela é sempre definida para o maior valor, no caso do primeiro, as 43 versicolor. No caso do nó folha à direita, continuamos com versicolor já que possui 41 valores classificados para ela, e assim por diante. 

Acho que deu pra ter uma noção de como a árvore funciona né? Faça o teste com esse conjunto, mas teste com outros também, e se testar me conta como foi! Até mais 😉

Comentários

Postagens mais visitadas deste blog

Resenha: Storytelling com dados - Cole Nussbaumer Knaflic

Trilha estatística: Variância e desvio padrão

Trilha machine learning: Algoritmo de regressão linear