[XGBoost Study] Ch2. 결정 트리

Smiling Sammy·2022년 9월 13일
0

xgboost-study

목록 보기
2/7

출처: 코리 웨이드.(2022). XGBoost와 사이킷런을 활용한 그레이디언트 부스팅. 서울:한빛미디어

결정 트리

  • 특성에 대한 질문에 따라 데이터를 분류함 (like 스무고개)
    • branch(가지)의 분할을 통해 데이터를 두 개의 node로 나눔
    • 가지분할은 leaf node를 만들 때까지 진행
      • 리프 노드: 최종 예측이 결정됨, 다수인 클래스가 예측 클래스가 됨
  • 샘플을 타켓에 매핑할 때까지 수천 개의 그룹을 만들 수 있음
    -> 과대적합이 발생하기 쉬움
    -> 하이퍼파라미터 튜닝 or 많은 트리의 예측을 모으는 것으로 해결
  • libary: sklearn.tree DecisionTreeClassifier / DecisionTreeRegressor
  • gini impurity (지니 불순도)
    • 결정 트리가 어떻게 분할할지 결정하는데 사용
    • 불순도 값이 낮은 분할을 찾는 것이 목표
    • 불순도가 0이면 하나의 클래스로만 이루어짐, 0.5면 클래스간 샘플 개수가 동일
    • pip_i : 전체 샘플 중 해당 클래스 샘플의 비율
    • cc : 클래스 총 개수
      gini=1i=1cpi2gini = 1 - \sum^c_{i=1}{p_i}^2
  • 스텀프(stump): 딱 한번만 분할된 트리
    • 자체적으로 강력한 모델은 아니지만 booster로 사용 시, 강력해질 수 있음

분산, 편향

  • 편향: 정답과 다른 정도 (오차)
    • 편향이 낮을수록 정답에 가까움
    • 편향이 높은 경우 -> 과소적합
  • 분산: 값이 퍼져있는 정도
    • 모델의 예측값이 변하는 정도를 의미 (예측값들이 모여있는지 듬성듬성 있는지 등)
      • 직선 -> 분산 낮음
      • 많이 구불구불한 곡선 -> 분산 높음
    • 분산이 높은 모델 -> 과대적합

하이퍼파라미터

  • 파라미터: 모델이 튜닝될 때 조정됨 (ex. 가중치)
  • 하이퍼파라미터: 미리 선택됨
    • 개별적으로 선택해서는 안됨 (다양한 조합을 고려해야됨)
  • GridSearchCV: K-Fold 교차 검증을 사용하여 최선의 결과를 만드는 매개변수 조합을 찾음
    • 일반적으로 max 이름을 가진 매개변수를 감소, min 이름을 가진 매개변수를 증가시키면 분산을 줄이고 과대적합을 방지함
    • cv: 폴드 개수 지정, default 5
    • refit: 최적의 매개변수로 모델을 훈련할 것인지 여부, default True
    • n_jobs: 사용할 CPU 개수 ,default 1
      • 1보다 크게 지정 시, 여러 개의 CPU 프로세서를 사용해 병렬로 모델 훈련
      • -1로 지정 시, 모든 프로세서 사용

종류

  • max_depth: 트리의 깊이(=분할 횟수)를 정의, default None
  • min_samples_leaf: 리프 노드가 가질 수 있는 최소 샘플의 개수를 제한함, default 1
  • max_leaf_nodes: 리프 노드의 전체 개수를 지정, default None
  • max_features: 선택할 특성의 최대 개수, default None (=auto, 전체 사용)
    • 랜덤포레스트에서 중요하게 사용됨
    • max_features 값을 크게 하면 트리들이 매우 비슷해지고 가장 두드러진 특성을 이용해 데이터에 잘 맞춰짐
    • max_features 값을 낮게 하면 트리들은 많이 달라지고 각 트리의 깊이가 깊어짐
  • min_samples_split: 분할하기 위해 필요한 최소 샘플 개수를 제한, default 2
  • splitter: 노드를 분할하기 위한 특성 선택 방법, default best
    • best: 정보 이득이 가장 큰 특성을 선택
    • random: 랜덤하게 노드를 분할 -> 과대적합 막을 수 있음
  • criterion: 분할 품질을 측정할 수 있는 방법 제공
    • regressor: squared_error, friedman_mse, absolute_error, poisson
    • classifier: gini, entropy
  • min_impurity_decrease: 분할하기 위한 최소 불순도 감소 임계값을 지정, default 0
    • 임계값 이상으로 감소하면 node가 분리됨
  • min_weight_fraction_leaf: 리프 노드가 되기 위한 전체 가중치의 최소 비율, default 0
    • 500개 샘플이 있고 가중치가 동일할 때, 매개변수를 0.01로 지정 시 리프노드가 되기 위한 최소 샘플 개수는 5
  • ccp_alpha: 트리를 만든 후, pruning(가지치기)하는 기능

튜닝 고려 사항

  • 고려사항: 소요 시간, 하이퍼파라미터 개수, 정확도
  • 경험적으로 max_depth, max_features, min_samples_leaf, max_leaf_nodes, min_impurity_decrease, min_samples_split만 사용해도 충분함
  • RandomizedSearchCV 사용 시, scipy의 randint, uniform or sklearn loguniform 활용
    • 매개변수 값이 연속적이고 임의의 간격을 지정하기 어려울 때 도움이됨

성능 향상 전략

  1. 매개변수 범위를 좁히는 것
    • 최상위 모델에서 max_depth=5를 얻었다면, 탐색 범위를 4~6으로 줄일 수 있음
  2. 기본값이 잘 동작하는 매개변수를 탐색에서 제외시키는 것

특성 중요도

  • feature_importances_를 주로 사용
  • permutation_importance()
    • 전달된 특성 값을 사용하여 모델을 훈련하고 타깃을 사용해서 모델 점수를 계산함
    • 그 후 특성 하나를 랜덤하게 섞은 후, 모델을 훈련하여 성능을 비교함
    • 분류 모델은 정확도, 회귀 모델은 R2R^2로 성능 평가
    • sklearn.inspection function

참고

profile
Data Scientist, Data Analyst

0개의 댓글