Como realizar o ensacamento em r (passo a passo)


Quando criamos uma árvore de decisão para um determinado conjunto de dados, usamos apenas um único conjunto de dados de treinamento para construir o modelo.

No entanto, a desvantagem de usar uma única árvore de decisão é que ela tende a sofrer de alta variância . Ou seja, se dividirmos o conjunto de dados em duas metades e aplicarmos a árvore de decisão a ambas as metades, os resultados poderão ser muito diferentes.

Um método que podemos usar para reduzir a variância de uma única árvore de decisão é conhecido como bagging , às vezes chamado de agregação bootstrap .

O ensacamento funciona da seguinte forma:

1. Pegue b amostras inicializadas do conjunto de dados original.

2. Crie uma árvore de decisão para cada amostra de bootstrap.

3. Calcule a média das previsões de cada árvore para obter um modelo final.

Ao construir centenas ou mesmo milhares de árvores de decisão individuais e tomar as previsões médias de todas as árvores, muitas vezes acabamos com um modelo de saco ajustado que produz uma taxa de erro de teste muito menor em comparação com uma única árvore de decisão.

Este tutorial fornece um exemplo passo a passo de como criar um modelo empacotado em R.

Passo 1: Carregue os pacotes necessários

Primeiro, carregaremos os pacotes necessários para este exemplo:

 library (dplyr) #for data wrangling
library (e1071) #for calculating variable importance
library (caret) #for general model fitting
library (rpart) #for fitting decision trees
library (ipred) #for fitting bagged decision trees

Passo 2: Ajuste o modelo ensacado

Para este exemplo, usaremos um conjunto de dados R integrado chamado Qualidade do Ar , que contém medições da qualidade do ar na cidade de Nova York durante 153 dias individuais.

 #view structure of air quality dataset
str(airquality)

'data.frame': 153 obs. of 6 variables:
 $ Ozone: int 41 36 12 18 NA 28 23 19 8 NA ...
 $Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
 $ Wind: num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
 $ Temp: int 67 72 74 62 56 66 65 59 61 69 ...
 $Month: int 5 5 5 5 5 5 5 5 5 5 ...
 $Day: int 1 2 3 4 5 6 7 8 9 10 ...

O código a seguir mostra como ajustar um modelo ensacado em R usando a função bagging() da biblioteca ipred .

 #make this example reproducible
set.seed(1)

#fit the bagged model
bag <- bagging(
  formula = Ozone ~ .,
  data = airquality,
  nbagg = 150 ,   
  coob = TRUE ,
  control = rpart. control (minsplit = 2 , cp = 0 )
)

#display fitted bagged model
bag

Bagging regression trees with 150 bootstrap replications 

Call: bagging.data.frame(formula = Ozone ~ ., data = airquality, nbagg = 150, 
    coob = TRUE, control = rpart.control(minsplit = 2, cp = 0))

Out-of-bag estimate of root mean squared error: 17.4973

Observe que escolhemos usar 150 amostras bootstrap para construir o modelo empacotado e especificamos que coob é TRUE para obter o erro estimado fora do saco.

Também usamos as seguintes especificações na função rpart.control() :

  • minsplit = 2: diz ao modelo para exigir apenas 2 observações em um nó para dividir.
  • cp = 0 . Este é o parâmetro de complexidade. Ao defini-lo como 0, não exigimos que o modelo seja capaz de melhorar o ajuste geral de forma alguma para realizar uma divisão.

Essencialmente, esses dois argumentos permitem que árvores individuais cresçam extremamente profundamente, levando a árvores com alta variância, mas baixo viés. Então, quando aplicamos o bagging, conseguimos reduzir a variância do modelo final enquanto mantemos o viés baixo.

A partir dos resultados do modelo, podemos ver que o RMSE out-of-bag estimado é 17,4973 . Esta é a diferença média entre o valor previsto para o ozônio e o valor real observado.

Etapa 3: Visualize a importância dos preditores

Embora os modelos ensacados tendam a fornecer previsões mais precisas do que as árvores de decisão individuais, é difícil interpretar e visualizar os resultados dos modelos ensacados ajustados.

Podemos, no entanto, visualizar a importância das variáveis preditoras calculando a redução total no RSS (soma residual dos quadrados) devido à distribuição em um determinado preditor, calculada a média de todas as árvores. Quanto maior o valor, mais importante é o preditor.

O código a seguir mostra como criar um gráfico de importância variável para o modelo de bolsa ajustada, usando a função varImp() da biblioteca caret :

 #calculate variable importance
VI <- data.frame(var= names (airquality[,-1]), imp= varImp (bag))

#sort variable importance descending
VI_plot <- VI[ order (VI$Overall, decreasing= TRUE ),]

#visualize variable importance with horizontal bar plot
barplot(VI_plot$Overall,
        names.arg= rownames (VI_plot),
        horiz= TRUE ,
        col=' steelblue ',
        xlab=' Variable Importance ')

Gráfico de importância variável em R

Podemos ver que Solar.R é a variável preditora mais importante no modelo, enquanto Mês é a menos importante.

Etapa 4: use o modelo para fazer previsões

Finalmente, podemos usar o modelo de bolsa ajustada para fazer previsões sobre novas observações.

 #define new observation
new <- data.frame(Solar.R=150, Wind=8, Temp=70, Month=5, Day=5)

#use fitted bagged model to predict Ozone value of new observation
predict(bag, newdata=new)

24.4866666666667

Com base nos valores das variáveis preditoras, o modelo de bolsa ajustada prevê que o valor do ozônio será de 24.487 neste dia específico.

O código R completo usado neste exemplo pode ser encontrado aqui .

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *