K 개발자
앙상블 학습 본문
투표 기반 분류기
각기 다른 훈련 알고리즘을 사용
직접 투표hard voting
각 분류기의 예측을 모아서 가장 많이 선택된 클래스를 예측
간접 투표soft voting
모든 분류기가 클래스의 확률을 예측할 수 있으면, 개별 분류기의 예측을 평균 내어 확률이 가장 높은 클래스를 예측
확률이 높은 투표에 비중을 더 두기 때문에 직접 투표 방식보다 성능이 높다.
배깅과 페이스팅
같은 알고리즘을 사용하고 훈련 세트의 서브셋을 무작위로 구성하여 분류기를 각기 다르게 학습
분류일 때는 통계적 최빈값statistical mode(i.e. 가장 많은 예측 결과)이고 회귀에 대해서는 평균을 계산
배깅bagging
훈련 세트에서 중복을 허용하여 샘플링하는 방식
전반적으로 배깅이 더 나은 모델을 만든다.
페이스팅pasting
중복을 허용하지 않고 샘플링하는 방식
oobout-of-bag 평가
배깅을 사용하면 어떤 샘플은 한 예측기를 위해 여러 번 샘플링되고 어떤 것은 전혀 선택되지 않을 수 있다.
평균적으로 각 예측기에 훈련 샘플의 63% 정도만 샘플링되고 선택되지 않은 훈련 샘플의 나머지 37%를 oob 샘플이라고 부른다.
예측기가 훈련되는 동안에는 oob 샘플을 사용하지 않으므로 별도의 검증 세트를 사용하지 않고 oob 샘플을 사용해 평가할 수 있다.
랜덤 패치와 랜덤 서브스페이스
특성에 대한 샘플링
랜덤 패치 방식random patches method
훈련 특성과 샘플을 모두 샘플링
랜덤 서브스페이스 방식random subspaces method
훈련 샘플을 모두 사용하고 특성은 샘플링하는 것
랜덤 포레스트random forest
배깅 방법(또는 페이스팅)을 적용한 결정 트리의 앙상블
트리의 노드를 분할할 때 전체 특성 중에서 최선의 특성을 찾는 대신 무작위로 선택한 특성 후보 중에서 최적의 특성을 찾는 식으로 무작위성을 더 주입
엑스트라 트리extra-trees(익스트림 랜덤 트리extremely randomized trees)
트리를 더욱 무작위하게 만들기 위해 최적의 임곗값을 찾는 대신 후보 특성을 사용해 무작위로 분할한 다음 그중에서 최상의 분할을 선택
특성 중요도
랜덤 포레스트는 특성의 상대적 중요도를 측정하기 쉽다.
어떤 특성을 사용한 노드가 평균적으로 불순도를 얼마나 감소시키는지 확인하여 특성의 중요도를 측정
가중치 평균이며 각 노드의 가중치는 연관된 훈련 샘플 수와 같다.
부스팅boosting(가설 부스팅hypothesis boosting)
약한 학습기를 여러 개 연결하여 강한 학습기를 만드는 앙상블 방법
앞의 모델을 보완해나가면서 일련의 예측기를 학습
에이다부스트AdaBoost
이전 모델이 과소적합했던 훈련 샘플의 가중치를 더 높이는 것
- 알고리즘이 기반이 되는 첫 번째 분류기를 훈련 세트에서 훈련시키고 예측
- 알고리즘이 잘못 분류된 훈련 샘플의 가중치를 상대적으로 높인다.
- 두 번째 분류기는 업데이트된 가중치를 사용해 훈련 세트에서 훈련하고 다시 예측
- 다시 가중치를 업데이트하는 식으로 계속된다.
모든 예측기가 훈련을 마치면 배깅이나 페이스팅과 비슷한 방식으로 예측
하지만 가중치가 적용된 훈련 세트의 전반적인 정확도에 따라 예측기마다 다른 가중치가 적용
$j$번째 예측기의 가중치가 적용된 에러율
$r_ {j}=\frac{\underset{\hat{y}_ {j}^{(i)}\neq y^{(i)}}{\sum_{i=1}^{m}w^{(i)}}}{\sum_ {i=1}^{m}w^{(i)}}$
각 샘플 가중치 $w^{(i)}$는 초기에 $\frac{1}{m}$로 초기화
첫 번째 예측기가 학습되고, 가중치가 적용된 에러율 $r_ {1}$이 훈련 세트에 대해 계산
$\hat{y}_ {j}^{(i)}$는 $i$번째 샘플에 대한 $j$번째 예측기의 예측
예측기 가중치
$\alpha_ {j}=\eta log\frac{1-r_ {j}}{r_ {j}}$
$\eta$는 학습률 하이퍼파라미터
예측기가 정확할수록 가중치가 더 높아진다.
만약 무작위로 예측하는 정도라면 가중치가 0에 가까울 것이고 그보다 나쁘면 (i.e. 무작위 추측보다 정확도가 낮으면) 가중치는 음수
가중치 업데이트 규칙
$w^{(i)}\leftarrow \begin{cases} w^{(i)} & \hat{y}_ {j}^{(i)}=y^{(i)}\text{일 때}\\
w^{(i)}exp(\alpha _ {j}) & \hat{y}_ {j}^{(i)}\neq y^{(i)} \text{일 때}
\end{cases}$
$i=1,2,\cdots,m$
샘플의 가중치를 업데이트 (i.e. 잘못 분류된 샘플의 가중치가 증가)
그런 다음 모든 샘플의 가중치를 정규화 (i.e. $\sum_{i=1}^{m}w^{(i)}$으로 나눈다.)
새 예측기가 업데이트된 가중치를 사용해 훈련되고 전체 과정이 반복
지정된 예측기 수에 도달하거나 완벽한 예측기가 만들어지면 중지
에이다부스트 예측
$\hat{y}(x)=\underset{k}{\text{argmax}}\underset{\hat{y}_ {j}(x)=k}{\sum_ {j=1}^{N}\alpha _ {j}}$
$N$은 예측기 수
모든 예측기의 예측을 계산하고 예측기 가중치 $\alpha_ {j}$를 더해 예측
가중치 합이 가장 큰 클래스가 예측 결과
그레이디언트 부스팅gradient boosting
이전 예측기가 만든 잔여 오차residual error에 새로운 예측기를 학습
새로운 샘플에 대한 예측은 모든 트리의 예측을 더하면 된다.
최적의 트리 수를 찾기 위해서는 조기 종료 기법을 사용
각 트리가 훈련할 때 사용할 훈련 샘플의 비율을 지정 가능 (확률적 그레이디언트 부스팅stochastic gradient boosting)
XGBoost : 최적화된 그레이디언트 부스팅 구현으로 유명한 파이썬 라이브러리
스태킹stacking
앙상블에 속한 모든 예측기의 예측을 취합하는 간단한 함수를 사용하는 대신 취합하는 모델을 훈련
- 훈련 세트를 두 개의 서브셋으로 나눈다.
- 첫 번째 서브셋은 첫 번째 레이어의 예측을 훈련시키기 위해 사용
- 첫 번째 레이어의 예측기를 사용해 두 번째 (홀드 아웃hold-out) 세트에 대한 예측을 만든다.
- 타깃값은 그대로 쓰고 앞에서 예측한 값을 입력 특성으로 사용하는 새로운 훈련 세트를 만든다.
- 블렌더blender(메타 학습기meta learner)가 새 훈련 세트로 훈련 (i.e. 첫 번째 레이어의 예측을 가지고 타킷값을 예측하도록 학습)
이런 방식의 블렌더를 여러 개 훈련시키는 것도 가능
실습코드링크 : 앙상블 방법