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.
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
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")Tecnologia
# 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")Tecnologia
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 ")Tecnologia
# 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")Tecnologia
Acontece que isso produz a mesma árvore que a original.
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")Tecnologia
# Conditional Inference Tree for Mileage
library(party)
fit2 <- ctree(Mileage~Price + Country + Reliability + Type,
data=na.omit(cu.summary))Tecnologia
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 predictorTecnologia
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
2. Examine os resultados
As funções a seguir nos ajudam a examinar os resultados.
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).
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.
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.
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.
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 .