[실전머신러닝] 셋째마당: 트리 모델을 이용한 지도 학습

z00m__in·2023년 12월 25일
0
post-thumbnail

셋째마당 : 트리 모델을 이용한 지도 학습

  • 각 트리 모델 별로 특성을 구분하며 기억할 것
  • 성능 또한 우수하고 머신러닝 전반에 응용할 수 있는 다양한 영역을 학습 할 수 있는 장점이 있어 실무적으로도 적용이 잘 되는 모델임.

CHAP 06. 결정 트리 모델

사전 지식

그리디 알고리즘

  • 각 단계에서의 최선의 결정을 반복하며 얻게된 결과를 최선의 해답으로 가정
  • 전역 탐색 알고리즘 vs 지역 탐색 알고리즘 중 후자
    • 전역-“완전탐색” : 모든 경우의 수에 대한 무차별 탐색
    • 전역-“컨벡스 최적화” : 컨벡스 함수에 대한 경사 하강법 (극점이 1개)
  • 항상 전역 최적값을 보장할 수는 없지만, 최선의 해를 도출하는 알고리즘

트리 자료 구조

: 각 노드가 나뭇가지처럼 연결된 계층 자료 구조 (재귀적인 형태)

핵심 용어 > 루트, 부모, 자식, 형제, 리프, 내부, 깊이, 오더

  • 트리 자료 구조 구현
    • max depth에 대해 최대 노드 개수는 2maxdepth+112^{maxdepth+1}-1이므로,
      리스트 변수 tree에 대해 tree[ 2maxdepth+112^{maxdepth+1}-1 ] 까지 노드 부여

결정 트리 모델이란?

개념

  • 입력과 출력값의 관계를 트리 자료 구조 모양으로 모델링하는 지도 학습 기법
  • 각 샘플은 노드에서 피처에 대한 질문을 받으며, 질문의 대답에 해당하는 간선을 거쳐 다음 노드에 도착하기를 반복. 리프 노드에 도달하면 클래스 결정되는 구조.
  • 즉, 이진 질문을 여러 차례 반복하다 마지막 단계에서 해당 피처에 대한 출력값을 맞추는 문제를 학습하는 형태

특징

  • 트리가 깊어짐에 따라 학습 데이터에만 적합하도록 과도하게 불규칙한 패턴을 학습하며 과적합에 취약해질 수 있음
  • 편향은 낮으며 분산은 높음
  • 분류 문제를 푸는 “분류 트리”와 회귀 문제를 푸는 “회귀 트리”로 구분됨
  • 모델 구조가 직관적이고 결과를 해석하기 쉬움
  • 이후 구조인 랜덤 포레스트나 gbt 모델과도 연결됨

결정 트리 모델 구현하기

결정 트리 분류 모델의 이론

  • 그리디 알고리즘 중 TIDT 전략을 사용
    • 각 루트노드에서 분기 규칙에 따라 자식 노드로 분기하기를 노드의 정지 규칙에 도달할 때까지 반복하는 형태
  • 정지규칙의 예시
    : 한 가지 클래스로만 이루어져 학습이 불필요 / 남은 피처에 대한 출력값들이 모두 동일해 분할이 무의미 / 과도한 분할로 인한 과적합
  • 분기 규칙
    : 분할 이후 각 노드에서 종속 변수의 동질성이 최대화 되도록. → 동질성에 대한 정의는 분기 기준의 정의에 따름
  • 분기 기준 : 지니 불순도를 최소화하거나 정보 이득을 최대화 하는 분기법 중 하나로,
    • 지니 불순도를 최소화
      • 지니 불순도 : 클래스가 잘못 분류될 확률의 가중 평균
        개념적 ⇒ 클래스가 잘못 분류되지 않도록 하는 분기법
    • 정보 이득을 최대화
      • 수학적으로,
        분할 전의 엔트로피에서 분할 후의 엔트로피를 뺀 것
      • 개념적으로,
        모호성이 줄어들고 정보가 뚜렷해지도록 하는 분기법
      • 실제로 트리를 생성할 때는,
        남은 피처에 대해 분할할 시 발생할 정보 이득을 계산하고
        정보 이득이 그 중 최대인 피처를 이용해 노드를 분할

패키지로 표현하기

sklearn.tree.DecisionTreeClassifier 클래스 ⇒ CART 알고리즘을 구현

결정 트리 모델 보충 수업

회귀 트리

  • 최종적으로는 주어진 테스트 샘플 피처에 대한 목표 변수의 기댓값을 계산해 반환하는 형태
  • 분기에 따른 각각 두 자식 노드에서
    평균제곱오차(msa), 평균절대오차(mae) 등 연속변수에서의 흩어짐 정도를 계산하고
    이의 가중합을 구한 결과값을 최소화하는 로직
  • 회귀 트리에서의 다양한 분기 기준
    • MSE 기준에서의 비용함수
    • 푸아송 편차 절반 기준에서의 비용함수
    • MAE 기준에서의 비용함수

그리드 서치

  • 가장 직관적인 하이퍼파라미터 튜닝 기법
    • 하이퍼파라미터 튜닝
      : 데이터셋을 학습/검증/테스트 데이터로 분할한 뒤
      학습, 검증 데이터의 쌍을 이용해 여러 하이퍼파라미터 조합을 시도하며
      검증 데이터셋을 기준으로 가장 좋은 성능을 산출하는 하이퍼파라미터를
      최종 하이퍼파라미터로 선택
      = 즉, 최적의 하이퍼 파라미터를 조합을 찾는 방법
  • 가능한 모든 후보값의 조합을 탐색하며 그 중 최고의 성능을 산출하는 하이퍼파라미터 조합을 선택하는 방식

피처 중요도

: 피처별로 학습 모델 구축에 영향을 끼친 정도

CHAP07. 랜덤 포레스트 모델

사전 지식

부트스트래핑

  • 주어진 데이터가 모집단 그 자체라 가정하고 이를 이용한 다양한 시뮬레이션 샘플을 만들어내는 기법.
  • 모집단을 가정하므로, 데이터를 구성할 때는 복원 추출을 사용.
    → 복원 추출이란 꺼냈던 1개 표본(원소)을 다시 넣는 것을 의미하고, 결국 n'개로 이루어진 표본을 만든다는 뜻
  • 통계 검정 중 신뢰 구간을 추산할 때 자주 사용
  • 비교되는 “K-fold 교차검증법”
    • 모집단을 K개의 파티션으로 나누고, k-1개는 학습데이터로, 1개는 검증 데이터로.

앙상블 학습 기법

: 여러 개의 베이스 학습기를 준비해 학습을 수행하고, 그 학습 결과를 종합해 최종 결과를 예측하는 기법

  • 일반화 가능성이 높고 강건성이 있음
  • 사용되는 대표적인 종류는 “배깅”과 “부스팅”
  • 배깅
    • 데이터셋으로 수많은 부트스트랩 샘플을 생성해 각각 다수의 학습기를 만들어 병렬로 학습하고, 얻은 예측값들에 최종 연산을 해 최종 예측값을 산출
    • 베이스 학습기가 낮은 편향과 높은 분산을 보일 때 유용 (bcz 분산이 감소하는 효과)
    • 최대 깊이가 큰 결정트리, 다층 퍼셉트론(MLP), 서포트 벡터 머신(SVM), (KNN) 등의 베이스 학습기가 있음
    • 가장 대표적인 건 결정트리를 베이스 학습기로 구축한 “랜덤 포레스트”
  • 부스팅
    • 여러 베이스 학습기를 만들어 이들을 순차적으로 학습하는 직렬 앙상블 모델.
    • 각 학습기의 취약점을, 다음 베이스 학습기로 넘겨서 편향을 줄이는 것이 목표
    • 분산이 낮고 편향이 상대적으로 높은 베이스 학습기에 유용
    • 최대 깊이가 낮은 결정 트리, 로지스틱 회귀 모델, K가 큰 KNN 모델 등의 베이스 학습기
    • 가장 대적인 건 에이다부스, 그레이디언트 부스팅 트리 등

랜덤 포레스트 모델이란?

개념

  • 여러 개의 결정 트리를 학습하고 그 결과를 종합하는 앙상블 학습 모델 중 하나
  • 데이터 셋으로 부트 스트랩 샘플을 생성해 병렬로 학습하는 “배깅” 기법 사용
  • 주로 분류, 회귀의 지도 학습에 사용되며 비지도 학습에도 적용 가능
    • 분류 > 트리를 생성하는 과정에서, 예측 클래스 레이블을 투표한 후 최다 득표 레이블을 선택
    • 회귀 > ‘각 결정 트리 예측값의 평균’ 을 예측값으로 함

특징

  • (앙상블) 일반화 가능성은 우수하나 해석력이 떨어짐
  • 배깅을 사용해 모델의 편향을 증가시키지 않은 채로 분산을 감소시킴
  • 결정 트리의 과적합 문제를 줄일 수 있음
  • 일반적으로 결정 트리보다는 우수하고 GBT 보다는 떨어지는 성능을 가짐
  • 예측 결과에 대한 해석이 어려운 블랙 박스 모델

랜덤 포레스트 모델 구현하기

랜덤 포레스트 모델의 기본 이론

  • 학습 데이터를 다르게 샘플링 해 각각 깊은 결정 트리를 학습한 뒤,
    그 결과를 최종적으로 종합해 출력값을 계산하므로
    모델의 해석력은 줄지만 일반화 가능성은 결정 트리에 비해 매우 높음
  • 학습 알고리즘
    • 트리의 병렬 학습
      • 트리 개수는 일반적으로 수백에서 수천 개로 설정하며,
      • 교차검증법 등의 기법으로 최적값을 찾음
    • 피처 배깅
      • 피처를 랜덤 샘플링하는 것
      • 랜덤 포레스트에서 각각의 분기 규칙을 계산할 때 전체 피처의 무작위 부분 집합을 사용하는 것
      • 부트스트랩 샘플을 사용할 때의 발생할 수 있는 트리의 상관관계를 줄여줌
  • 시간 복잡도
  • 피처 배깅

패키지로 표현하기

  • sklearn.ensemble.RandomForestClassifier 클래스 사용
  • sklearn.tree.DecisionTreeClassifier 클래스의 하이퍼파라미터를 포함

랜덤 포레스트 모델 보충 수업

랜덤 포레스트 회귀 모델

  • sklearn.ensemble.RandomForestRegressor 클래스 사용
    → DecisionTreeRegressor의 확장

OOB 점수

  • 복원추출을 통해 선택되지 않고 버려지는 데이터들을 이용해,
    모델 성능을 검증하는 작업을 트리별로 반복하며
    별도의 테스트 데이터셋 없이 모델의 성능 파악한 점수

ExtraTrees

  • 랜덤 포레스트처럼 개별 결정 트리의 앙상블을 형성하는 형태이나,
    각 트리가 부트스트랩 샘플이 아닌 전체 샘플을 이용해 학습하며,
    하향식 방식의 분기를 학습하는 과정이 랜덤화 된 모델
  • 대상 피처의 동질성을 모두 비교한 후 지역 최적값을 계산하는 방식으로 분기 결정

피처 중요도

  • 피처별로 목표 변수의 예측에 기여한 중요도를 계산한 값으로, 여러 정의가 존재
  • MDI 기반
    • 트리 기반 모델에서 불순도를 이용하여 정의하는 피처 중요도 기법
    • 자식 노드로 분기될 때 동질성은 늘어나게 되는데,
      이 때의 동질성의 증가 크기에 따라 피처 중요도가 정의됨
      ⇒ 동질성을 크게 증가시키는 피처가 중요한 피처
    • 학습 데이터셋 기준 중요도 산출 방법
  • 퍼뮤테이션 기반
    • 모델에 검증 데이터를 투입해 성능을 먼저 계산하고,
      특정 피처의 값만 무작위로 바꾼 뒤 다시 성능을 계산한 뒤
      두 성능의 차이가 해당 피처의 중요도를 나타내는 것
    • 검증 데이터셋 기준 중요도 산출 방법

CHAP08. 그레이디언트 부스팅 트리(GBT) 모델

사전 지식

부스팅 기법 중 GBT는,
에이다부스트 이후의 모델이면서
XGBoost와 LightGBM보다는 이전 모델

에이다부스트 모델 이론

  • 앞쪽 모델에서 틀린 샘플의 추출 확률을 높임으로써,
    앞 단계의 모델이 잘 풀지 못하는 어려운 케이스에 집중한다는 차이점
  • 한 모델이 끝난 후에 그 모델의 성능을 바탕으로 다음 모델을 구축해야 하므로 병렬 학습이 불가능.
  • 매 단계의 학습 트리는 매우 약한 학습기로 구성됨
  • sklearn.ensemble 모듈의 AdaBoostClassifier, AdaBoostRegressor 클래스로 각각 분류 모델과 회귀 모델 구현
  • 에이다부스트 알고리즘

그레이디언트 부스팅 트리 모델이란?

개념

  • 부스팅 기법 중 하나인 GBM(Gradient Boosting Machine)을 결정트리에 적용한 앙상블 모델
  • 회귀와 분류 문제 모두에 적용할 수 있으며 높은 성능을 보임
  • 단계별로 샘플의 가중치를 조절하는 에이다부스트와 달리,
    이전 단계에서 학습하지 못한 잔차를 새로운 목표 변수로 두고 학습
    - 잔차 : 적합선과 샘플 사이의 오차

GBT 모델의 아이디어

  • 첫 번째 : yh1(x)y \leftarrow h_1(x)
  • 두 번째 : yh1(x)h2(x)y-h_1(x) \leftarrow h_2(x)
  • 세 번째 : yh1(x)h2(x)h3(x)y-h_1(x)-h_2(x) \leftarrow h_3(x)
  • M 번째 : ym=1M1hm(x)hM(x)y-\sum_{m=1}^{M-1}h_m(x) \leftarrow h_M(x)
  • 최종 : y^=m=1Mhm(x)\hat{y}=\sum_{m=1}^{M}h_m(x)

그레이디언트 부스팅 트리 모델 구현하기

GBT 의 이론

  • GBT 회귀 모델
    • GBT는 기본적으로 직렬로 학습하는 가산 모델
    • GBT가 연속적인 손실함수를 최소화하는 방식으로 업데이트
    • 다양한 형태의 손실 함수
      • 제곱 오차 손실
      • 절대 오차 손실
      • Huber 손실
      • 분위수 손실
  • GBT 분류 모델
    • 예측값을 클래스 또는 클래스의 확률값으로 변환하는 과정을 추가로 진행
    • 어떤 손실 함수를 선택하느냐에 따라 변환 방법이 달라짐

부스팅 트리 회귀 모델 구현하기

패키지로 표현하기

  • sklearn.ensemble 모듈의 GradientBoostingClassifier, GradientBoostingRegressor 클래스로 각각 GBT 분류 모델과 GBT 회귀 모델을 구현
  • 랜덤포레스트에서는 분류 모델이 결정트리Classifier, 회귀 모델이 Regressor클래스 기반으로 구현되었지만
  • GBT 분류와 회귀는 모두 DecissionTreeRegressor 클래스를 기반으로 함
    ⇒ GBT 회귀 모델이 가장 기본적인 구현법

그레이디언트 부스팅 트리 모델 보충 수업

설명 가능 인공지능(XAI)

  • 실제 실무에서는 해석력이 중요하기 때문에, 같은 성능이라면 해석력이 높은 화이트 박스 모델을 선호하는 경향
  • 성능과 해석력을 모두 높이고자 제안된 XAI
    ⇒ 이미 학습한 모델을 사후에 분석하여 예측값 계산 근거를 제공하는 메커니즘

GBT 모델 이후의 부스팅 기법

  • XGBoost
    • GBT에 병렬처리, 하드웨어 최적화, 과적합 규제 패널티 등의 여러 개념을 도입해 최적화한 모델
    • 한 결정 트리를 학습할 때,
      데이터셋을 수많은 서브데이터의 구획으로 분할한 뒤,
      그 서브데이터 내에서의 최적값을 각 병렬환경에서 찾는 방식
    • 근사법이기 때문에 편향성은 다소 증가하되 시간 복잡도는 낮아짐
  • LightGBM
    • XGBoost의 장점은 계승하고 단점은 보완하는 방식으로 개발
    • GOSS, EFB 등의 방식의 사용으로, 학습에 걸리는 시간과 메모리 사용량이 줄었으며 다양한 기능이 추가로 구현된 가벼운 GBT 모델을 제공
profile
우당탕탕 기록지

0개의 댓글