2020년 12월 1일 화요일

ML memo - Ensemble

특징

weak learner 을 여러개 만듦.

각 모델마다 bias ( 실제값과의 차이 ) 와 variance ( 각 모델의 예측값 사이의 분산) 이 있음.

variance 가 클수록 대개 overfitting 인데 각 모델의 예상치를 평균내면 분산이 줄어듦. 

즉 overfitting 이 하나의 모델에서 이루어져도 다른 모델이 이를 완화해주는 특징.



Bagging(Bootstrapped Aggregation)

training data 에서 그 크기만큼 복원추출을 해서 여러 개의 samples 를 만듬 - bootstrap

그 결과 어떤 instance 는 중복되고 어떤 instance 는 학습되지 않음.

각 샘플로부터 같은 종류의 weak algorithms 을 학습시킴.

그렇게 만들어진 다양한 모델 각각이 vote 를 해서 결과를 냄 - 대개 평균을 냄 


장점은 training data 에 민감한 모델에서 매우 잘 작동하는 것.

단점은 반대의 경우에 효과가 없다는 것..

=>그런 경우는 model 자체에 랜덤 요소를 넣음 => Randomization


Random Forest

decision tree 를 weak algorithms 으로 쓰는 Bagging.

tree 를 만들 때 n 개의 후보 옵션을 랜덤으로 선택해서 그 중에서 노드를 만듬.

즉 다양성을 강화



Boost

Bagging 이랑 거의 흡사하나 weak learner 을 순차적으로 학습시킨다는 것이 다름.

무슨말이냐면 전단계에서 틀린 instances 에 대해서 가중치를 높게 붙임.

그럼 그 다음에 학습하는 모델은 전단계에서 틀린것에 대해서 잘 판별할 것임.

이때 한번 가중치가 올라간 것에 중복해서 작용하진 않음.

그리고 한번 반복하면 전체 가중치를 normalization 을 하고 다시 시작함.

이게 반복이 되면 쉬운 instance 는 가중치가 적고 어려운 instance 는 가중치가 커질거임.

어려운 쪽에 가중치가 너무 커지면 쉬운쪽이 틀릴 수도 있으므로 둘의 관계는 적절히 유지됨.


w *= error / ( 1-error )

위 식으로 모델을 학습시킬 때마다 instance의 가중치를 업데이트 함.


expected += -log(error/(1-error))

예측할 땐 각 모델이 맞춘 instance 의 가중치를 합해서 위 식에 집어 넣음.

error = 0 은 로그에 정의되지 않았고 실제로 예측값에 포함시키지 않아 overfitting 방지함.

위 가중치가 각 모델의 예측값에 더해져 종합된 결과를 내보냄.


AdaBoost

1997 만들어진 최초의 boosting 모델로 adaboost 가 있음.



Stacking

모델의 종류를 다양하게 쓰는 앙상블 기법

각 모델은 vote 로 합쳐지지 않고 meta learner 가 데이터마다 어느 모델이 괜찮은지 학습해 판단함.

base-learner = level-0 model  => 원래 데이터와 label

meta learner = lever-1 model  => 원래 데이터와 cross-val 이 label

계산량이 많음.


List