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)