[4-2] Bagging, Random Forest

머신러닝 모델에서 일반화 성능을 높이기 위한 데이터의 다양성을 확보하는 것은 중요하다. 이번 장에서는 데이터의 다양성을 확보하기 위해 시도되었던 방법 K-Fold, Bagging, Random Forest 를 알아보도록 하겠습니다. 처음 시도된 방식은 K-Fold 입니다.

  • 데이터의 다양성

    • K-Fold

    • Bagging (Bootstrap Aggregating)

    • Random Forest

  • 모델의 다양성

K-Fold

k-fold 는 데이터의 다양성 확보를 위해 전체 데이터 셋을 k 개의 부분 집합으로 분류한다. k-1 개는 학습 데이터로 사용하며, 1개의 데이터 집합은 검증 데이터로 사용한다.

이 1개의 데이터 집합은 학습 데이터의 포함되지 않으므로 OOB(Out-of-Bag) 데이터라고 한다.

각 k-fold 데이터마다 모델의 예측값을 반환하면, 그 예측값들의 Aggregation 된 것이 최종 yy' 이 된다.

K-Fold 의 단점

  • 전체 데이터 셋을 사용하지 않기 때문에 1 개의 데이터 셋에 대한 정보 손실이 발생한다.

  • 데이터 셋의 다양성을 확보하는데 제한적이다. 데이터를 작게 쪼개는 데 한계가 있다.

  • 따라서 현재 K-Fold 는 사장된 방법론이다.

Bagging

Bagging(Bootstrap Aggregating) 은 복원 추출 (Sampling w/ Replacement) 를 사용하여 부트스트랩(새로운 데이터셋의 집합)을 만들고 이 데이터를 사용한 모델의 예측값의 평균을 최종 값으로 사용하는 방법론이다.

마치 오병이어의 기적과 같이 데이터를 무한정 생성할 수 있다는 점에서 기존 K-Fold 의 데이터 생성의 제약이 따르던 문제점을 극복하였다.

아래는 원 데이터로 부터 샘플들이 복원 추출되어서 (부트스트랩) 각 모델의 입력되어 최종 회귀에서는 평균 / 분류에서는 다수결 분류로 최종 값을 예측하는 배깅의 프로세스를 나타낸다.

Bagging 의 특징

  • Bootstrap : Bagging 은 원본 데이터 셋으로부터 데이터 셋을 무한정 샘플링이 가능하며, 하나의 샘플링된 데이터 셋의 집합을 Bootstrap 이라고 한다.

  • Low Bias, High Variance : 복잡성이 있는 모델과 합이 맞음.

  • Not a Model, But a Technique : 어떠한 지도학습 방법과도 같이 사용가능하다. 예를 들면, 신경망, SVM 하지만 로지스틱 회귀 방식은 High Bias, Low Variance 이기 때문에 합이 안맞을 수 있다.

Bagging 의 장점

Bagging 은 원본 데이터 셋을 다양화 함으로써 학습측면에서는 노이즈또한 변화시키어 일반화 성능을 향상시킬수도 있고, 다양한 검증 데이터를 사용한 추론으로 성능 평가에 대한 신뢰도를 향상시킬 수 있습니다.

  • 학습 측면 ) 노이즈 변화 : 원본의 데이터가 y=f(x)+ϵy = f(x) + \epsilon 으로 특정 ϵ\epsilon 노이즈를 갖는 데이터라하면, 학습이 해당 노이즈 특성에 적합될 수 있다. 하지만, 새로운 데이터 셋(Data 가 갖는 분포를 왜곡시킴)을 생성해냄으로써, 노이즈를 왜곡 시키어 일반화 성능을 높일 수 있다.

  • 검증 측면 ) 신뢰도 증가 : 전체 데이터가 학습과 검증 데이터로 바뀌어 가며 수행되기 때문에 검증에 대한 신뢰도 증가 및 일반화 성능을 향상시킴.

특정 데이터 셋이 선택되지 않을 확률은 0.368..

N이 일정 수준 이상 커지면, Bootstrap 에 한 번 이상 샘플링될 확률은 0.6 정도, 한번도 샘플링이 안될 확률은 0.3 정도이다.

예를 들어, 연구실에 지원한 학생이 총 4명이다. A가 뽑히지 않을 확률은 3/43/4 입니다. 만약에 동일 학생 4명이 국내 총 80군데의 연구실에 지원했을때, 모든 곳에서 A가 뽑히지 않는 확률은 (3/4)80(3/4)^{80} 이다.

즉, A 가 N 번 수행했을때, N 번 모두 샘플링 되지 않을 확률 pp 의 식은 다음과 같이 정리할 수 있습니다.

p=(11 N)Np = (1-\frac{1}{ N})^N

N 이 충분히 클 때, 공식에 의해서 다음과 같기 때문에 특정 데이터 객체가 모든 부트스트랩에 한번도 샘플링 되지 않을 확률은 약 0.368이며, 반대로 한번 이상 샘플링 될 확률은 약 23\frac{2}{3} 이라고 볼 수 있습니다.

limN>(11N)N1=e1=0.368lim_{N->\infty} {(1-\frac{1}{N})^{-N}}^{-1} = e^{-1} = 0.368

Aggregation

예측 결과를 합치는데 일반적으로 평균과 다수결 투표 방식을 권장합니다. 그 이유는, 모든 상황에서 특별히 어떤 Aggregation 방식이 우월하다 하는 방법론이 아직 없기 때문입니다.

  • 분류 문제 : Majority Voting

  • 회귀 문제 : Average

Majority Voting

  • Majority Voting : Majority Voting 방식은 Test Accuracy 를 기반으로 1으로 판단한 모델 갯수 6개, 0 으로 판단한 모델 갯수 4개 이므로 각각, 0.6, 0.4로 aggregation 한다.

  • OOB Accuracy 가중치 : OOB 데이터로 검증한 확신도를 사용한다.

p(y=1Xnew)=0.8+0.75+0.88+..+0.83A=0.576p(y=1|X_{new}) = \frac{0.8+0.75+0.88+..+0.83}{A} = 0.576
p(y=0Xnew)=0.91+0.77+0.95+0.82A=0.424p(y=0|X_{new}) = \frac{0.91+0.77+0.95+0.82}{A} = 0.424
  • Test Accuracy 가중치 : Test Accuracy 를 사용한다.

1nj=1np(y=0)=(10.9)+(10.92)+...10=0.375\frac{1}{n}\sum_{j=1}^np(y=0) = \frac{(1-0.9)+(1-0.92)+...}{10} = 0.375
1nj=1np(y=1)=0.9+0.92+...10=0.625\frac{1}{n}\sum_{j=1}^np(y=1) = \frac{0.9+0.92+...}{10} = 0.625

More about Aggregation,

이와 같이 aggregation 하는 방식은 1번과 3번의 조합등으로 30개가 넘는다.

Stacking

모델의 예측값을 통합하는 방법중 중 Stacking 이란 기법은 예측 값을 다시 정답 값과의 훈련 쌍을 만들어서 새로운 또 하나의 분류기 Meta Classifier g 를 만드는 기법이다.

이번 장에서는 Bagging 에 대해서 알아봤다. 이는 총 아래 7가지 데이터 셋에서 하나의 모델을 사용할 때보다 더 적은 손실을 보여주었다.

Random Forest

Random Forest 의 키워드는 Bagging & Randomly Selected Variable 입니다.

Random Forest 특징

1) Randomly Selected Variable

Random Forest는 base learner 로 decision tree 를 사용하는 기법입니다. 또한, 데이터를 분류하는 속성을 선택적으로 사용합니다. 예를 들어, 겨울 가족 사진을 분류하는 의사결정나무를 설계한다고 가정합시다. 데이터를 분류할 수 있는 속성 (만화인가?), (겨울인가?), (한명이상인가?) 들 중에 랜덤하게 하나의 속성을 뽑습니다. (만화인가?) 속성을 뽑아 겨울 가족사진을 분류합니다.

이렇게 부트스트랩을 만드는 과정에서 랜덤하게 데이터 속성을 뽑는다.

물론, 전체 속성을 가지지 않으므로 개별 의사 결정 나무의 성능은 낮을 수 있으나, 전체 성능은 높습니다.

2) 일반화 성능

일반화 성능은 모델간의 연관성 ρ\rho 이 낮을 수록, 확실하게 분류를 수행할수록 (즉 정답확률, 정답이 아닌 확률의 차이 s2s^2 가 클수록) 일반화 성능이 높습니다. 아래는 일반화 손실값을 계산하는 식으로 손실값이 낮을수록 성능이 높다고 이해할 수 있습니다.

  • ρ\rho : 모델간의 상관 계수의 평균

  • s2s^2 : 정답확률, 정답이 아닌 확률의 차이 들의 평균

GeneralizationLossρ(1s2)s2GeneralizationLoss \leq \frac{\rho(1-s^2)}{s^2}

3) 변수의 중요도 산출 가능

특정 변수 xix_i 에 대하여 랜덤하게 값을 섞습니다. 원래의 에러값과 섞은 후의 에러값 차이 did^i 가 클경우, 변수의 중요도가 높다고 할 수 있습니다. 또한, 각 차이의 분산은 적어야 합니다.

  • eie^i : 기존의 일반화 성능

  • pip^i : ii 번째 속성 (예를 들면 winter) 의 속성을 뒤죽박죽 값들을 섞었을 때의 일반화 성능

  • di=pieid^i = p^i - e^i 두 성능의 차이가 크면 해당 변수는 중요하다

  • sis^i : 각 의사 결정 나무의 일반화 성능의 분산, Tree 마다 편차는 적어야 한다. (일관성)

Vi=disiV_i = \frac{\overline{d_i}}{s_i}

Reference

[1] https://hun931018.tistory.com/29

Last updated