Pular para o conteúdo principal
Documentos
Compartir
LinkedIn
Facebook
Twitter
Copy
Gerenciamento de dados em REntrada de dados em RGráficos em RDocumentação RInterface REstatísticas em R

Modelos baseados em árvores no R

O particionamento recursivo é uma ferramenta fundamental na mineração de dados. Ele nos ajuda a explorar a estrutura de um conjunto de dados e a desenvolver regras de decisão fáceis de visualizar para prever um resultado categórico (árvore de classificação) ou contínuo (árvore de regressão). Esta seção descreve brevemente a modelagem CART, as árvores de inferência condicional e as florestas aleatórias.

Modelagem CART via rpart

As árvores de classificação e regressão (conforme descrito por Brieman, Freidman, Olshen e Stone) podem ser geradas por meio do pacote rpart. Informações detalhadas sobre o rpart estão disponíveis em An Introduction to Recursive Partitioning Using the RPART Routines</a >. As etapas gerais são fornecidas abaixo, seguidas de dois exemplos.

1. Cultivar a árvore

Para desenvolver uma árvore,userpart(formula, data=, method=,control=) where

   
fórmula está no formatooutcome ~ predictor1+predictor2+predictor3+ect.
data= especifica o quadro de dados
método= "class" para uma árvore de classificação"anova"</strong > para uma árvore de regressão
control= parâmetros opcionais para controlar o crescimento das árvores. Por exemplo, control=rpart.control(minsplit=30, cp=0,001) exige que o número mínimo de observações em um nó seja 30 antes de tentar uma divisão e que uma divisão diminua a falta de ajuste geral por um fator de 0,001 (fator de complexidade de custo) antes de ser tentada.

2. Examine os resultados

As funções a seguir nos ajudam a examinar os resultados.

   
printcp(fit) exibir tabela cp
plotcp(fit) plotar resultados de validação cruzada
rsq.rpart(fit) traçar o R-quadrado aproximado e o erro relativo para diferentes divisões (2 gráficos). os rótulos são apropriados apenas para o método "anova".
print(fit) imprimir resultados
resumo(fit) resultados detalhados, incluindo divisões substitutas
plotar(fit) plotar árvore de decisão
text(fit) rotular o gráfico da árvore de decisão
post(fit, file=) Criar um gráfico postscript da árvore de decisão

Em árvores criadas por rpart( ), vá para o ramo LEFT quando a condição declarada for verdadeira (veja os gráficos abaixo).

3. podar a árvore

Podar a árvore para evitar o ajuste excessivo dos dados. Normalmente, você desejará selecionar um tamanho de árvore que minimize o erro de validação cruzada, a coluna xerror impressa por printcp( ).

Podar a árvore para o tamanho desejado usandoprune(fit, cp= )

Especificamente, use printcp( ) para examinar os resultados de erro com validação cruzada, selecione o parâmetro de complexidade associado ao erro mínimo e coloque-o na função prune( ). Como alternativa, você pode usar o fragmento de código

     fit$cptable[which.min(fit$cptable[, "xerror"]), "CP"]</strong >

para selecionar automaticamente o parâmetro de complexidade associado ao menor erro de validação cruzada. Agradecemos à HSAUR por essa ideia.

Exemplo de árvore de classificação

Vamos usar o quadro de dados cifose para prever um tipo de deformação (cifose) após a cirurgia, com base na idade em meses (Age), no número de vértebras envolvidas (Number) e na vértebra mais alta operada (Start).

# Classification Tree with rpart
library(rpart)

# grow tree
fit <- rpart(Kyphosis ~ Age + Number + Start,
   method="class", data=kyphosis)

printcp(fit) # display the results
plotcp(fit) # visualize cross-validation results
summary(fit) # detailed summary of splits

# plot tree
plot(fit, uniform=TRUE,
   main="Classification Tree for Kyphosis")
text(fit, use.n=TRUE, all=TRUE, cex=.8)

# create attractive postscript plot of tree
post(fit, file = "c:/tree.ps",
   title = "Classification Tree for Kyphosis")

Gráfico cp Árvore de classificação Árvore de classificação em Postscript

# prune the tree
pfit<- prune(fit, cp=   
  fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"])

# plot the pruned tree
plot(pfit, uniform=TRUE,
   main="Pruned Classification Tree for Kyphosis")
text(pfit, use.n=TRUE, all=TRUE, cex=.8)
post(pfit, file = "c:/ptree.ps",
   title = "Pruned Classification Tree for Kyphosis")

Árvore de classificação podada Árvore de classificação podada em Postscript

Exemplo de árvore de regressão

Neste exemplo, vamos prever a quilometragem do carro com base no preço, no país, na confiabilidade e no tipo de carro. O quadro de dados é cu.summary.

# Regression Tree Example
library(rpart)

# grow tree
fit <- rpart(Mileage~Price + Country + Reliability + Type,
   method="anova", data=cu.summary)

printcp(fit) # display the results
plotcp(fit) # visualize cross-validation results
summary(fit) # detailed summary of splits

# create additional plots
par(mfrow=c(1,2)) # two plots on one page
rsq.rpart(fit) # visualize cross-validation results

# plot tree
plot(fit, uniform=TRUE,
   main="Regression Tree for Mileage ")
text(fit, use.n=TRUE, all=TRUE, cex=.8)

# create attractive postcript plot of tree
post(fit, file = "c:/tree2.ps",
   title = "Regression Tree for Mileage ")

Gráfico cp para árvore de regressão gráfico rsquare para árvore de regressão árvore de regressão

# prune the tree
pfit<- prune(fit, cp=0.01160389) # from cptable   

# plot the pruned tree
plot(pfit, uniform=TRUE,
   main="Pruned Regression Tree for Mileage")
text(pfit, use.n=TRUE, all=TRUE, cex=.8)
post(pfit, file = "c:/ptree2.ps",
   title = "Pruned Regression Tree for Mileage")

Acontece que isso produz a mesma árvore que a original.

Árvores de inferência condicional via parte

O pacote party fornece árvores de regressão não paramétricas para respostas nominais, ordinais, numéricas, censuradas e multivariadas. party: Um laboratório para particionamento recursivo</a >, fornece detalhes.

Você pode criar uma árvore de regressão ou classificação por meio da função

ctree(formula, data=)O tipo de árvore criada dependerá da variável de resultado (fator nominal, fator ordenado, numérico etc.). O crescimento da árvore é baseado em regras de parada estatística, portanto, a poda não deve ser necessária.

Os dois exemplos anteriores são analisados novamente a seguir.

# Conditional Inference Tree for Kyphosis
library(party)
fit <- ctree(Kyphosis ~ Age + Number + Start,
   data=kyphosis)
plot(fit, main="Conditional Inference Tree for Kyphosis")

Árvore de inferência condicional para cifose

# Conditional Inference Tree for Mileage
library(party)
fit2 <- ctree(Mileage~Price + Country + Reliability + Type,
   data=na.omit(cu.summary))

Árvore de inferência condicional para quilometragem

Florestas aleatórias

As florestas aleatórias melhoram a precisão da previsão gerando um grande número de árvores bootstrapped (com base em amostras aleatórias de variáveis), classificando um caso usando cada árvore nessa nova "floresta" e decidindo um resultado final previsto combinando os resultados de todas as árvores (uma média na regressão, um voto majoritário na classificação). A abordagem de floresta aleatória de Breiman e Cutler é implementada por meio do pacote randomForest</a > .

Aqui está um exemplo.

# Random Forest prediction of Kyphosis data
library(randomForest)
fit <- randomForest(Kyphosis ~ Age + Number + Start,   data=kyphosis)
print(fit) # view results
importance(fit) # importance of each predictor

Para obter mais detalhes, consulte o site abrangente do Random Forest</a > .

Indo além

Esta seção abordou apenas as opções disponíveis. Para saber mais, consulte o CRAN Task View on Machine & Statistical Learning</a > .

Para praticar

Experimente o curso Supervised Learning in R</a > que inclui um exercício com Random Forests .