CH 4. 분류 -2

권경민·2023년 1월 9일
0

1. 앙상블학습

앙상블 학습 개요

  • 여러 개의 분류기를 생성하고 그 예측을 결합 -> 보다 정확한 최종 예측을 도출하는 기법

앙상블 학습의 유형

  • 보팅 (Voting)

  • 배깅 (Bagging)

  • 부스팅 (Boosting)

  • 스태킹

1) 보팅

일반적으로 서로 다른 알고리즘을 가진 분류기의 결합을 통해 최종 예측 결과를 결정함

보팅 유형

  • 하드 보팅 : 예측한 결과값 중 다수의 분류기가 결정한 예측값을 최종 보팅 결과값으로 선정.
  • 소프트부팅 : 분류기의 각 레이블 값 결정 확률을 모두 더하고 이를 평균낸 후에 확률이 가장 높은 레이블 값을 최종 보팅 결과값으로 선정.

2) 배깅

대부분 결정 트리 알고리즘을 기반으로 함

같은 유형의 알고리즘을 기반으로 하는 분류기를 사용하며, 샘플링 데이터셋을 다르게 학습을 시켜 보팅을 수행함

부트스트랩 (Bootstrap) 이란?

  • 원래의 데이터 셋으로부터 관측치를 반복적으로 추출(복원 반복 추출)하여 데이터 셋을 얻는 방법
  • 데이터 양을 임의적으로 늘리고, 데이터 셋의 분포가 고르지 않을 때 고르게 만듦.

3) 부스팅

  • 대부분 결정 트리 알고리즘을 기반으로 함
  • 여러 개의 분류기가 순차적으로 학습을 하되, 앞에서 학습한 분류기가 예측이 틀린 데이터에 대해서는 올바르게 예측할 수 있도록, 다음 분류기에게는 가중치를 부여하면서 학습과 예측을 진행

4) 스태킹

  • 일반적으로 서로 다른 알고리즘을 기반으로 함.
  • 여러 가지 다른 모델의 예측 결과값을 다시 학습 데이터로 만들어 다른 모델로 재학습시켜 결과를 예측하는 방법

보팅 분류기 - Voting Classifier

-> 앙상블에서는 트리 알고리즘의 과적합의 단점을 많은 분류기를 결합해 수행함으로서 극복하고 있음.

  • 이를 통해 편향-분산 트레이드오프의 효과를 극대화할 수 있음

2. 랜덤포레스트

랜덤포레스트의 개요

  • 랜덤포레스트는 배깅의 대표적인 알고리즘

  • 기반 알고리즘 : 결정 트리 알고리즘

    📍 부스팅 기반의 다양한 앙상블 알고리즘은 대부분 결정 트리 알고리즘을 기반 알고리즘으로 채택

  • 예측 결정 방식 : 여러 결정 트리 분류기가 전체 데이터에서 배깅 방식으로 각자의 데이터를 샘플링해 개별적으로 학습을 수행한 뒤 최종적으로 모든 분류기가 보팅을 통해 결정.

  • 개별 트리가 학습하는 데이터는 일부가 중첩되게 샘플링 된 데이터셋임

    부트스트래핑 : 여러개의 데이터셋을 중첩되게 분리하는 방식

    ➕ 배깅(Bagging) = BootStrap Aggrigating의 줄임말

3. GBM - Gradient Boosting Model

GBM의 개요

  • 부스팅 알고리즘 : 여러 개의 약한 학습기를 순차적으로 학습-예측하면서 잘못 예측한 데이터에 가중치 부여를 통해 오류를 개선해 나가면서 학습하는 방식

  • 부스팅의 대표 모델

    • 에이다 부스트(AdaBoost) : 오류 데이터에 가중치를 부여하면서 부스팅을 수행하는 알고리즘

→ 과정 : 여러 번의 약한 학습기로 분류하고, 각각의 오류 데이터에 대해서 가중치를 부여. 이러한 지표들을 모두 결합하여 미지의 데이터에 대해 예측 수행 → 개별 약간 학습기보다 결과가 훨씬 좋음

  • GBM(Gradient Boost Machine) : 에이다 부스트와 유사하나, 가중치 업데이트를 경사 하강법으로 이용하는 것이 큰 차이
    • 오류값 : 실제 값 - 예측 값
    • 경사 하강법 : 오류식을 최소화하는 방향성을 가지고 반복적으로 가중치 값을 업데이트하는 것

GBM 하이퍼 파라미터 및 튜닝

  • loss : 경사 하강법에서 사용할 비용 함수 지정. 특별한 이유가 없으면 디폴트 ‘deviance’ 그대로 적용
  • learning_rate : GBM이 학습을 진행할 때마다 적용하는 학습률. (weak learner가 순차적으로 오류 값을 보정해 나가는데 적용하는 계수) 0~1 사이의 값을 지정할 수 있으며, 기본값은 0.1.

    너무 작은 값 : 업데이트 되는 값이 작아져서 예측 성능이 높아지지만 수행 시간이 오래 걸리게 됨
    너무 큰 값 : 최소 오류 값을 찾지 못하고 지나쳐 버려 예측 성능이 떨어질 가능성이 높지만 빠른 수행이 가능하게 됨

    => learning_rate는 n_estimators와 상호 보완적으로 조합해 사용해야함

  • n_estimators : weak learner의 개수, weak learner가 순차적으로 오류를 보정하므로 개수가 많을수록 예측 성능이 일정 수준까지는 좋아지나, 수행 시간이 오래 걸리게 됨. (기본값은 100)
  • subsample : weak learner가 학습에 사용하는 데이터의 샘플링 비율 기본값은 1이며 이는 전체 학습 데이터를 기반으로 학습한다는 의미입니다. (과적합이 염려되는 경우 1보다 작은 값으로 설정)

4. XGBoost - eXtra Gradient Boost

XGBoost 개요

  • GBM에 기반하지만, GBM의 단점인 느린 수행 시간 및 과적합 규제 부재 등의 문제를 해결하기 때문에 매우 각광받고 있음

주요 장점

항목설명
뛰어난 예측 성능일반적으로 분류와 회귀 영역에서 뛰어난 예측 성능 보임
GBM 대비 빠른 수행시간일반적인 GBM은 순차적으로 Weak learner가 가중치를 증감하는 방법으로 학습하기 때문에 전반적으로 속도가 느림. 하지만 XGBoost는 병렬 수행 및 다양한 기능으로 보다 빠른 수행성능을 보장함. (단, GBM에 비해 빠르지만, 다른 ML 패키지보다 빠르다는 것은 아님)
과적합 규제표준 GBM의 경우 과적합 규제 기능이 없지만 XGBoost는 자체에 과적합 규제 기능으로 과적합에 좀 더 강한 내구성 가짐.
Tree pruning(나무 가지치기)더 이상 긍정 이득이 없는 분할을 가지치기 해서 분할 수를 더 줄이는 추가적인 장점을 가짐.
자체 내장된 교차 검증반복 수행시마다 내부적으로 학습 데이터 세트와 평가 데이터 세트에 대한 교차 검증을 수행 + 최적화시 중간에 멈출 수 있는 조기 중단 기능 존재
결손값 자체 처리XGBoost는 결손값을 자체적으로 처리할 수 있음

파이썬 래퍼 XGBoost 하이퍼 파라미터

  • 하이퍼 파라미터
    • 일반 파라미터 : 일반적으로 실행 시 스레드의 개수나 silent 모드 등의 선택을 위한 파라미터로서 디폴트 파라미터 값을 바꾸는 경우는 없음
    • 부스터 파라미터 : 트리 최적화, 부스팅, 규제 등 관련 파라미터 지칭
      • eta: GBM의 학습률과 같은 파라미터
        0과 1사이의 값을 지정하며 부스팅 스텝을 반복적으로 수행할 때 업데이트 되는 학습률 값, 디폴트 = 0.3
      • min_child_weight: 트리의 리프 노드를 추가적으로 나눌지를 결정할 최소 손실 감소 값. 해당 값보다
        큰 손실이 감소되면 리프노드 분리
      • sub_sample: 트리가 과적합 되는 것을 막기 위해 데이터를 샘플링하는 비율 지정한다.
      • colsample_bytree: 트리 생성에 필요한 피처를 임의로 샘플링 하는데 사용된다. 많은 피처가 있을 경우 과적합 조정에 적용
    • 학습 태스크 파라미터 : 학습 수행 시의 객체 함수, 평가를 위한 지표를 설정하는 파라미터
      • 대부분의 하이퍼 파라미터는 부스터 파라미터에 속함
  • 조기 중단 기능 : 일정 횟수를 반복하는 동안 학습 오류가 감소하지 않으면, 더 이상 부스팅을 진행하지 않고 종료
    • ex) early_stoppings이 50이면 50회를 반복하는 동안 더이상 학습 오류가 감소하지 않으면 더 이상 부스팅을 진행하지 않고 종료

5. LightGBM

  • XGBoost의 약점을 극복하기 위해 등장. → 학습 시간이 훨씬 적음
  • 일반 GBM 계열의 트리 분할 방법과 다르게, 리프 중심 트리 분할 방식을 사용하고 있음
    • 기존의 대부분 트리 기반 알고리즘은 트리의 깊이를 효과적으로 줄이기 위한 균형 트리 분할 방식 사용. 즉, 최대한 균형 잡힌 트리를 유지하면서 분할하기 때문에 트리의 깊이가 최소화될 수 있음. → 과적합에 더 강한 구조를 가질 수 있다고 알려져 있음
    • 트리 중심의 단점은, 균형을 맞추기 위한 시간이 필요함.
    • 리프 중심 방식은 트리의 균형을 맞추지 않고, 트리의 깊이가 깊어지고 비대칭적인 규칙 트리가 생성됨. → 학습을 반복할수록 균형 트리 분할 방식보다 예측 오류 손실을 최소화할 수 있음

LightGBM 하이퍼 파라미터

주요 파라미터

항목설명
num_iterations[default=100]반복 수행하려는 트리의 개수를 지정. 크게 지정할수록 예측 성능이 높아질 수 있으나, 너무 크게 지정하면 오히려 과적합으로 성능이 저하될 수 있음.
learning_rate[default=0.1]0에서 1사이의 값을 지정, 부스팅 스텝을 반복적으로 수행할 때 업데이트되는 학습률 값임. 일반적으로 n_estimators를 크게 하고 learning_rate를 작게 해서 예측 성능을 향상시킬 수 있으나, 마찬가지로 과적합 이슈와 학습 시간이 길어지는 부정적인 영향도 고려해야 함. GBM, XGBoost의 learning_rate와 같은 파라미터임.
max_depth[default=-1]트리 기반 알고리즘의 max_depth와 같다. 0보다 작은 값을 지정하면 깊이에 제한이 없다. 지금까지 소개한 Depth wise 방식의 트리와 다르게 LightGBM은 Leaf wise 기반이므로 깊이가 상대적으로 더 깊음.
min_data_in_leaf[default=20]결정 트리의 min_samples_leaf와 같은 파라미터이다. 하지만 사이킷런 래퍼 LightGBM 클래스인 LightGBMClassifier에서는 min_child_samples 파라미터로 이름이 변경된다. 최종 결정 클래스인 리프 노드가 되기 위해서 최소한으로 필요한 레코드 수이며, 과적합을 제어하기 위한 파라미터임.
num_leaves[default=31]하나의 트리가 가질 수 있는 최대 리프 개수임.
boosting[default=gbdt]부스팅의 트리를 생성하는 알고리즘을 기술함.
gbdt일반적인 그래디언트 부스팅 결정 트리
rf랜덤 포레스트
bagging_fraction[default=1.0]트리가 커져서 과적합되는 것을 제어하기 위해서 데이터를 샘플링하는 비율을 지정한다. 사이킷런의 GBM과 XGBClassifier의 subsample 파라미터와 동일하기에 사이킷런 래퍼 LightGBM인 LightGBMClassifier에서는 subsample로 동일하게 파라미터 이름이 변경됨.
feature_fraction[default=1.0]개별 트리를 학습할 때마다 무작위로 선택하는 feature의 비율이다. 과적합을 막기 위해 사용된다. GBM의 max_features와 유사하며, XGBClassifier의 colsample_bytree와 똑같으므로 LightGBM Classifier에서는 동일하게 colsample_bytree로 변경됨.
lambda_l2[default=0.0]L2 regulation 제어를 위한 값이다. feature 개수가 많을 경우 적용을 검토하며 값이 클수록 과적합 감소 효과가 있다. XGBClassifier의 reg_lambda와 동일하므로 LightGBMClassifier에서는 reg_lambda로 변경됨
lambda l1[default=0.0]L1 regulation 제어를 위한 값이다. L2와 마찬가지로 과적합 제어를 위한 것이며, XGBClassifier의 reg_alpha와 동일하므로 LightGBMClassifier에서는 reg_alpha로 변경됨.
profile
2023년은 나의 해

0개의 댓글