개발/머신러닝

[요약] 핸즈온 머신러닝 - 07. 앙상블 학습과 랜덤 포레스트

소년택이 2022. 5. 29. 10:31

통계적 의미

대중의 지혜

  • (어떠한 문제에 대해) 무작위로 선택한 대중의 대답을 모은것이 전문가의 답보다 낫다 (는 이론).
  • 통계측면에서는 "하나의 정확한 모델"(=A) 보다 "여러개의 부정확한 모델"(=B)의 평균이 더 낫다.
    • 개별 B 의 편향은 더 높지만, 평균을 내면 A 와 비슷해진다.
    • 개별 B 의 분산은 A 와 비슷하지만, 평균을 내면 A 에 비해 월등히 감소한다.
    • 따라서 A 와 B 의 편향은 비슷하지만, B 의 분산이 월등히 줄어든다.
  • 대중의 지혜를 모사한 예측기를 앙상블이라 한다.

 

큰수의 법칙

  • 하나의 문제에 대해 여러개의 약한 학습기 (= 랜덤 추측보다 조금 더 나은 성능을 가지는 부실한 분류기) 를 이용해 예측을 한다.
  • 단일 강한 학습기 보다 상대적으로 좋은 결론이 나온다.
  • 큰수의 법칙 : 양이 깡패다. 표본의 수가 많을 수록 통계의 정확도가 올라간다.
    • 51%의 확률로 앞면이 나오는 동전이 있을때, 이 동전을 N 번 던졌을때 앞면이 더 많이 나올 확률은?
    • 이 실험을 M 번 했을때 앞면이 다수로 나오는 비율은?
    • (M이 고정일때) N 이 커질 수록 앞면이 다수일 확률이 51% 로 수렴하고, 앞면이 다수로 나오는 비율이 증가한다.
      • M=100, N=100 --> 0.611
      • M=100, N=1000 --> 0.765
      • M=100, N=10000 --> 0.979

즉 51%의 정확도를 가지는 분류기라도...

  1. 많은 샘플을 동원하면 정확도가 올라간다.
  2. 많은 분류기를 평균내면 더 일반화 된다.

 

다양한 앙상블 방법

서로 다른 예측기를 사용

  • 앙상블을 구성하는 개별 학습기를 각기 다른 예측 모델을 이용한다. 
  • 각 모델이 상호 독립적일때 결과가 좋다.

 

투표

  • 직접 투표 : 예측치 중 가장 많은 표를 얻은 클래스를 선택한다
  • 간접 투표 : 예측치를 평균내어 확률이 가장 높은 클래스를 선택한다

간접 투표 방식이 직접 투표 방식보다 성능이 (대체로) 높다.

 

리샘플링

같은 예측기를 사용하되, 주어진 테스트셋을 다시 샘플링 하여 여러개의 서브셋을 만들어 각각의 예측기를 학습한다.

배깅

  • 중복을 허용하는 리샘플링
  • 테스트 샘플이 M 개 있을때, 중복을 포함하여 무작위로 M 개의 샘플을 선택한다.
  • 매 학습 마다 통계적으로 37 %의 샘플은 선택이 되지 않는다 : out-of-bag 테스트, 모델 평가에 사용한다.

페이스팅

  • 중복을 허용하지 않는 리샘플링

이렇게 개별 예측기를 생성한 다음 직접 투표 방식으로 클래스를 결정한다. 상대적으로 배깅을 구성하는 개별 학습기의 편향이 높지만, 앙상블을 구성하면 상대적으로 배깅이 좋은 성능을 보인다.

 

특성 샘플링

테스트 케이스 대신 특성을 샘플링한다. 특성이 아주 많은 경우 유용한다.

랜덤 패치

  • 특성과 훈련 샘플을 모두 샘플링한다.

랜덤 서브스페이스

  • 훈련 샘플은 모두 쓰되, 특성만 샘플링한다.

 

랜덤 포레스트

일반적인 랜덤 포레스트

  • 여러개의 결정트리로 이루어진 앙상블.
  • 배깅을 사용.
  • 병렬 처리가 가능 --> 하드웨어 효율적.

엑스트라 트리

  • 랜던 포레스트에 무작위성을 더 주입.
  • 노드마다 무작위 특성 서브셋을 생성하여 의사 결정.
  • 개발 노드의 정확도는 떨어지지만 앙상블로는 우수함.
  • 특성의 상대적 중요도를 파악할 수 있다.

 

부스팅

에이다 부스팅

예측기를 만들고, 오 분류한 샘플에 가중치를 부여하여 새 예측기를 만드는 과정을 반복하여 앙상블을 만드는 방법이다.

  1. m개의 샘플 별 가중치를 $w^{(i)}=\frac{1}{m}$ 로 초기화 한다.
  2. 예측기를 학습한다.
  3. 에러율 $r_{1}$을 구한다.
  4. $r_{1}$ 을 가지고 예측기 가중치 $\alpha_{1}$ 를 구한다.
  5. $\alpha_{1}$ 을 이용하여 가중치 $w$를 업데이트 한다.
  6. 최대 학습기 개수 또는 완벽한 분류기가 나올 때 까지 $r_{j}$ 와 $\alpha_{j}$ 를 구하고 가중치 $w$를 업데이트하는 작업을 반복한다.

에러율
$r_{j}=\frac{예측이 틀린 샘플 i 에 대한 w^{(i)} 의 합}{모든 w^{(i)} 의 합}$

예측기 가중치
$\alpha_{j}=\eta\log\frac{1-r_{j}}{r_{j}}$

가중치 업데이트
$w^{(i)}=\begin{cases}
w^{(i)} & \text{ if } \hat{y}_{j}^{(i)}=y^{(i)} \\
w^{(i)} \exp (\alpha_{j})& \text{ if } \hat{y}_{j}^{(i)}\neq y^{(i)} 
\end{cases}$

예측
예측 방법은 크게 두가지로 나눌 수 있다.

  • 모든 분류기에 대하여 분류를 수행 후, 클래스 별 분류기 가중치 합을 구하여 최고점을 받은 클래스를 선택한다(SAMME).
  • 모든 분류기의 클래스 별 확률 추정값에 예측기 가중치를 곱한 합을 구하여 최고점을 받은 클래스를 선택한다(SAMME.R).

일반적으로 SAMME.R 이 성능이 더 좋다.

소니언의 의문!?
현재까지 나온 모델 중에는 cost function 에 weight 가 있는 경우가 없어, 매 학습때 마다 가중치를 어떻게 반영하는지 잘 이해가 안간다. 다만 결정트리 처럼 무작위 요소가 들어가 다양한 형태의 분류기가 생성되는 경우는 학습에 직접 가중치 $w$를 반영하지 않더라도 에러율 --> 예측기의 가중치계산 --> 가중치 업데이트 과정을 통해 앙상블을 구성할 수 있다. 이 부분은 향후 공부가 필요하다.

 

그레디언트 부스팅

예측하고, 잔여 오차를 구하고, 잔여 오차를 예측하고, 다시 잔여 오차를 구하고... 를 반복하여 앙상블을 만드는 방법이다.

  1. 훈련샘플 X 로 실제 값에 대한 예측기를 학습한다.
  2. 예측값과 실제 값의 오차(1)을 구한다.
  3. 훈련샘플 X 로 오차(1)에 대한 예측기를 학습한다.
  4. 예측값과 오차(1)에 대한 오차(2)를 구한다.
  5. 이 과정을 반복한다.

각 트리의 기여 정도(=learning rate)를 곱하는 방법으로 제약을 줄 수 있다. 예측기가 부족하면 과소 적합, 예측기가 너무 많으면 과대 적합이 발생할 수 있다.

 

스태킹

분류기를 학습하는 대신, 예측기의 값을 취합하는 마지막 학습기 (블렌더 또는 메타 학습기)를 훈련하는 모델이다.

  1. 샘플을 2등분 한다.
  2. 1번째 샘플로 예측기를 훈련한다.
  3. 2번째 샘플로 예측을 한다.
  4. 3번의 예측 값으로 블렌더를 학습한다.

N 개의 레이어를 갖는 스태킹 예측기를 만들기 위해서는 N개의 서브셋이 필요하다.