앙상블(ensemble) - Random Forest / Gradient Boosting

앙상블(ensemble) - Random Forest / Gradient Boosting

https://hororolol.tistory.com/198

를 필사하며 공부

* 앙상블 : 일련의 예측기 (분류/회귀 모델)

- 앙상블 학습(ensemble learning) : 일련의 예측기로부터 예측을 수집하면 가장 좋은 모델 하나보다 더 좋은 예측을 얻을 수 있음

- 앙상블 방법 (ensemble method) : 앙상블 학습 알고리즘

- 훈련 세트로부터 무작위로 각기 다른 서브셋을 만들어 일련의 결정 트리 분류기를 훈련시킬 수 있다.

- 예측을 하려면 모든 개별 트리의 예측 을 구하면 된다.

- 그런 후 가장 많은 선택 을 받은 클래스를 예측으로 삼는다.

- 랜덤 포레스트(Random Forest) : 결정 트리의 앙상블

- 가장 강력한 머신러닝 알고리즘

- ensemble method : 배깅, 부스팅, 스태깅 등

1. 투표 기반 분류기

- 좋은 분류기를 만드는 방법 : (로지스트) 회귀 분류기, SVM 분류기, 랜덤 포레스트 분류기, K-최근접 이웃 분류기 등 여러 분류기의 예측을 모아 가장 많이 선택된 클래스를 예측하는 것

- 이렇게 다수결 투표 로 정해지는 분류기를 직접 투표(hard voting) 분류기라고 한다.

- 각 분류기가 약한 학습기(weak learner)일지라도 충분하게 많고 다양하다면 앙상블은 강한 학습기(strong learner)가 될 수 있다.

-> by 큰 수의 법칙 (law of large numbers)

- 앙상블 방법은 예측기가 가능한 한 서로 독립적일 때 최고의 성능 발휘한다.

- 다양한 분류기를 얻는 한 가지 방법은 각기 다른 알고리즘으로 학습시키는 것

- 이렇게 하면 매우 다른 종류의 오차를 만들 가능성이 높기 때문에 앙상블 모델의 정확도를 향상시킨다.

- 모든 분류기가 클래스의 확률을 예측할 수 있으며, 개별 분류기의 예측을 평균 내어 확률이 가장 높은 클래스 를 예측할 수 있다.

-> 간접 투표(soft voting)

- hard voting은 잘못된 클래스가 다수인 경우 앙상블의 정확도가 낮아지지만,

- soft voting은 확률이 높은 투표에 비중을 더 두기 때문에 hard voting보다 성능이 좋다.

2. 배깅과 페이스팅

- 같은 알고리즘을 사용하지만 훈련 세트의 서브셋을 무작위로 구성하여 분류기를 각기 다르게 학습시킴

- 배깅(bagging): 훈련 세트에서 중복을 허용하여 샘플링하는 방식

- bootstrp aggregating의 줄임말

- 페이스팅(pasting): 중복을 허용하지 않고 샘플링하는 방식

- 즉, 배깅과 페이스팅은 같은 훈련 샘플을 여러 개의 예측기에 걸쳐 사용할 수 있다.

- 모든 예측기가 훈련을 마치면 앙상블은 모든 예측기의 예측을 모아 새로운 샘플에 대한 예측을 만든다.

- 수집 함수는 전형적으로 분류일 때는 통계적 최빈값이고, 회귀에 대해서는 평균을 계산한다.

4. 랜덤 포레스트 : 일반적으로 배깅 방법(or 페이스팅)을 적용한 결정 트리의 앙상블

- 랜덤 포레스트 알고리즘 트리의 노드를 분할할 때 전체 특성 중 최선의 특성을 찾는 대신

무작위로 선택한 특성 후보 중 최적의 특성을 찾는 식으로 무작위성을 더 주입한다.

- 이는 결국 트리를 더욱 다양하게 만들고 편향을 손해 보는 대신 분산을 낮춰 전체적으로 더 훌륭한 모델을 만들어낸다.

- 랜덤성에 의해 트리들이 서로 조금씩 다른 특성을 갖는다.

- 이 특성은 각 트리들의 예측들이 비상관화(decorrelation) 되게 하며, 결과적으로 일반화(generalization) 성능을 향상시킨다.

- 또한, 랜덤화(randomization)는 포레스트가 노이즈가 포함된 데이터에 대해서도 강인하게 만들어준다.

- 랜덤화는 각 트리들의 훈련 과정에서 진행되며, 랜덤 학습 데이터 추출 방법을 이용한 앙상블 학습법인 배깅(bagging)과 랜덤 노드 최적화(randomized node optimization)가 자주 사용된다.

* 특성 중요도

- 랜덤 포레스트는 특성의 상대적 중요도를 측정하기 쉽다.

- 사이킷런은 어떤 특성을 사용한 노드가 (랜덤 포레스트에 있는 모든 트리에 걸쳐서) 평균적으로 불순도를 얼마나 감소시키는지 확인하여 특성의 중요도를 측정한다.

- 즉, 가중치 평균이며 각 노드의 가중치는 연관된 훈련 샘플 수와 같다.

- 사이킷런은 훈련이 끝난 뒤 특성마다 자동으로 이 점수를 계산하고 중요도의 전체 합이 1이 되도록 결과값을 정규화한다.

5. 부스팅

- 부스팅(boosting) : 약한 학습기를 여러 개 연결하여 강한 학습기를 만드는 앙상블 방법

- 아이디어 : 앞의 모델을 보완해나가며 일련의 예측기를 학습시키는 것

- 부스팅 방식: 아다부스트, 그래디언트 부스팅

* 그래디언트 부스팅 (Gradient Boosting)

- 앙상블에 이전까지의 오차를 보정하도록 예측기를 순차적으로 추가

- but, 이전 예측기가 만든 잔여 오차(residual error)에 새로운 예측기를 학습시킴

- learning rate를 낮게 설정하면 앙상블을 훈련 세트에 학습시키기 위해 많은 트리가 필요하지만

일반적으로 예측의 성능은 좋아진다. --> 축소(shrinkage)라 불리는 규제 방법

- Gradient Boosting Regressor은 각 트리가 훈련할 때 사용할 훈련 샘플의 비율 을 지정할 수 있는 subsample 매개변수도 지원한다.

- ex) subsample=0.25라 하면 각 트리는 무작위로 선택된 25%의 훈련 샘플로 학습된다.

- 이렇게 학습하면 편향이 높아지는 대신 분산이 낮아지게 되고, 훈련 속도가 상당히 높다.

--> 확률적 그래디언트 부스팅 (Stochastic Gradient Boosting)

from http://yeon22.tistory.com/99 by ccl(A) rewrite - 2021-08-26 14:00:15