R에서 배깅을 수행하는 방법(단계별)


특정 데이터세트에 대한 의사결정 트리를 생성할 때 단일 교육 데이터세트만 사용하여 모델을 구축합니다.

그러나 단일 의사결정 트리를 사용할 때의 단점은 높은 분산 으로 인해 어려움을 겪는 경향이 있다는 것입니다. 즉, 데이터세트를 두 부분으로 나누고 의사결정 트리를 두 부분 모두에 적용하면 결과가 매우 다를 수 있습니다.

단일 의사결정 트리의 분산을 줄이기 위해 사용할 수 있는 한 가지 방법은 배깅(Bagging) 으로, 때로는 부트스트랩 집계(Bootstrap Aggregation) 라고도 합니다.

배깅은 다음과 같이 작동합니다.

1. 원본 데이터 세트에서 b 부트스트랩 샘플을 가져옵니다.

2. 각 부트스트랩 샘플에 대한 의사결정 트리를 만듭니다.

3. 각 트리의 예측을 평균하여 최종 모델을 얻습니다.

수백 또는 수천 개의 개별 의사결정 트리를 구축하고 모든 트리의 평균 예측을 취함으로써 단일 의사결정 트리에 비해 훨씬 낮은 테스트 오류율을 생성하는 피팅 백 모델이 되는 경우가 많습니다.

이 튜토리얼에서는 R에서 배깅된 모델을 생성하는 방법에 대한 단계별 예를 제공합니다.

1단계: 필요한 패키지 로드

먼저 이 예제에 필요한 패키지를 로드합니다.

 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

2단계: 배깅된 모델 맞추기

이 예에서는 개별적으로 153일 동안 뉴욕시의 대기 질 측정값을 포함하는 Air Quality 라는 기본 제공 R 데이터 세트를 사용합니다.

 #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 ...

다음 코드는 ipred 라이브러리의 bagging() 함수를 사용하여 R에서 배깅된 모델을 맞추는 방법을 보여줍니다.

 #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

우리는 배깅 모델을 구축하기 위해 150개의 부트스트랩 샘플을 사용하기로 선택했고 추정된 Out-of-bag 오류를 얻기 위해 coobTRUE 라고 지정했습니다.

또한 rpart.control() 함수에서 다음 사양을 사용했습니다.

  • minsplit = 2: 분할하려면 노드에서 2개의 관측치만 필요하도록 모델에 지시합니다.
  • CP = 0 . 이것이 복잡성 매개변수입니다. 0으로 설정하면 분할을 수행하기 위해 모델이 어떤 방식으로든 전체 적합성을 향상할 필요가 없습니다.

본질적으로, 이 두 가지 주장은 개별 나무가 극도로 깊게 자라도록 허용하여 분산은 높지만 편향은 낮은 나무로 이어집니다. 그런 다음 배깅을 적용하면 편향을 낮게 유지하면서 최종 모델의 분산을 줄일 수 있습니다.

모델 결과에서 추정 Out-of-Bag RMSE가 17.4973 임을 알 수 있습니다. 이는 오존 예측값과 실제 관측값 간의 평균 차이입니다.

3단계: 예측 변수의 중요성 시각화

배깅 모델은 개별 의사결정 트리보다 더 정확한 예측을 제공하는 경향이 있지만, 적합한 배깅 모델의 결과를 해석하고 시각화하는 것은 어렵습니다.

그러나 모든 트리에 대해 평균을 낸 특정 예측 변수의 분포로 인한 RSS(잔차 제곱합)의 총 감소를 계산하여 예측 변수의 중요성을 시각화할 수 있습니다. 값이 클수록 예측 변수가 더 중요해집니다.

다음 코드는 캐럿 라이브러리의 varImp() 함수를 사용하여 장착된 가방 모델에 대한 변수 중요도 플롯을 생성하는 방법을 보여줍니다.

 #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 ')

R의 변수 중요도 그래프

Solar.R은 모델에서 가장 중요한 예측 변수이고 월은 가장 덜 중요하다는 것을 알 수 있습니다.

4단계: 모델을 사용하여 예측하기

마지막으로, Fitted Bag 모델을 사용하여 새로운 관측값을 예측할 수 있습니다.

 #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

예측 변수의 값을 기반으로 Fitted Bag 모델은 특정 날짜의 오존 값이 24,487이 될 것으로 예측합니다.

이 예제에 사용된 전체 R 코드는 여기에서 찾을 수 있습니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다