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 오류를 얻기 위해 coob 이 TRUE 라고 지정했습니다.
또한 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 ')
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 코드는 여기에서 찾을 수 있습니다.