앙상블 기법이란 내부적으로 여러 모델을 생성한 후 모델들을 종합해 최종 모델을 생성하는 방법론이다. 머신러닝에서는 여러 머신러닝 모델을 연결하여 더 강력한 모델을 만드는 기법으로 대표적인 모델로 랜덤포레스트와 그래디언트부스팅이 있다.
📍 랜덤포레스트 → 배깅의 대표적인 예시
📍 그래디언트 부스팅 → 부스팅의 대표적인 예시
트리는 작은 편향(bias)과 큰 분산(varience)를 갖기 때문에 매우 깊이 성장한 트리는 훈련 데이터에 대하 과적합한다. 이 문제를 해결하기위해 랜덤포레스트는 배깅 기능을 갖고 있다.
배깅은 bootstrap aggregating의 약자로, 부트스트랩(bootstrap)을 통해 조금씩 다른 훈련 데이터에 대해 훈련된 기초 분류기(base learner)들을 결합(aggregating)시키는 방법이다.
다시말해 배깅은 훈련세트에서 중복을 허용해서 샘플링을 하여 여러개 모델을 훈련하는 앙상블 방식이다. 같은 훈련 샘플을 여러개의 모델에 걸쳐 사용해서 모든 모델이 훈련을 마치면 앙상블은 모든 예측기의 예측을 모아서 새로운 샘플에 대한 예측을 만들게 된다.
부트스트랩이란 주어진 훈련데이터에서 중복을 허용하여 원 데이터셋과 같은 크기의 데이터셋을 만드는 과정을 말한다. 이 과정은 편향은 그대로 유지하면서 분산은 감소시키기때문에 포레스트의 성능을 향상시킨다.
따라서 배깅을 통해 랜덤포레스트를 훈련시키는 과정은 다음과 같이 진행된다
👉 즉 한개의 결정 트리의 경우 훈련 데이터에 있는 노이즈에 대해서 매우 민감하지만 부트스트랩 방법을 통해 서로 다른 데이터가 포함된 여러 훈련 데이터셋을 만든다면 트리들의 편향은 유지하고, 분산은 감소시켜 트리들이 서로 상관화 되지 않아 여러 트리들의 평균은 노이즈에 대해 강해지게 된다. 다시말해 배깅은 서로 다른 데이터 셋들에 대해 훈련시킴으로써 트리들을 비상관화시켜주는 과정이다.
Resample하는 과정이 부트트랩, 각각을 연결하여 Model을 생성한 것이 Bagging이라고 볼 수 있다.
부스팅은 여러 얕은 트리를 연결하며 편향과 분산을 줄여 강력한 트리를 생성하는 기법이다. 이전 트리에서 틀렸던 부분에 가중치를 주며 지속적으로 학습해나간다. 부스팅은 약한 모델을 여러개 연결해서 강한 모델을 만들어내기 위한 앙상블 방식으로, 앞의 모델을 보완해나가며 일련의 모델들을 학습시켜나가는 것입니다.
부스팅의 대표적인 모델 중 하나는 에이다이다. 에이다부스트는 앙상블 이전까지의 오차를 보정하도록 모델을 순차적으로 추가한다. 반명 그래디언트 부스트는 에이타 부스트와 달리 샘플의 가중치를 수정하는 대신 이전 모델이 만든 잔여 오차에 대해 새로운 모델을 학습시키게 된다. 최적화된 그래디언트 부스팅 구현으로 가장 유명한 것이 XGBoost이다.
💡 gradient: 경사(도), 변화도, 증감률
모델마다 “gradient”가 들어가는 이유는 가중치를 업데이트할 때 경사하강법을 사용하기 때문이다.
머신러닝에서는 손실함수가 최소가 되는 파라미터(베타)를 찾아야하는데, 이때 사용되는 것이 Gradient이다. 다시말해 그래프에서 값이 가장 낮은 지점으로 경사를 타고 하강하며 오차의 기울기가 최소가 되는 지점을 찾아가는 것을 말하며, 이것을 경사하강법이라고 부른다.
부스팅 모델을 만들 때 적절한 learning rate을 맞추는 것이 중요하다. 보폭이 너무 크면 최소점을 지나치고 발산할 수도 있으며, 보폭이 너무 작다면 학습에 시간이 너무 오래 걸릴 수도 있다.
Big Learning Rate이 Very high learning rate이다. Learning rate이 적절할 경우(Good learning rate) 학습횟수(epoch)가 증가할 수록 손실이 줄어들게 된다. → 연두색 라인