모든 앙상블은 합쳐지는 모델들의 다양성을 높이는 것이 중요 --> 다양성이 없으면 단일 모델과 다를 것이 없음
Ensemble 의 error 가 error들의 zero mean, no correlation 가정을 배제 하더라도 Average Error 보다 작거나 같다 (Ensembles Almost Always Work Better)
3. 구체적인 방법들
3-1 Bagging
Bagging 그 자체는 앙상블 모델이 아닌 앙상블 모델은 만드는 방법론
cf. K-fold data split: 데이터를 N개의 조각으로 나눈 후, 각 모델이 비복원 추출로 추출한 N-1 개의 데이터를 가지고 학습. 각 모델은 N-2 개의 데이터 조각을 공유하므로 유사성 확보, 2개의 데이터를 공유하지 않으므로 다양성 확보.
Bootstrap Aggregating (BAGGING): 데이터를 N개의 조각으로 나눈 후, 각 모델이 복원 추출로 추출한 N개의 데이터를 가지고 학습 (중복 가능) 이때, 복원 추출 과정에서 한 번도 안 뽑힌 데이터 조각들이 있을 수 있는데 (Out of Bag Error), 이는 자연스레 Validation Data 로 사용
Variance 가 높은 복잡한 모델들과 사용하면 효과가 좋다 (Var를 통합하여 어느 정도 줄여주는 효과가 있음)
Majority Voting: 각 모델이 예측한 값을 단순 다수결을 통해 가장 많이 나온 값으로 최종 예측
Weighted Voting: 각 모델의 정확도나 에측값에 대한 Confidence를 가중치 삼아 구한 가중 평균을 최종 예측
Stacking: 각 모델의 예측값을 Input 삼아 모델을 만들어 그 모델의 예측값을 최종 예측값으로 삼음
Random Forests: Decision Tree 만을 위한 특별한 Bagging 방법. Bagging + 변수도 랜덤하게 일부만 사용해서 split point를 찾음. OOB를 사용해서 Feature Importance 를 구할 수 있음 --> split point 에 많이 사용 되었을수록 중요도가 높다. (Permutation Error 와 OOB error 의 차이를 통해 구할 수 있다)
Bagging 에서는 각 모델이 서로에게 영향을 주지 않기 때문에 동시에 병렬 연산이 가능
3-3 AdaBoost
Weak Model을 약점을 중점으로 반복 학습을 시켜 거기서 마려한 규칙들을 합쳐서 Strong Model을 만듬.
먼저 하나의 weak model (주로 stump tree 사용) 을 가져다가 데이터에 대해 예측을 시킴 *stump tree: Tree 모델 중 딱 한 번만 한 차원을 가지고 선을 그은 단순한 모델
오답에 중점을 두어 새로운 모델에 학습을 시킴 (틀린 데이터들의 sampling rate 가중치를 올려줌. 잘 맞춘 데이터들은 낮춤)
각 모델의 결과물을 정확도를 가중치 삼아 합쳐서 최종 결과를 생성
Boosting의 경우 Bagging과 달리 전 모델의 결과가 다음 모델에 영향을 주기 때문에 병렬 연산이 불가능하다는 단점이 존재.
3-4 Gradient Boosting Machine
Gradient Descent + Boosting
아주 단순한 Weak Model을 시작점으로 삼음
함수에 대한 Gradient를 구함
지금까지 누적된 함수와 실제값의 차이 잔차를 최소화하는 모델을 구함
결론적으로는 잔차를 추정하는 모델을 계속 생성해 잔차가 아주 작아질때까지 실행
Original GBM에는 Overfitting 이라는 아주 큰 문제가 존재. 잔차에 대한 추정 모델을 만들 다 보니 Noise의 존재를 인정하는 것이 아니라 Noise 자체도 학습이 되어 버린다.
해결방안: Subsampling: 각 단계마다 전체 데이터에서 일부만 가져와서 학습, Shrinkage: 단계가 진행될수록 특정 상수를 계속 곱해줘서 후에 생성되는 모델의 영향력을 줄여줌, Early Stopping: Error가 특정 기준 밑으로 내려가면 학습을 중지
Feature Importnace In GBM: 각 변수가 사용됐을 때의 Information Gain의 합을 통해 Importance를 찾을 수 있다.
댓글 영역