Bagging

Bagging은 Bootstrap aggregating으로 Breiman (1996)에 의해 소개된 방법으로 Tree model을 결합하여 최종 예측 결과를 추정하는 앙상블 기법중 하나이다.

1. 특징

1.1. 장점

1.2. 단점

2. 단계

3. 예제

## ipred package를 이용하여 iris 데이터를 Bagging 분석기법으로 분류해
## 본다.
library(ipred)
## iris 데이터에 대하여 알아본다.
data(iris)
str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
## iris 데이터를 7:3의 비율로 trainData와 testData로 샘플링한다.
set.seed(1234)
ind <- sample(2, nrow(iris), replace = TRUE, prob = c(0.7, 0.3))
trainData <- iris[ind == 1, ]
testData <- iris[ind == 2, ]
## Bagging 알고리즘을 이용하여 trainData를 분류한다.
iris.ba <- bagging(as.factor(Species) ~ ., data = trainData, nbag = 10, coob = TRUE)
iris.ba
## 
## Bagging classification trees with 10 bootstrap replications 
## 
## Call: bagging.data.frame(formula = as.factor(Species) ~ ., data = trainData, 
##     nbag = 10, coob = TRUE)
## 
## Out-of-bag estimate of misclassification error:  0.0625
## trainData에 대하여 설정한 Bagging을 이용하여 예측한 값을 출력한다.
trainPred <- predict(iris.ba, newdata = trainData, type = "class")
trainPred
##   [1] setosa     setosa     setosa     setosa     setosa     setosa    
##   [7] setosa     setosa     setosa     setosa     setosa     setosa    
##  [13] setosa     setosa     setosa     setosa     setosa     setosa    
##  [19] setosa     setosa     setosa     setosa     setosa     setosa    
##  [25] setosa     setosa     setosa     setosa     setosa     setosa    
##  [31] setosa     setosa     setosa     setosa     setosa     setosa    
##  [37] setosa     setosa     setosa     setosa     versicolor versicolor
##  [43] versicolor versicolor versicolor versicolor versicolor versicolor
##  [49] versicolor versicolor versicolor versicolor versicolor versicolor
##  [55] versicolor virginica  versicolor versicolor versicolor versicolor
##  [61] versicolor versicolor versicolor versicolor versicolor versicolor
##  [67] versicolor versicolor versicolor versicolor versicolor versicolor
##  [73] versicolor versicolor versicolor versicolor versicolor versicolor
##  [79] virginica  virginica  virginica  virginica  virginica  virginica 
##  [85] versicolor virginica  virginica  virginica  virginica  virginica 
##  [91] virginica  virginica  virginica  virginica  virginica  virginica 
##  [97] virginica  virginica  virginica  virginica  virginica  virginica 
## [103] virginica  virginica  virginica  virginica  virginica  virginica 
## [109] virginica  virginica  virginica  virginica 
## Levels: setosa versicolor virginica
## 실제 trainData값과 예측값을 비교하는 교차표를 출력한다.
table(trainPred, trainData$Species)
##             
## trainPred    setosa versicolor virginica
##   setosa         40          0         0
##   versicolor      0         37         1
##   virginica       0          1        33
## testData에 대하여 설정한 Bagging을 이용하여 예측한 값을 출력한다.
testPred <- predict(iris.ba, newdata = testData, type = "class")
testPred
##  [1] setosa     setosa     setosa     setosa     setosa     setosa    
##  [7] setosa     setosa     setosa     setosa     versicolor versicolor
## [13] versicolor versicolor versicolor versicolor versicolor versicolor
## [19] versicolor versicolor versicolor versicolor virginica  virginica 
## [25] virginica  virginica  versicolor virginica  virginica  virginica 
## [31] virginica  virginica  versicolor virginica  virginica  virginica 
## [37] virginica  virginica 
## Levels: setosa versicolor virginica
## 실제 testData값과 예측값을 비교하는 교차표를 출력한다.
table(testPred, testData$Species)
##             
## testPred     setosa versicolor virginica
##   setosa         10          0         0
##   versicolor      0         12         2
##   virginica       0          0        14