Árvores de Decisão

A importância de árvores de decisão como proposta para classificadores deve-se a:

  1. Bons classificadores;
  2. Boas características para visualização;
  3. Regras do tipo "SE … ENTÃO …";
  4. Estas regras já, implicitamente, contemplam interações.

Exemplo Árvores de Decisão

Sepal.Length Sepal.Width Petal.Length Petal.Width Species
105 6.5 3.0 5.8 2.2 virginica
86 6.0 3.4 4.5 1.6 versicolor
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
133 6.4 2.8 5.6 2.2 virginica

Exemplo Árvores de Decisão

Exemplo Árvores de Decisão

Ajustando uma Árvore no R

library(rpart)
library(rattle)
library(rpart.plot)
fit = rpart(Species~., data=iris)
fancyRpartPlot(fit)

Ajustando uma Árvore no R

Tabela de Confusão

pred = predict(fit, type="class")
tbl = table(predicao=pred, observado=iris$Species)
knitr::kable(tbl)
setosa versicolor virginica
setosa 50 0 0
versicolor 0 49 5
virginica 0 1 45

Tabela de Confusão

knitr::kable(prop.table(tbl, margin=2), digits = 2)
setosa versicolor virginica
setosa 1 0.00 0.0
versicolor 0 0.98 0.1
virginica 0 0.02 0.9

Florestas Aleatórias

  • Árvores podem não se generalizar bem;
  • Por isso, recomenda-se a poda de árvores como a ajustada anteriormente;
  • Esta técnica ajuda a evitar overfitting;
  • Alternativa: Florestas Aleatórias;

Sumário de Florestas Aleatórias

  • Bagging: obter reamostras das observações originais através de bootstrapping (ex.: 500 amostras por meio de sorteio com reposição);
  • Boosting: ajustar árvore para cada reamostra. Se, em uma dada reamostra, uma observação não for classificada corretamente, aumenta-se o peso desta observação em árvores futuras;
  • Randomizing: para cada nó de uma dada árvore, utilizam-se apenas (por exemplo, 5) variáveis dentre aquelas disponíveis. Estas variáveis são selecionadas aleatoriamente em cada nó.

Exemplo: Árvores Aleatórias

library(randomForest)
fit2 = randomForest(Species~., data=iris)

Tabela de Confusão: Floresta Aleatória

pred2 = predict(fit2, type="class")
tbl2 = table(predicao=pred2, observado=iris$Species)
knitr::kable(tbl2)
setosa versicolor virginica
setosa 50 0 0
versicolor 0 47 3
virginica 0 3 47

Importância de Variável

A redução no Índice de Gini é a quantidade mais utilizada para averiguação da importância de uma variável dentro de uma floresta aleatória.

varImp(fit2)
Overall
Sepal.Length 9.561939
Sepal.Width 2.159685
Petal.Length 42.162358
Petal.Width 45.403669

Importância de Variável

varImpPlot(fit2, main = "Importância de Variáveis - iris")