상세 컨텐츠

본문 제목

Chapter 7. Ensemble Learning

심화 스터디/다변량 분석 스터디

by ㅣ찬스ㅣ 2023. 5. 11. 10:55

본문

본 게시물은 고려대학교 강필성 교수님의 다변량 분석 강좌를 참고하여 만들었습니다.

1. 앙상블 모델의 필요성

개별적으로는 약할 수 있어도 여럿이 뭉치면 강하다 (앙상블 모델)

  • 모든 데이터에 절대적으로 강한 모델은 존재하지 않는다 (179개의 알고리즘을 121개의 데이터에 개별적으로 적용했을 때 가장 전반적으로 성능이 좋게 나온 모델의 평균 등수가 32) --> 하지만 이들을 다 합치면?

  • 앙상블 모델이 기존의 단일 모델보다 전반적으로 성능이 더 좋게 나온다.

  • 앙상블하는 모델의 개수가 늘어날수록 성능이 전반적으로 향상 되는 추세 --> 앙상블의 유효성을 다시 한 번 입증
  • 추천 알고리즘을 개발하는 Netflix Competition에서 1등은 기존의 1등부터 30등의 모델을 가중치를 두어 앙상블한 기법
  • Ensembles almost always work better (2% 정도)
  • 앙상블 모델은 기존에 존재하는 모델을 합치는 것 만으로도 향상된 성능을 가져올 수 있다 (ILSVRC 2016 ~)

2. 이론적 배경

  • 모든 모델에는 우리가 어떻게 할 수 없는 '노이즈'가 존재
  • 전체 데이터에서 일부만 가지고 학습을 진행하는 입장에서 아무리 잘 학습해도 이러한 노이즈 때문에 에러가 발생

  • 특정 지점에서의 Mean Squared Error를 계산
  • 여기서 노이즈는 독립이기 때문에 밖으로 뺼 수 있음
  • 마지막 줄에서는 계산의 편의성을 위해 average fit에 x0 지점의 값을 더해주고 빼줌

  • E[(A+B)^2] = E[A^2] + E[B^2] + E[2*AB] 인데 여기서 E[2*AB]가 0이 나온다 --> 따라 생략
  • Bias: average estimator 와 참값이 얼마나 차이가 나는지 --> 무조건 낮을수록 좋음
  • Variance: 평균을 기준으로 한 개별값의 분포 --> 높으면 데이터셋별로 결과가 달라진다는 것을 imply 하기 때문에 weak match
  • Error --> Bias 와 Variance로 Decompose (Bias-Variance Decomposition)
  • 모델이 복잡하지 않으면 Bias는 높지만 Var이 작아 일관됨
  • 그렇다고 복잡하게 만들면 Bias는 낮아지겠지만 Var이 커져서 일관성이 줄어들음 --> Bias-Variance Dilemma 
  • Bias 와 Var은 서로 독립이 아니라 일종의 Trade-Off 관계
  • 하지만 앙상블을 통해 Bias도 낮고 Var도 낮은 모델을 만들 수 있음
  • Var를 줄이려면 --> Bagging, Random Forests
  • Bias를 줄이려면 --> AdaBoost, Gradient Boosting Machine (Boosting)
  • 모든 앙상블은 합쳐지는 모델들의 다양성을 높이는 것이 중요 --> 다양성이 없으면 단일 모델과 다를 것이 없음

  • 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을 만듬.
  1. 먼저 하나의 weak model (주로 stump tree 사용) 을 가져다가 데이터에 대해 예측을 시킴 *stump tree: Tree 모델 중 딱 한 번만 한 차원을 가지고 선을 그은 단순한 모델
  2. 오답에 중점을 두어 새로운 모델에 학습을 시킴 (틀린 데이터들의 sampling rate 가중치를 올려줌. 잘 맞춘 데이터들은 낮춤)
  3. 각 모델의 결과물을 정확도를 가중치 삼아 합쳐서 최종 결과를 생성
  • Boosting의 경우 Bagging과 달리 전 모델의 결과가 다음 모델에 영향을 주기 때문에 병렬 연산이 불가능하다는 단점이 존재.

 

3-4 Gradient Boosting Machine

  • Gradient Descent + Boosting

  1. 아주 단순한 Weak Model을 시작점으로 삼음
  2. 함수에 대한 Gradient를 구함
  3. 지금까지 누적된 함수와 실제값의 차이 잔차를 최소화하는 모델을 구함
  4. 결론적으로는 잔차를 추정하는 모델을 계속 생성해 잔차가 아주 작아질때까지 실행
  • Original GBM에는 Overfitting 이라는 아주 큰 문제가 존재. 잔차에 대한 추정 모델을 만들 다 보니 Noise의 존재를 인정하는 것이 아니라 Noise 자체도 학습이 되어 버린다. 
  • 해결방안: Subsampling: 각 단계마다 전체 데이터에서 일부만 가져와서 학습, Shrinkage: 단계가 진행될수록 특정 상수를 계속 곱해줘서 후에 생성되는 모델의 영향력을 줄여줌, Early Stopping: Error가 특정 기준 밑으로 내려가면 학습을 중지
  • Feature Importnace In GBM: 각 변수가 사용됐을 때의 Information Gain의 합을 통해 Importance를 찾을 수 있다.

관련글 더보기

댓글 영역