Skip to Content

Como construir uma árvore de classificação no R

Essa é uma tradução. O artigo original pode ser visto aqui. Vou pular direto para a construção de uma árvore de classificação no e explicar os conceitos ao longo do caminho. Usaremos o banco de dados da íris, que mede em centímetros as variáveis comprimento e largura da pétala e comprimento e largura da pétala, respectivamente, para 50 flores de três espécies diferentes da base de dados.

[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     

Diferentes espécies têm larguras características de sépalas e pétalas.

A idéia básica de uma árvore de classificação é começar primeiro com todas as variáveis em um grupo; imagine todos os pontos no gráfico de dispersão acima. Em seguida, encontre alguma característica que melhor separe os grupos; por exemplo, a primeira divisão pode estar perguntando se as larguras das pétalas são menores ou iguais a 0,8. Continue esse processo até que as partições sejam suficientemente homogêneas ou muito pequenas.


Classification tree:
tree(formula = Species ~ Sepal.Width + Petal.Width, data = iris)
Number of terminal nodes:  5 
Residual mean deviance:  0.204 = 29.57 / 145 
Misclassification error rate: 0.03333 = 5 / 150 

Uma árvore de classificação mostrando cada nó.

As partições são definidas pela árvore de classificação acima. Por exemplo, o primeiro nó divide todas as espécies com largura de pétala <0,8 como setosa. Em seguida, todas as espécies com largura de pétala> 1,75 são virgínicas e assim por diante.

Eu contei 3 classificações incorretas, no entanto, a partir da saída do resumo (árvore1), havia 5. Refiz as partições usando ggplot2, mas ainda observo apenas 3.

Usando mais variáveis

Usei duas variáveis acima, Petal.Width e Sepal.Width para ilustrar o processo de classificação. Podemos incluir todas as quatro variáveis no processo de classificação:


Classification tree:
tree(formula = Species ~ Sepal.Width + Sepal.Length + Petal.Length + 
    Petal.Width, data = iris)
Variables actually used in tree construction:
[1] "Petal.Length" "Petal.Width"  "Sepal.Length"
Number of terminal nodes:  6 
Residual mean deviance:  0.1253 = 18.05 / 144 
Misclassification error rate: 0.02667 = 4 / 150 

Temos uma taxa de erro de classificação incorreta ligeiramente mais baixa (0,02667) e aqui está a aparência da árvore de classificação:

Vamos verificar alguns destes subconjuntos do conjunto de dados da íris:

 [1] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[11] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[21] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[31] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
[41] setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
Levels: setosa versicolor virginica
[1] 50
 [1] versicolor virginica  virginica  virginica  virginica  virginica 
 [7] virginica  virginica  virginica  virginica  virginica  virginica 
[13] virginica  virginica  virginica  virginica  virginica  virginica 
[19] virginica  virginica  virginica  virginica  virginica  virginica 
[25] virginica  virginica  virginica  virginica  virginica  virginica 
[31] virginica  virginica  virginica  virginica  virginica  virginica 
[37] virginica  virginica  virginica  virginica  virginica  virginica 
[43] virginica  virginica  virginica  virginica 
Levels: setosa versicolor virginica
[1] 46
[1] versicolor versicolor virginica  virginica  virginica  virginica 
Levels: setosa versicolor virginica

Podemos facilmente distinguir espécies de setosa pelo comprimento das pétalas.

Árvores de classificação mais bonitas no usando o pacote rpart

n= 150 

node), split, n, loss, yval, (yprob)
      * denotes terminal node

1) root 150 100 setosa (0.33333333 0.33333333 0.33333333)  
  2) Petal.Length< 2.45 50   0 setosa (1.00000000 0.00000000 0.00000000) *
  3) Petal.Length>=2.45 100  50 versicolor (0.00000000 0.50000000 0.50000000)  
    6) Petal.Width< 1.75 54   5 versicolor (0.00000000 0.90740741 0.09259259) *
    7) Petal.Width>=1.75 46   1 virginica (0.00000000 0.02173913 0.97826087) *

A mesma história acima, mas uma árvore de classificação mais sofisticada.

Conclusões

Uma das desvantagens das árvores de decisão pode ser a adaptação excessiva, ou seja, a criação contínua de partições para atingir uma população relativamente homogênea. Esse problema pode ser aliviado pela poda da árvore, que basicamente remove as decisões de baixo para cima. Outra maneira é combinar várias árvores e obter um consenso, o que pode ser feito através do random forest.