본문 바로가기
AI/혼공머신

[혼공머신] 05-3 | 트리의 앙상블

by 뒹굴거리는프로도 2024. 11. 4.
반응형

이번 단원은 머신 러닝에서 특별히 중요한 단원이라고 합니다.

https://youtu.be/Moz8i-tKurk?si=WJBaFYBdQppL5RKl

 


*키워드

앙상블 학습

더 좋은 예측 결과를 만들기 위해 여러 개의 모델을 훈련하는 머신러닝 알고리즘을 말한다.

랜덤 포레스트

대표적인 결정 트리 기반의 앙상블 학습 방법이다. 부트스트랩 샘플을 사용하고 랜덤하게 일부 특성을 선택하여 트리를 만드는 것이 특징이다.

엑스트라 트리

랜덤 포레스트와 비슷하게 결정 트리를 사용하여 앙상블 모델을 만들지만 부트스트랩 샘플을 사용하지 않는다. 대신 랜덤하게 노드를 분할해 과대적합을 감소시킨다.

그레이디언트 부스팅

랜덤 포레스트나 엑스트라 트리와 달리, 결정 트리를 연속적으로 추가하여 손실 함수를 최소화하는 앙상블 방법이다. 이런 이유로 훈련 속도가 조금 느리지만 더 좋은 성능을 기대할 수 있다. 그레이디언트 부스팅의 속도를 개선한 것이 히스토그램 기반 그레이디언트 부스팅이며 안정적인 결과와 높은 성능으로 매우 인기가 높습니다.

*핵심 패키지와 함수

scikit-learn

  • RandomForestClassifier
    • 랜덤 포레스트 분류 클래스입니다.
    • n_estimators 매개변수는 앙상블을 구성할 트리의 개수를 지정합니다. 기본값은 100입니다.
    • criterion 매개변수는 불순도를 지정하며 기본값은 지니 불순도를 의미하는 'gini'이고 'entropy'를 선택하여 엔트로피 불순도를 사용할 수 있습니다.
    • max_depth는 트리가 성장할 최대 깊이를 지정합니다. 기본값은 None으로 지정하면 리프 노드가 순수하거나 min_samples_split보다 샘플 개수가 적을 때까지 성장합니다.
    • min_samples_split은 노드를 나누기 위한 최소 샘플 개수입니다. 기본값은 2입니다.
    • max_features 매개변수는 최적의 분할을 위해 탐색할 특성의 개수를 지정합니다. 기본값은 auto로 특성 개수의 제곱근입니다.
    • bootstrap 매개변수는 부트스트랩 샘플을 사용할지 지정합니다. 기본값은 True입니다.
    • oob_score는 OOB 샘플을 사용하여 훈련한 모델을 평가할지 지정합니다. 기본값은 False입니다.
    • n_jobs 매개변수는 병렬 실행에 사용할 CPU 코어 수를 지정합니다. 기본값은 1로 하나의 코어를 사용합니다. -1로 지정하면 시스템에 있는 모든 코어를 사용합니다.

  • ExtraTreesClassifier
    • 엑스트라 트리 분류 클래스입니다.
    • n_estimators, criterion, max_depth, min_samples_split, max_features 매개변수는 랜덤 포레스트와 동일합니다.
    • bootstrap 매개변수는 부트스트랩 샘플을 사용할지 지정합니다. 기본값은 False입니다.
    • oob_score는 OOB 샘플을 사용하여 훈련한 모델을 평가할지 지정합니다. 기본값은 False입니다.
    • n_jobs 매개변수는 병렬 실행에 사용할 CPU 코어 수를 지정합니다. 기본값은 1로 하나의 코어를 사용합니다. -1로 지정하면 시스템에 있는 모든 코어를 사용합니다.

  • GradientBoostingClassifier
    • 그레이디언트 부스팅 분류 클래스입니다.
    • loss 매개변수는 손실 함수를 지정합니다. 기본값은 로지스틱 손실 함수를 의미하는 'deviance'입니다.
    • learning_rate 매개변수는 트리가 앙상블에 기여하는 정도를 조절합니다. 기본값은 0.1입니다.
    • n_estimators 매개변수는 부스팅 단계를 수행하는 트리의 개수입니다. 기본값은 100입니다.
    • subsample 매개변수는 사용할 훈련 세트의 샘플 비율을 지정합니다. 기본값은 1.0입니다.
    • max_depth 매개변수는 개별 회귀 트리의 최대 깊이입니다. 기본값은 3입니다.

  • HistGradientBoostingClassifier
    • 히스토그램 기반 그레이디언트 부스팅 분류 클래스입니다.
    • learning_rate 매개변수는 학습률 또는 감쇠율이라고 합니다. 기본값은 0.1이며 1.0이면 감쇠가 전혀 없습니다.
    • max_iters는 부스팅 단계를 수행하는 트리의 개수입니다. 기본값은 100입니다.
    • max_bins는 입력 데이터를 나눌 구간의 개수입니다. 기본값은 255이며 이보다 크게 지정할 수 없습니다. 여기에 1개의 구간이 누락된 값을 위해 추가됩니다.

*05-3 단원 내용

시작하기전에

대체적으로 좋은 머신러닝 알고리즘이 과연 있을까?라는 질문에 대해 보편적인 답으로 '결정 트리'를 말할 수 있다. 05-3 단원에서 결정 트리에 대해 공부해본다.

정형 데이터와 비정형 데이터

  • 정형 데이터는 CSV나 데이터 베이스, 엑셀에 저장하기 쉬운, 어떤 구조로 되어 있는 형태의 데이터이다.
  • 비정형 데이터는 정형 데이터와 반대인 데이터, 즉 텍스트 데이터나 사진 음악 같은 형태의 데이터이다.
  • 앙상블 학습ensemble learning은 정형 데이터를 다루는 데 가장 뛰어난 성과를 내는 알고리즘이다. 이 알고리즘은 대부분 결정 트리를 기반으로 만들어져 있다.
  • 비정형 데이터로 모델을 만들고자 할 때는, 혼공머신 7장에서 배울 신경망 알고리즘을 사용할 수 있다.

랜덤 포레스트

  • 대표적인 앙상블 학습 알고리즘이다.
  • 부트스트랩 샘플을 사용한다. 기본적으로 훈련 데이터에서 랜덤하게 샘플을 추출하여 훈련 세트의 크기와 같은 크기의 훈련 데이터를 만든다. 이 때 샘플이 중복되어 추출될 수 있다.

엑스트라 트리

  • 랜덤 포레스트와 매우 비슷하게 동작한다. 그러나 부트스트랩 샘플을 사용하지 않는다. 대신 노드를 분할할 때 무작위로 분할한다.
  • 속도가 빠르며, 랜덤 포레스트보다는 트리의 개수를 늘려야 좋은 성능을 얻을 수 있다.

그레이디언트 부스팅

  • 깊이가 얕은 결정 트리를 연속적으로 추하가여 이전 트리의 오차를 보완, 즉 손실 함수를 최소화하는 방식으로 앙상블 하는 방법이다.
  • 성능이 뛰어나지만 병렬로 훈련할 수 없기 때문에 랜덤 포레스트나 엑스트라 트리보다 훈련 속도가 조금 느리다. 학습률 매개변수로 모델의 복잡도와 속도를 조절할 수 있다. 학습률 매개변수가 크면 훈련 세트에 과대적합된 모델을 얻을 수 있다.
  • 거의 과대적합이 되지 않으며, 결정 트리의 개수를 늘려도 과대적합에 매우 강함. 학습률을 증가시키고 트리의 개수를 늘리면 더욱 성능이 향상된다.

히스토그램 기반 그레이디언트 부스팅

  • 가장 뛰어난 앙상블 학습으로 평가받는 알고리즘이다.
  • 훈련 데이트럴 256개의 구간으로 변환하여 사용하기 때문에 노드 분할 속도가 매우 빠르다.
  • permutation_importance()로 특성 중요도를 평가할 수 있다.
  • 코랩에는 사이킷런뿐만 아니라 히스토그램 기반 그레이디언트 부스팅 라이브러리인 XGBoost와 LightGBM이 설치되어 있다.

앙상블 학습을 통한 성능 향상

반응형