3. 배깅과 랜덤 포레스트
- 다중 모델의 평균을 취하는 방식(혹은 다수결 투표), 다른 말로 앙상블 모델은 단일 모델을 사용하는 것보다 더 나은 성능을 보인다.
용어 | 의미 |
앙상블(ensemble) | 여러 모델의 집합을 이용해서 하나의 예측을 이끌어내는 방식 |
배깅(bagging) | 데이터를 부트스트래핑해서 여러 모델을 만드는 일반적인 방법 |
랜덤 포레스트(random forest) | 의사 결정 트리 모델에 기반을 둔 배깅 추정 모델 |
변수 중요도(variable importance) | 모델 성능에 미치는 예측변수의 중요도 |
< 앙상블 방법의 가장 간단한 버전 >
- 주어진 데이터에 대해 예측 모델을 만들고 예측 결과를 기록한다.
- 같은 데이터에 대해 여러 모델을 만들고 결과를 기록한다.
- 각 레코드에 대해 예측된 결과들의 평균(또는 가중평균, 다수결 투표)을 구한다.
-> 앙상블 기법은 상대적으로 적은 노력만으로도 좋은 예측모델을 만들 수 있다는 점에서 정말 파워풀하다.
1) 배깅
- 배깅이란 '부트스트랩 종합(bootstrap aggregation)'의 줄임말로 다양한 모델들을 정확히 같은 데이터에 대해 구하는 대신, 매번 부트스트랩 재표본에 대해 새로운 모델을 만든다.
< 배깅 알고리즘 >
- 응답변수 $Y$와 $P$개의 예측변수 $X=X_1, X_2, \cdot\cdot\cdot,X_P$로 이루어진 $N$개의 레코드가 있다고 가정하자.
- 만들 모델의 개수 $M$과 모델을 만드는데 사용할 레코드의 개수 $n$($n<N$)의 값을 초기화한다. 반복 변수 $m$=1로 놓는다.
- 훈련 데이터로부터 복원추출 방법으로 $n$개의 부분데이터 $Y_m$과$X_m$을 부트스트랩 재표본 추출한다.
- 의사 결정 규칙 $\hat{f_m}(X)$를 얻기 위해, $Y_m$과 $X_m$을 이용해 모델을 학습한다.
- $m=m+1$로 모델 개수를 늘린다.$m\leq M$이면 다시 1단계로 간다.
$\hat{f_m}$이 $Y=1$인 경우의 확률을 예측한다고 했을 때, 배깅 추정치는 다음과 같이 정의할 수 있다.
$\hat{f}=\frac{1}{M}(\hat{f_1}(X)+\hat{f_2}(X)+\cdot\cdot\cdot+\hat{f_M}(X))$
2) 랜덤 포레스트
- 랜덤 포레스트는 의사 결정 트리 모델에 한 가지 중요한 요소가 추가된 배깅 방법을 적용한 모델로써, 레코드를 표폰추출할 때, 변수 역시 샘플링 하는 것이다.
- 랜덤 포레스트에서는 알고리즘의 각 단계마다, 고를 수 있는 변수가 랜덤하게 결정된 전체 변수들의 부분집합에 한정된다.
< 랜덤 포레스트 알고리즘 >
- 전체 데이터로부터 부트스트랩 샘플링(복원추출)을 한다.
- 첫 분할을 위해 비복원 랜덤표본추출로 $p(p<P)$개의 변수를 샘플링한다.
- 샘플링된 변수 $X_{j(1)}, X_{j(2)},\cdot\cdot\cdot,X_{j(p)}$에 대해 분할 알고리즘을 적용한다.
- $X_{j(k)}$의 각 변수 $s_{j(k)}$에 대해
- 파티션 $A$에 있는 레코드들을 $X_{j(k)}<s_{j(k)}$인 하위 영역과 $X_{j(k)}\geq s_{j(k)}$인 하위 영역으로 나눈다.
- $A$의 각 하위 영역 내부의 클래스의 동질성을 측정한다.
- 분할 영역 내부의 클래스 동질성을 최대로하는 $s_{j(k)}$의 값을 선택한다.
- $X_{j(k)}$의 각 변수 $s_{j(k)}$에 대해
- 분할 영역 내부의 클래스 동질성을 최대로 하는 $X_{j(k)}$와 $s_{j(k)}$ 값을 선택한다.
- 다음 분할을 진행하기 위해, 2단계부터 시작해 이전 단계들을 반복한다.
- 트리가 모두 자랄 때까지 위와 같은 분할 과정을 반복한다.
- 1단계로 돌아가 또 다른 부트스트랩 표본을 추출해 같은 과정을 반복한다.
- 보통은 각 단계마다 전체 변수의 개수가 $P$개 일 때, $\sqrt{P}$개의 변수를 샘플링한다.
- R에서는 랜덤 포레스트를 구현해놓은 randomForest 패키지가 있다.
* 주머니 외부(OOD; out-of-bag) 추정 에러는 트리 모델을 만들 때 사용했던 학습 데이터에 속하지 않는 데이터를 사용해 구한 학습된 모델의 오차율을 말한다.
- 랜덤 포레스트는 일종의 '블랙박스' 모델이다. 단순한 단일 트리보다 훨씬 정확한 예측 성능을 보이지만 간단한 트리를 통해 얻을 수 있는 직관적인 해석은 불가능하다.
3) 변수 중요도
- 랜덤 포레스트는 피처와 레코드의 개수가 많은 데이터에 대해 예측 모델을 만들 때 장점을 발휘한다.
< 변수 중요도를 측정하는 방법 >
- 변수의 값을 랜덤하게 섞었다면, 모델의 정확도가 감소하는 정도를 측정한다(type=1). 변수를 랜덤하게 섞는다는 것은 해당 변수가 예측에 미치는 모든 영향력을 제거하는 것을 의미한다. 정확도는 OOB 데이터로부터 얻는다(결국 교차타당성검사와 같은 효과를 갖는다).
- 특정 변수를 기준으로 분할이 일어난 모든 노드에서 불순도 점수의 평균 감소량을 측정한다(type=2). 이 지표는 해당 변수가 노드의 순도를 개선하는 데 얼마나 기여했는지를 나타낸다. 물론 이 지표는 학습 데이터를 기반으로 측정되기 때문에, OOB 데이터를 가지고 계산한 것에 비해 믿을 만하지 않다.
4) 하이퍼파라미터
- 다른 여러 머신러닝 알고리즘과 마찬가지로 랜덤 포레스트는 성능을 조절할 수 있는 손잡이가 달린 일종의 블랙박스 알고리즘이라고 할 수 있다. 이러한 손잡이를 하이퍼파라미터(hyperparameter)라고 부른다.
- 랜덤 포레스트에서 하이퍼파라미터는 좀 더 결정적인 영향을 미치는 중요한 요소이다. 특히 오버피팅을 피하기 위해 매우 중요하다.
< 랜덤 포레스트의 하이퍼파라미터 >
- nodesize : 말단 노드의 크기를 의미한다. 분류 문제를 위한 기본 설정은 1이며, 회귀문제에서는 5이다.
- maxnodes : 각 결정 트리에서 전체 노드의 최대 개수를 의미한다. 기본적으로는 제한이 없고 다만 nodesize 제한 설정에 따라 가장 큰 트리의 크기가 결정된다.
-> nodesize와 maxnodes를 크게 하면 더 작은 트리를 얻게 되고 거짓 예측 규칙들을 만드는 것을 피할 수 있게 된다.
· 앙상블 모델은 많은 모델로부터 얻은 결과를 서로 결합해 모델 정확도를 높인다.
· 배깅은 앙상블 모델 가운데 하나의 형태로, 부트스트랩 샘플을 이용해 많은 모델들을 생성하고 이 모델들을 평균화한다.
· 랜덤 포레스트는 배깅 기법을 의사 결정 트리 알고리즘에 적용한 특별한 형태이다. 랜덤 포레스트에서는 데이터를 재표본추출하는 동시에 트리를 분할할 때 예측변수 또한 샘플링한다.
· 랜덤 포레스트로부터 나오는 출력 중 유용한 것은 예측변수들이 모델 정확도에 미치는 영향력을 의미하는 변수 중요도이다.
· 랜덤 포레스트에서는 오버피팅을 피하기 위해 교차타당성검사를 통해 조정된 하이퍼파라미터를 사용한다.
4. 부스팅
- 배깅은 상대적으로 튜닝이 거의 필요 없지만 부스팅은 적용하고자 하는 문제에 따라 주의가 필요하다.
- 선형회귀 모델에서는 피팅이 더 개선될 수 있는지 알아보기 위해 잔차를 종종 사용했다. 부스팅은 이러한 개념을 더 발전시켜, 이전 모델이 갖는 오차를 줄이는 방향으로 다음 모델을 연속적으로 생성한다.
- 에이다부스트, 그레이디언트 부스팅, 확률적 그레이디언트 부스팅은 가장 자주 사용되는 변형된 형태의 부스팅 알고리즘이다.
용어 | 의미 |
앙상블(ensemblee) | 여러 모델들의 집합을 통해 예측 결과를 만들어내는 것 |
부스팅(boosting) | 연속된 라운드마다 잔차가 큰 레코드들에 가중치를 높여 일련의 모델들을 생성하는 일반적인 기법 |
에이다부스트(AdaBoost) | 잔차에 따라 데이터의 가중치를 조절하는 부스팅의 초기 버전 |
그레이디언트 부스팅 (hradient boosting) |
비용함수(cost function)를 최소화하는 방향으로 부스팅을 활용하는 좀 더 일반적인 형태 |
확률적 그레이디언트 부스팅(stochastic gradient boosting) | 각 라운드마다 레코드와 열을 재표본추출하는 것을 포함하는 부스팅의 가장 일반적인 형태 |
정규화(regularization) | 비용함수에 모델의 파라미터 개수에 해당하는 벌점 항을 추가해 오버피팅을 피하는 방법 |
하이퍼파라미터(hyperparameters) | 알고리즘을 피팅하기 전에 미리 세팅해야 하는 파라미터 |
1) 부스팅 알고리즘
- 다양한 부스팅 알고리즘의 바탕에 깔려 있는 기본 아이디어는 모두 같다.
< 에이다부스트 알고리즘 >
- 먼저 피팅할 모델의 개수 $M$을 설정한다. 그리고 반복 횟수를 의미하는 $m=1$로 초기화한다. $w_i=\frac{1}{N}$으로 초기화한다($i=1,2,\cdot\cdot\cdot,N$). 앙상블 모델을 $\hat{F_0}=0$으로 초기화한다.
- 관측 가중치 $w_1,w_2,\cdot\cdot\cdot,w_N$을 이용해 모델 \hat{f_m}을 학습한다. 이때 잘못 분류된 관측치에 대해 가중치를 적용한 합을 의미하는 가중 오차 $e_m$이 최소화되도록 학습한다.
- 앙상블 모델에 다음 모델을 추가한다. $\hat{F_m}=\hat{F_{m-1}}+\alpha_{m}\hat{f_m}$ 여기서 $\alpha_m=\frac{log{1}-e_m}{e_m}$이다.
- 잘못 분류된 입력 데이터에 대한 가중치를 증가하는 방향으로 가중치 $w_1, W-2, \cdot\cdot\cdot,w_N$을 업데이트한다. $\alpha_m$에 따라 증가 폭이 결정되며, $\alpha_m$이 클수록 가중치가 더 커진다.
- 모델 반복 횟수를 $m=m+1$으로 증가시키고 $m \leq M$이면 다시 1단계로 돌아간다.
이 과정을 통해 얻은 부스팅 추정치는 다음과 같다.
$\hat{F}=\alpha_1\hat{f_1}+\alpha\hat{f_2}+\cdot\cdot\cdot+\alpha_M\hat{f_M}$
- $\alpha_m$ 값을 이용해 모델의 오차가 낮을수록 더 큰 가중치를 부여한다.
< 그레이디언트 부스팅 >
- 에이다부스팅과 거의 비슷하지만, 비용함수를 최적화하는 접근법을 사용했다는 점에서 차이가 있다.
- 가중치를 조정하는 대신에 모델이 유사잔차(pesudo-residual)를 학습하도록 한다. 이는 잔차가 큰 데이터를 더 집중적으로 학습하는 효과를 가져온다.
< 확률적 그레이디언트 부스팅 >
- 렌덤 포레스트에서와 유사하게, 매 단계마다 데이터와 예측변수를 샘플링하는 식으로 그레이디언트 부스팅에 랜덤한 효과를 추가한다.
2) XG부스트
- 부스팅 방법 가운데 대중적으로 가장 많이 사용되는 오픈소스 소프트웨이이다.
- R에서도 xgboost 패키지를 이용해 XG부스트를 사용할 수 있다.
< XG 부스트 중요 파라미터 >
- subsample : 각 반복 구간마다 샘플링할 입력 데이터의 비율을 조정한다.
- eta : 부스팅 알고리즘에서 $\alpha_m$에 적용되는 축소 비율을 결정한다.
3) 정규화: 오버피팅 구하기
- xgboost 함수를 무작정 사용할 경우, 학습 데이터에 오버피팅되는 불안정한 모델을 얻을 수 있다.
< 오버피팅의 문제점 >
- 학습 데이터에 없는 새로운 데이터에 대한 모델의 정확도가 떨어진다.
- 모델의 예측 결과에 변동이 매우 심하고 불안정한 결과를 보인다.
- 모델의 복잡도에 따라 벌점을 추가하는 형태로 비용함수를 변경하는 방법인 정규화(regularization) 방법을 통해 오버피팅을 방지할 수 있다.
-xgboost의 alpha와 lambda는 각각 맨하탄 거리와 유클리드 거리를 의미한다. 이 파라미터들을 크게 하면, 모델이 복잡해질수록 더 많은 벌점을 부여하게 되고 결과적으로 얻어지는 트리의 크기가 작아지게 된다.
< 능형회귀와 라소 회귀 >
- 능형회귀(ridge regression)은 잔차제곱합에 회귀계수의 개수와 크기에 따라 벌점을 추가한 값을 최소화한다. $\lambda$는 계수에 대해 어느 정도 벌점을 부여할 것인가를 결정한다. 이 값이 클수록 모델이 데이터에 오버피팅할 가능성이 낮아진다.
$\sum_{i=1}^n(Y_i-\hat{b_0}-\hat{b_1}X_i-\cdot\cdot\cdot-\hat{bX_p})^2+\lambda(\hat{b_1}^2+\cdot\cdot\cdot+\hat{b_p}^2)$
- 라소(Lasso) 회귀는 벌점 항에 유클리드 거리 대신 맨하탄 거리를 이용한다.
$\sum_{i=1}^n(Y_i-\hat{b_0}-\hat{b_1}X_i-\cdot\cdot\cdot-\hat{bX_p})^2+\alpha(\mid{\hat{b_1}}\mid+\cdot\cdot\cdot+\mid\hat{b_p}\mid)$
- xgboost 함수의 파라미터 lambda와 alpha가 이 같은 방식으로 작동한다.
4) 하이퍼파라미터와 교차타당성검사
- 동시에 설정하는 파라미터 수가 많아진다면 어떤 기준을 가지고 이 파라미터들을 골라야 할까?
-> 교차타당성검사를 활용한다.
< 교차타당성검사 >
- 데이터를 $K$개의 서로 다른 그룹(폴드)으로 랜덤하게 나눈다.
- 각 폴드마다 해당 폴드에 속한 데이터를 제외한 나머지 데이터를 가지고 모델을 학습한 후, 폴드에 속한 데이터를 이용해 모델을 평가한다.-> 표본 밖 데이터에 대한 모델의 성능을 보여준다.
- 설정한 하이퍼파라미터 조합마다 폴드에 대한 오차의 평균을 계산해서 전체적으로 가장 낮은 평균 오차를 갖는 최적의 하이퍼파라미터 조합을 찾는다.
< XG부스트의 하이퍼 파라미터 >
- eta : 부스팅 알고리즘에서 $\alpha$에 적용되는 0과 1 사이의 축소인자(shrinkage factor). 기본값은 0.3이지만, 노이즈가 있는 데이터에 대해서는 더 작은 값을 추천한다.
- nrounds : 부스팅 라운드 횟수. eta가 작은 값이라면 알고리즘의 학습 속도가 늦춰지기 때문에 라운드 횟수를 늘려야 한다. 오버피팅을 방지하는 파라미터 설정이 포함된 경우, 라운드 횟수를 좀 더 늘려도 괜찮다.
- max_depth : 트리의 최대 깊이(기본값은 6). 깊이가 아주 깊은 트리를 만드는 랜덤 포레스트와는 반대로 부스팅 트리는 깊이가 얕다. 이는 노이즈가 많은 데이터에 대해 모델이 복잡한 거짓 상호작용을 회피하는 데 도움이 된다.
- subsample 및 colsample_bytree : 전체 데이터에서 일부 데이터를 비복원 샘플링하는 비율 및 예측변수 중 일부 변수를 샘플링하는 비율. 이는 랜덤 포레스트에서 오버피팅을 피하기 위해 사용했던 것들과 유사하다.
- lambda 및 alpha : 오버피팅을 조절하기 위해 사용되는 정규화(regularization) 파라미터들.
· 부스팅 방법은 일련의 모델들을 피팅할 때 이전 라운드에서 오차가 컸던 레코드들에 가중치를 더하는 방식을 사용하는 앙상블 모델의 한 부류이다.
· 확률적 그레이디언트 부스팅은 부스팅 가운데에서 가장 일반적으로 사용되며 가장 좋은 성능을 보인다. 확률적 그레이디언트 부스팅의 가장 일반적인 형태는 트리 모델을 사용한다.
· XG부스트는 확률적 그레이디언트 부스팅을 사용하기 위한 가장 유명한 소프트웨어 패키지이다. 데이터 과학에서 활용되는 거의 대부분의 언어를 지원한다.
· 부스팅은 데이터에 오버피팅되기 쉽다. 이를 피하기 위해 하이퍼파라미터를 잘 설정해야 한다.
· 정규화는 파라미터 개수에 관한 벌점 항목을 모델링에 포함하여 오버피팅을 피하는 방법이다.
· 부스팅에서 여러개의 하이퍼파라미터들의 조합을 찾아야 할 때, 교차타당성검사는 아주 중요하다.
< 참고자료 >
1. Peter Brucs & Andrew Brucs(2018). 데이터 과학을 위한 통계. 한빛미디어. 이용준 옮김.
'공부 > 데이터 과학을 위한 통계(한빛미디어)' 카테고리의 다른 글
18. 비지도학습(2) (0) | 2021.02.01 |
---|---|
17. 비지도 학습(1) (0) | 2021.01.26 |
15. 통계적 머신러닝(1) (0) | 2021.01.07 |
14. 분류(2) (0) | 2021.01.05 |
13. 분류(1) (0) | 2021.01.01 |