여러 모델의 예측 결과를 바탕으로 최종적인 예측 결과를 정할 수 있다면 더욱 효과적인 모델이 될 수 있을 겁니다. 다수결의 법칙을 사용하는 거죠. 이런 방식을 실제로도 사용합니다. 바로 앙상블(ensemble) 학습 방식입니다.

앙상블 학습이란?

결과를 얻기 위해 학습시킨 여러 모델이 있습니다. 예를 들어 로지스틱 회귀, 서포트 벡터 머신, 결정 트리 등이 있는데 이들이 예측하는 결과를 다수결로 투표하여 혹은 결과의 비율에 근거하여 최종적인 예측 결과를 내고 싶을 때가 있습니다. 이 때 앙상블 학습을 사용하면 됩니다.

앙상블 학습은

직접 투표(hard voting)

여러 모델의 예측 결과를 모아서 가장 많이 예측한 클래스를 최종적인 예측 결과로 정하는 방식입니다.

  • 예 클래스가 0과 1, 두 가지가 있는 경우를 가정합니다. 각 모델이 예측 결과를 1, 0, 0, 1, 1 로 예측했다면 1이 3개 0이 2개이므로 최종적인 결과는 1로 판정됩니다.

간접 투표(soft voting)

여러 모델의 예측 결과를 모아서 확률적으로 가장 높은 확률을 갖는 클래스를 최종적인 예측 결과로 정합니다.

  • 위와 같은 예제에서 각 모델이 0이 나올 확률이 0.4 0.9 0.9 0.4 0.4, 1이 나올 확률이 0.6 0.1 0.1 0.6 0.6이라고 예측했다고 가정합니다. 각 모델은 0과 1 중 확률이 높은 1 0 0 1 1을 개별적으로는 예측했겠지만 간접 모델에서는 확률의 평균값을 구해 가장 높은 값을 갖는 클래스를 택합니다. 이 예제에서는
    • 0이 나올 확률: (0.4+0.9+0.9+0.4+0.4) ÷ 5 = 0.6
    • 1이 나올 확률: (0.6+0.1+0.1+0.6+0.6) ÷ 5 = 0.4

    로 0이 나올 확률이 높기 때문에 최종적으로 0이라고 판단됩니다.

이처럼 투표 방식에 따라 결과가 달라질 수도 있습니다. 어떤 방식이 더 뛰어나거나 보편적으로 쓰이는지는 딱히 정해져 있지 않으며 상황에 따라 선택하는 것 같습니다.

Bagging & Pasting

앞서 설명한 예제처럼 다양한 모델에서 나온 결과값을 이용해 투표로 정할 수도 있지만 한 모델에서 나온 다양한 결과를 통해 투표로 결정할 수도 있습니다. 한 모델에서 다양한 결과를 얻기 위해 입력 데이터를 임의로 선택하여 여러 번 학습 시킬 수 있습니다.

  • bagging은 중복이 있도록 입력 데이터를 선택하는 방식(이렇게 선택된 데이터를 bootstrap이라고 합니다)이고
  • pasting은 중복 없이 입력 데이터를 선택하는 방식입니다.
  • 학습한 모델의 결과를 이용해 투표를 진행하여 최종적인 결과를 예측합니다.
  • 보통 bagging이 더 뛰어난 값을 가지는 것으로 알려져 있지만 pasting한 결과도 함께 확인해보는 것이 좋다고 합니다.
  • bootstrap에 포함되지 않은 데이터는 test data로 활용될 수 있는 장점이 있습니다. 이렇게 선택되지 않은 데이터를 oob 샘플 이라고 하고 앙상블은 oob 샘플을 이용해 test을 진행합니다.

앙상블 모델

랜덤 포레스트(Random Forest)

랜덤 포레스트는 결정 트리가 앙상블된 형태입니다.

결정 트리(Decision tree)

결정 트리는 마치 flow chart처럼 기준을 정해놓고 기준에 부합하는 데이터와 아닌 데이터를 나누는 방식으로 결정을 진행합니다.

  • 나눠진 결과에서 실제 그 클래스에 속하는 않는 데이터가 있는 비율을 불순도 라고 합니다.
  • 결정 트리는 이 순간 불순도가 가장 낮아지는 기준을 정합니다.(그리디 알고리즘이죠)
  • 결정 트리는 데이터의 형식에 크게 구애를 받지 않습니다. 정규화가 필요 없습니다.
  • 결정 트리에서 해당 결정을 내린 과정을 사람이 이해하기 쉽습니다.
  • 훈련 세트의 회전에 민감합니다.

이런 결정 트리를 앙상블 학습하여 만들어진 것이 랜덤 포레스트입니다. 랜덤 포레스트는 머신 러닝 알고리즘 중 높은 정확도로 실제로 많이 사용되고 있습니다.

익스트림 랜덤 트리 앙상블(extremely randomized tress)

랜덤 포레스트에서는 가장 작은 불순도를 갖는 조건을 기준으로 노드를 구성합니다. 그러나 익스트림 랜덤 트리 앙상블(엑스트라 트리)에서는 후보 특성을 사용해 무작위로 분할한 후 최상의 분할을 선택합니다.

  • 랜덤 포레스트에서 최적의 임곗값을 찾는데 시간이 많이 소요되는 부분을 줄일 수 있습니다.(랜덤하게 선택하니까요)
  • 랜덤 포레스트처럼 편향이 존재하긴 하지만 분산은 줄일 수 있습니다.
  • 랜덤 포레스트와 익스트림 랜덤 트리 앙상블 중 어느 것이 낫다고 단정 지을 수는 없으며 둘 다 시도해보는 것이 좋습니다.

에이다부스트(AdaBoost)

약한 학습기를 연결하여 강한 학습기를 만드는 방식입니다. (약한 학습기 여러 개의 결과를 투표하는 게 아니라 연결하는 겁니다.)

  • 에이다부스트는 이전 모델이 과소적합했던 샘플의 가중치를 더 높여 새로운 모델을 만드는 방식입니다. 이렇게 하면 모델은 점점 세심한 데이터의 변화도 학습할 수 있게 됩니다.

그래디언트 부스팅(Gradient boosting)

에이다부스트와 비슷하게 약한 학습기를 연결하여 강한 학습기를 만듭니다.

  • 이전 예측기가 만든 잔여 오차에 새로운 예측기를 학습시킵니다.
  • 즉 이전 예측기의 예측 오차를 이용하여 새로운 학습기를 학습시킵니다.
  • 그래디언트 부스팅을 최적화한 XGBoost 는 머신 러닝 경연 대회에서 우승 후보들이 주로 사용하는 방식입니다. 이 패키지는 빠른 속도, 확장성, 이식성을 목표로 합니다.

결론

  • 앙상블 학습을 통해 약한 예측기를 통해서도 강한 예측기를 만들 수 있습니다.
  • 제 의견이지만 앙상블 학습을 이용한다면 좋은 모델을 선정해야만 한다는 압박에서 조금 벗어날 수 있을 것 같습니다. 다양한 모델에서 얻은 결과를 이용하여 최종 결론을 도출하면 되니까요.

참고

댓글남기기