research notes

결정트리 (Decision Tree) 본문

머신러닝/ML basic

결정트리 (Decision Tree)

forest62590 2022. 3. 28. 22:55
728x90

1.  결정트리 개요

  • if-else(규칙조건)를 자동으로 찾아내 예측을 위한 규칙을 만드는 알고리즘으로 이해하면 된다.
  • 결정트리는 정보의 ‘균일도’라는 룰을 기반으로 트리를 분할하며, 알고리즘이 쉽고 직관적이다.
  • ‘균일도’를 측정하는 대표적인 방법은 엔트로피를 이용한 정보이득(Information Gain)지수와 지니 계수가 있다.
  • 트리의 깊이(Depth)가 깊어질수록 결정 트리의 예측 성능이 저하될 가능성이 높다.
결정 트리 장점 결정 트리 단점
  • 쉽다. 직관적이다
  • 피처의 스케일링이나 정규화 등의 사전 가공 영향도가 크지 않음
  • 과적합으로 알고리즘 성능이 떨어진다. 이를 극복하기 위해 트리의 크기를 사전에 제한하는 튜닝 필요

2. 균일도

  • 결정트리를 분할할 때 최대한 균일한 데이터 셋을 구성할 수 있도록 분할하는 것이 필요함
  • 결정노드는 정보 균일도가 높은 데이터 세트를 먼저 선택할 수 있도록 규칙 조건을 만듬, 이러한 정보의 균일도를 측정하는 대표적인 방법은 엔트로피를 이용한 정보이득과 지니계수가 있음

3. 앙상블학습 (Ensemble Learning)

  • 앙상블 학습을 통한 분류는 여러 개의 분류기(Classifier)를 생성하고 그 예측을 결합함으로써 보다 정확한 최종 예측을 도출하는 기법을 말한다.
  • 앙상블 학습의 유형은 전통적으로 보팅(Voting), 배깅(Bagging), 부스팅(Boosting)의 세 가지로 나눌 수 있다.
  • 보팅과 배깅의 다른 점은 보팅의 경우 일반적으로 서로 다른 알고리즘을 가진 분류기를 결합하는 것이고, 배깅의 경우 각각의 분류기가 모두 같은 유형의 알고리즘이지만, 데이터 샘플링을 서로 다르게 가져가면서 학습을 수행해 보팅을 수행하는 것이다.

4. 보팅유형 (하드보팅과 소프트보팅)

  • 하드보팅: 다수결의 원칙과 비슷. 예측한 결괏값들 중 다수의 분류기가 결정한 예측값을 최종 보팅 결과로 선정
  • 소프트보팅: 분류기들의 레이블 값 결정 확률을 모두 더하고 이를 평균해서 이들 중 확률이 가장 높은 레이블 값을 최종 보팅 결괏값으로 선정 (일반적으로 소프트보팅이 하드보팅 보다는 예측 성능이 좋아 많이 사용된다.)

5. 랜덤 포레스트(배깅 방식의 대표적인 알고리즘)

  • 여러 개의 결정 트리 분류기가 전체 데이터에서 배깅 방식(=부트스트래핑(Bootstrapping) 분할 방식은 데이터 중첩을 허용하여 여러 개의 데이터 세트를 만드는 것)으로 각자의 데이터를 샘플링해 개별적으로 학습을 수행한 뒤 최종적으로 모든 분류기가 보팅을 통해 예측을 결정하는 알고리즘

6. 부스팅 (Boosting)

  • 부스팅 알고리즘은 여러 개의 약한 학습기(Weak Learner)를 순차적으로 학습-예측하면서 잘못 예측 한 데이터에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식
  • 부스팅은 각각의 WeakTree가 의존적이며 n번재 Weak Tree의 학습 결과가 n+1 번째 WeakTree의 학습에 영향을 준다. 즉, 이전 Tree의 학습 결과를 통해 더욱 개선된 분류기를 만드는 것이 부스팅의 핵심이다.
  • 부스팅의 대표적은 구현은 AdaBoost(Adaptive boosting) 그래디언트 부스트가 있다.
  • 사이킷런의 GradientBoostingClassifier는 약한 학습기의 순차적인 예측 오류 보정을 통해 학습을 수행하므로 멀티 CPU 코어 시스템을 사용하더라도 병럴처리가 지원되지 않아서 대용량 데이터의 경우 학습에 매우 많은 시간이 필요
  • XGBoost는 GBM에 기반하고 있으며 GBM의 단점인 느린 수행 시간 및 과적합 규제 부재 등의 문제를 해결하였다. 특히, 병렬 CPU 환경에서 병렬 학습이 가능해 기존 GBM보다 빠르게 학습을 완료할 수 있다.
  • 사이킷런을 위한 래퍼 XGBoost는 크게 분류를 위한 래퍼 클래스인 XGBClassifier, 회귀를 위한 래퍼 클래스인 XGBRegressor가 있다.

References:

[1] 파이썬 머신러닝 완벽가이드, 권철민, 위키북스

[2] https://velog.io/@jiselectric/Ensemble-Learning-Voting-and-Bagging-at6219ae

[3] https://www.devops.ae/decision-tree-classification-algorithm/

[4] https://maihon.oopy.io/study/ml-python-guide/chapter-4-1

[5] https://quantdare.com/what-is-the-difference-between-bagging-and-boosting/

[6] https://wyatt37.tistory.com/1

 

728x90
Comments