Slide 1

Slide 1 text

Dados categóricos em árvore de decisão utilizando libs Python Ana Paula Mendes

Slide 2

Slide 2 text

~$ whoami Ana Paula Mendes Software Engineer na Miio Electric Pesquisadora no laboratório de Inteligência Artificial - UFPI Bacharelanda em Ciência da Computação - UFPI

Slide 3

Slide 3 text

Introdução Alguns algoritmos de árvore de decisão com Python são restritos a dados numéricos. A palestra irá abordar o uso de dados categóricos em árvore de decisão utilizando libs Python abordando algumas dificuldades em problemas restritos ao uso de dados categóricos.

Slide 4

Slide 4 text

Árvores de Decisão Uma árvore de decisão usa a estratégia dividir para conquistar para resolver um problema de decisão. Um problema complexo é dividido em problemas mais simples, aos quais recursivamente é aplicada a mesma estratégia. As soluções dos subproblemas podem ser combinadas, na forma de uma árvore, para produzir uma solução do problema complexo. (LORENA; GAMA; FACELI, 2000)

Slide 5

Slide 5 text

Algoritmos de Árvore de Decisão CART (Breiman et al., 1984) ID3 (Quinlan, 1979) C4.5 (Quinlan, 1993) ASSISTANT (Cestnik et al., 1987)

Slide 6

Slide 6 text

Transformação de Dados Várias técnicas de aprendizado de máquina (AM) estão limitadas à manipulação de valores de determinados tipos, por exemplo, apenas valores numéricos ou apenas valores simbólicos. Na conversão simbólico-numérico a depender se os valores simbólicos são nominais ou ordinais, diferentes técnicas podem ser empregadas. (LORENA; GAMA; FACELI, 2000)

Slide 7

Slide 7 text

Identificação de dados categóricos: nominal, ordinal e contínuo Nominal São normalmente armazenados como valores de texto que representam várias características das observações. Exemplo: gênero, país, etc. Ordinal Recursos que possuem alguma ordem associada a eles são chamados de recursos ordinais. Exemplo: altura, classe social, etc. Contínuo Essas são variáveis numéricas que possuem um número infinito de valores entre quaisquer dois valores. Uma variável contínua pode ser numérica ou uma data/hora.

Slide 8

Slide 8 text

Os recursos categóricos podem ter alta cardinalidade, ou seja, muitos valores exclusivos. Muitos modelos de aprendizado de máquina são algébricos. Isso significa que sua entrada deve ser numérica. Embora alguns pacotes ou bibliotecas de AM possam transformar dados categóricos em numéricos automaticamente com base em algum método de incorporação padrão, muitos outros pacotes de AM não são compatíveis com essas entradas. Para o AM os dados categóricos não contêm o mesmo contexto ou informações que os humanos podem facilmente associar e compreender. Se as informações contextuais adicionais não forem especificadas, será impossível para o modelo diferenciar entre níveis altamente diferentes. Restrições

Slide 9

Slide 9 text

Problema de Pesquisa Criação de um conjunto de regras para inferir diagnóstico em nefropatologia para a geração automática de questões relacionadas aos diagnósticos, para a criação de uma ferramenta de auxílio ao ensino-aprendizagem de especialistas em nefropatologia. O conjunto de regras deve ser claro para que especialistas possam analisar a conclusão do diagnóstico.

Slide 10

Slide 10 text

Codificando dados categóricos com Pandas Substituir Valores Label Encoding One-Hot encoding

Slide 11

Slide 11 text

Substituir Valores Criar um dicionário que contém números de mapeamento para cada categoria. Definir um mapeamento por meio de um dicionário codificado é fácil quando o número de categorias é baixo. Isso será útil quando a contagem de categorias for alta.

Slide 12

Slide 12 text

Substituir Valores Se você substitui os valores A, B, C, D, E por 1, 2, 3, 4, 5. O algoritmo entenderá que há uma ordinalidade, ou seja, interpretará de forma errada.

Slide 13

Slide 13 text

Label Encoding Permite converter cada valor de uma coluna em um número. Codifica cada valor de uma coluna com valor entre 0 e n_classes-1. A desvantagem de que os valores numéricos podem ser mal interpretados pelo algoritmo.

Slide 14

Slide 14 text

Label Encoding Se uma categoria A recebe o valor 1 e uma categoria B recebe o valor 8, o algoritmo entenderá que a categoria B tem 8x o peso de A. É entendido como um tipo de "padrão". Isso é chamado problema de pesos desiguais. Algoritmos que funcionam apenas com valores numéricos tentarão sempre estabelecer padrões entre os números.

Slide 15

Slide 15 text

One-Hot Encoding Converter cada valor de categoria em uma nova coluna e atribuir um valor 1 ou 0 à coluna. Isso tem a vantagem de não ponderar um valor indevidamente. Exige muito processamento. Cai na "maldição da dimensionalidade".

Slide 16

Slide 16 text

One-Hot Encoding Embora a codificação one-hot resolva o problema de pesos desiguais dados às categorias dentro de um recurso, não é muito útil quando há muitas categorias, pois isso resultará na formação de tantas novas colunas, o que pode resultar na maldição da dimensionalidade. O conceito de “maldição da dimensionalidade” discute que em espaços de alta dimensão algumas coisas simplesmente param de funcionar corretamente.

Slide 17

Slide 17 text

Algoritmos de árvore de decisão ID3 Foi desenvolvido em 1986 por Ross Quinlan. O algoritmo cria uma árvore de múltiplas vias, encontrando para cada nó (ou seja, de maneira gananciosa) a característica categórica que produzirá o maior ganho de informação para alvos categóricos. As árvores crescem até seu tamanho máximo e, em seguida, uma etapa de poda é geralmente aplicada para melhorar a capacidade da árvore de generalizar para dados invisíveis. C4.5 C4.5 é o sucessor do ID3 e removeu a restrição de que os recursos devem ser categóricos, definindo dinamicamente um atributo discreto (com base em variáveis numéricas) que particiona o valor do atributo contínuo em um conjunto discreto de intervalos. C4.5 converte as árvores treinadas (ou seja, a saída do algoritmo ID3) em conjuntos de regras se-então. A precisão de cada regra é avaliada para determinar a ordem em que devem ser aplicadas. A poda é feita removendo a pré-condição de uma regra se a precisão da regra melhorar sem ela. CART CART (árvores de classificação e regressão) é muito semelhante a C4.5, mas difere porque oferece suporte a dados numéricos (regressão) e não computa conjuntos de regras. O CART constrói árvores binárias usando o recurso e o limite que geram o maior ganho de informação em cada nó.

Slide 18

Slide 18 text

scikit-learn scikit-learn usa uma versão otimizada do algoritmo CART; no entanto, a implementação do scikit- learn não oferece suporte a variáveis categóricas por enquanto.

Slide 19

Slide 19 text

Como utilizar a árvore de decisão com dados categóricos e com Python então? pip install chefboost Uma biblioteca com suporte a árvores de decisões com suporte a recursos categóricos. Tem suporte para os algoritmos ID3, C4.5, CART, CHAID e árvores de regressão.

Slide 20

Slide 20 text

Exemplo de dataset

Slide 21

Slide 21 text

Uso:

Slide 22

Slide 22 text

Fazer predição a partir do modelo:

Slide 23

Slide 23 text

Fazer predição a partir das regras:

Slide 24

Slide 24 text

Salvando o modelo treinado

Slide 25

Slide 25 text

Carregando o modelo salvo

Slide 26

Slide 26 text

Configurações de árvore de decisão

Slide 27

Slide 27 text

Paralelismo Chefboost oferece paralelismo para acelerar a construção de modelos. Ramificações de uma árvore de decisão serão criadas em paralelo dessa maneira. Você deve passar o argumento enableParallelism como True na configuração. Seu valor padrão é False.

Slide 28

Slide 28 text

Referências LORENA, A. C.; GAMA, J.; FACELI, K.. Inteligência Artificial: Uma abordagem de aprendizado de máquina. Grupo Gen-LTC, 2000. Scikit-learn: Machine Learning in Python, Pedregosa et al., JMLR 12, pp. 2825-2830, 2011. Data structures for statistical computing in python, McKinney, Proceedings of the 9th Python in Science Conference, Volume 445, 2010. Serengil, Sefik Ilkin. Lightweight Decision Trees Framework supporting Gradient Boosting (GBDT, GBRT, GBM), Random Forest and Adaboost w/categorical features support for Python. chefboost. 2019. Disponível em: https://github.com/serengil/chefboost

Slide 29

Slide 29 text

Obrigada! Github /anapaulamendes Website anapaulamendes.github.io Twitter @ananoterminal