Análise de Big Data - Árvores de Decisão

Uma árvore de decisão é um algoritmo usado para problemas de aprendizagem supervisionada, como classificação ou regressão. Uma árvore de decisão ou uma árvore de classificação é uma árvore na qual cada nó interno (não-folha) é rotulado com um recurso de entrada. Os arcos vindos de um nó rotulado com um recurso são rotulados com cada um dos valores possíveis do recurso. Cada folha da árvore é rotulada com uma classe ou uma distribuição de probabilidade sobre as classes.

Uma árvore pode ser "aprendida" dividindo o conjunto de origem em subconjuntos com base em um teste de valor de atributo. Este processo é repetido em cada subconjunto derivado de uma maneira recursiva chamadarecursive partitioning. A recursão é concluída quando o subconjunto em um nó tem o mesmo valor da variável de destino ou quando a divisão não agrega mais valor às previsões. Este processo de indução de cima para baixo de árvores de decisão é um exemplo de algoritmo ganancioso e é a estratégia mais comum para aprender árvores de decisão.

As árvores de decisão usadas na mineração de dados são de dois tipos principais -

  • Classification tree - quando a resposta é uma variável nominal, por exemplo, se um e-mail é spam ou não.

  • Regression tree - quando o resultado previsto pode ser considerado um número real (por exemplo, o salário de um trabalhador).

As árvores de decisão são um método simples e, como tal, apresentam alguns problemas. Um desses problemas é a alta variação nos modelos resultantes que as árvores de decisão produzem. Para amenizar esse problema, foram desenvolvidos métodos de agrupamento de árvores de decisão. Existem dois grupos de métodos de ensemble usados ​​extensivamente -

  • Bagging decision trees- Essas árvores são usadas para construir várias árvores de decisão, reamostrando repetidamente os dados de treinamento com substituição e votando nas árvores para uma previsão de consenso. Este algoritmo foi denominado floresta aleatória.

  • Boosting decision trees- O aumento de gradiente combina alunos fracos; neste caso, árvores de decisão em um único aluno forte, de forma iterativa. Ele ajusta uma árvore fraca aos dados e continua ajustando os alunos fracos de forma iterativa para corrigir o erro do modelo anterior.

# Install the party package
# install.packages('party') 
library(party) 
library(ggplot2)  

head(diamonds) 
# We will predict the cut of diamonds using the features available in the 
diamonds dataset. 
ct = ctree(cut ~ ., data = diamonds) 

# plot(ct, main="Conditional Inference Tree") 
# Example output 
# Response:  cut  
# Inputs:  carat, color, clarity, depth, table, price, x, y, z  

# Number of observations:  53940  
#  
# 1) table <= 57; criterion = 1, statistic = 10131.878 
#   2) depth <= 63; criterion = 1, statistic = 8377.279 
#     3) table <= 56.4; criterion = 1, statistic = 226.423 
#       4) z <= 2.64; criterion = 1, statistic = 70.393 
#         5) clarity <= VS1; criterion = 0.989, statistic = 10.48 
#           6) color <= E; criterion = 0.997, statistic = 12.829 
#             7)*  weights = 82  
#           6) color > E  

#Table of prediction errors 
table(predict(ct), diamonds$cut) 
#            Fair  Good Very Good Premium Ideal 
# Fair       1388   171        17       0    14 
# Good        102  2912       499      26    27 
# Very Good    54   998      3334     249   355 
# Premium      44   711      5054   11915  1167 
# Ideal        22   114      3178    1601 19988 
# Estimated class probabilities 
probs = predict(ct, newdata = diamonds, type = "prob") 
probs = do.call(rbind, probs) 
head(probs)