앙상블 학습과 랜덤 포레스트
7.1 투표기반 분류기
더 좋은 분류기를 만드는 간단한 방법은 정확도가 80%인 여러개의 각 예측을 모아서 가장 많이 선택된 클래스를 예측하는 것이다. 이를 다수결 투표로 정해진다해서 직접투표hard voting 분류기 라고한다.
이는 각 분류기의 정확도가 낮더라도 충분하게 많고 다양하다면 강한 학습기strong learner가 될 수 있다.
앙상블 학습 방법은 예측기가 가능한 한 서로 독립적일 때 최고의 성능을 발휘한다. 즉 다른 알고리즘을 통해서 학습시키는 것이다. 이러면 각 예측기가 각기 다른 종류의 오차를 만들어내기 때문에 앙상블 학습의 정확도를 향상시킨다.
각 분류기의 클래스 확률을 예측가능하다면, 이를 평균내어 확률이 가장 높은 클래스를 예측가능하다. 이를 간접 투표soft voting 이라고 한다.
7.2 배깅과 페이스팅
다양한 분류기를 만드는 한 방법은 다양한 알고리즘을 사용하는것이고,
또 다른 방법은 훈련 서브셋을 무작위로 구성하여 분류기를 각기 다르게 학습하는 것이다.
훈련세트의 중복을 허용하여 샘플링하는 방식을 배깅bagging (bootstrap aggregating) 이라고하며,
중복을 허용하지 않는 샘플링 방식을 페이스팅pasting 이라고 한다.
즉 배깅과 페이스팅의 공통점은 같은 훈련샘플을 여러 예측기에 사용가능하고,
차이점은 배깅만이 같은 훈련샘플을 여러번 사용가능하다는 것이다.
7.2.1 사이킷런의 배깅과 페이스팅
부트스트랩핑은 각 예측기가 학습하는 서브셋의 다양성을 증가시킨다 (샘플의 중복을 허용하기 때문에)
전반적으로 배깅이 더나은 모델을 만들기 때문에 선호되자만, 교차검증으로 배깅과 페이스팅을 모두 평가하는 편이 좋다.
7.2.2 oob 평가
배깅을 사용하면 무작위로 샘플링되기 때문에 선택되지않거나 여러번 선택되는 샘플이 존재할 수 있다.
중복을 허용하여 훈련세트의 크기만큼인 m 개 샘플을 선택하면, 평균적으로 각 예측기에 훈련샘플이 63%정도 사용되고 나머지 37%는 사용되지않는다.
이 선택되지 않은 훈련샘플을 oob(out-of-bag) 샘플 이라고 부른다.
이 oob 샘플들은 훈련에 사용되지않기 때문에, 검증 세트를 사용하지 않고 이 oop 샘플을 통해 평가한다.
7.3 랜덤 패치와 랜덤 서브스페이스
배깅에서 무작위 훈련샘플이 아니라 특성 샘플링도 가능하다.
각 예측기는 무작위로 선택한 입력 특성의 일부분으로만 훈련된다.
이는 매우 고차원의 데이터셋(이미지와 같은)을 다룰 때 유용하다.
훈련세트와 특성을 모두 샘플링하는 것을 랜덤 패치 방식random patches method 라고한다.
훈련세트를 모두 사용하고, 특성만 샘플링하는 것을 랜덤 서프스페이스 방식random subspaces method 라고 한다.
특성 샘플링은 더 다양한 예측기를 만들며, 편향을 늘리는 대신 분산을 낮춘다.
7.4 랜덤 포레스트
랜덤 포레스트는 일반적으로 배깅(페이스팅)을 적용한 결정트리 앙상블이다.
전형적으로 max_samples를 훈련 세트의 크기로 결정한다.
랜덤포레스트에서 트리의 노드를 분할할 때, 전체특성중에서 최적의 특성을 찾는 대신, 무작위로 특성을 선택하고 그중에 최적의 특성을 찾는식으로 무작위성을 더 주입한다.
7.4.1 엑스트라 트리
엑스트라트리는 노드를 분할할때, 랜덤 포레스트보다 더욱 무작위성을 부여한 방식으로, 각 노드에서 최적의 임계값을 찾는 랜덤 포레스트의 방식 대신, 후보 특성을 무작위로 분할해 그 중에서 최상의 분할을 선택하는 방식이다.
즉, 결정 트리는 모든 특성에 대해 모든 노드에서 임계값을 찾으면,
랜덤포레스트는 무작위한 특성에 대해 모든 노드에서 최적의 특성 임계값은 찾고,
엑스트라트리는 무작위한특성에 대해 모든 노드에서 무작위한 특성 임계값으로 분할해 그중 최적의 방법을 선택한다.
7.4.2 특성 중요도
랜덤포레스트의 장점은 특성의 중요도를 측정하기 쉽다.
어떤 특성을 사용한 노드가 평균적으로 불순도를 얼마나 감소시키는지 확인하여 특성의 중요도를 측정한다.
즉, 가중치의 평균이며, 연관된 훈련 샘플의 수와 같다.
랜덤 포레스트는 특히 특성 선택에 있어서 특성의 중요도를 빠르게 확인해 매우 편리하다.
7.5 부스팅
부스팅boosting( 가설 부스팅hypothesis boosting) 은 약한 학습기 여러 개 연결하여 앞의 모델을 보완해나가면서 일련 강한학습기를 만드는 방법이다.
부스팅 방법에는 에이다부스트adaboost, 그레이디언트 부스팅gradient boosting 이 있다.
7.5.1 에이다 부스트
이전 예측기를 보완하는 새로운 예측기를 만드는 방법은, 이전 모델이 과소적합했던 훈련 샘플의 가중치를 더 높이는 것이다. 이러면 새로운 예측기는 학습하기 어려운, 과소적합되었던 샘플에 더 맞춰지게 된다.
첫번째 예측기를 훈련시키고, 잘못분류된 훈련 샘플의 가중치를 상대적으로 높인다.
두번째 예측기는 업데이트된 가중치를 사용해 예측하고, 이 과정을 반복한다.
중요한 단점으로 각 예측기는 이전 예측기에 종속되있기 때문에, 병렬화를 할 수 없어 확장성이 높지 않다.
알고리즘 작동방식 :
w^(i) : 초기에 1/m 으로 초기화 되는 각 샘플 가중치
r_j : j번째 예측기의 가중치가 적용된 에러율
y^(i)_hat_j : j번째 예측기의 i번째 샘플의 예측
alpha_j : j번째 예측기의 가중치
정확히 예측한 샘플에 대해서는 가중치를 그대로두고,
잘못 예측한 샘플에 대해서 가중치를 증가시킨다.
가중치를 업데이트후 다시 가중치를 정규화한다.
이 알고리즘은 지정한 예측기의 수에 도달하거나, 완벽한 예측기가 만들어지면 중지한다.
에이다 부스트의 예측은 모든 예측기의 예측을 계산하고, 예측기 가중치 alpha_j 를 더해 예측 결과를 만들어 합이 가장 큰 클래스가 예측결과가 된다.
7.5.2 그레디언트 부스팅gradient boosting
그레디언트 부스팅은 에이다 부스팅과 비슷하게 이전의 오차를 보정하도록 예측기를 추가하지만, 샘플의 가중치를 수정하는 대신, 이전 예측기가 만든 잔여 오차residual error 에 새로운 예측기를 학습시킨다.
잔여오차는 y - h(x)_j 로 구해지고, 이를 통해 각 예측기를 학습시킨후, 모든 예측기의 h(x)_j를 더하면 앙상블의 예측을 보여준다.
learning_rate가 줄어들면 학습시키기 위한 예측기의 수가 늘어나지만 예측의 성능은 좋아진다.
최적의 예측기수를 찾기 위해 조기종료기법을 사용한다.
또한 각 트리가 훈련할 샘플의 비율을 지정하는 방법을 확률적 그레디언트 부스팅stochastic gradient boosting 이라고 한다.
7.6 스태킹 stacked + generalization
앙상블 모델 스태킹은 모든 예측기의 예측을 취합하는 간단한 함수 대신, 취합하는 모델도 훈련시킨다.
이 마지막 예측기를 블렌더blender , 메타 학습기meta learning 이라고도 한다.
이 블렌더의 일반적인 학습 방법은 홀드 아웃hold-out 세트를 이용한다.