본문 바로가기

Dacon 파이썬 프로젝트

1118 Lv 4-2. 교차검증과 모델 앙상블을 활용한 와인 품질 분류하기

Lv 4. 교차검증과 모델 앙상블을 활용한 와인 품질 분류하기

3. 모델링

(1) 파이썬 XGBoost 개념

  XGBoost (Extreme Gradient Boosting)
  : Boosting 기법을 이용하여 구현한 Gradient Boost 알고리즘이 병렬학습이 지원되도록 구현한 라이브러리

  *Boosting : 여러개의 성능이 높지 않은 모델을 조합해서 사용하는 앙상블 기법
              -> 성능이 낮은 예측 모형들의 학습 에러에 가중치를 두고,
                순차적으로 다음 학습 모델에 반영하여 강한 예측모형 만듬

  XGBoost의 장점
   1. 기존 boosting 모델 대비 빠른 수행시간(병렬 처리)
   2. 과적합 규제 지원(Regression)
   3. 분류와 회귀 tast 에서 높은 예측 성능
   4. Early Stopping(조기 종료) 기능 제공
   5. 다양한 옵션을 제공해 Customizing 용이
   6. 결측치를 내부적으로 처리 함.

(2) 파이썬 XGBoost 실습

    XGBoost 를 이용한 와인 품질 분류 실습

    [실습 코드]

(3) 파이썬 LGBM 개념

   LightGBM : xgboost의 낮은 속도를 보완한 라이브러리
   -> 기존의 gradient boosting 알고리즘과 다르게 동작
      leaf wise(리프 중심) 트리 분할 사용 -> 속도가 빠름
      큰 사이즈의 데이터를 다룰 수 있고, 실행 시 적은 메모리를 차지 함.

  장점 
    1. 대용량 데이터 처리
    2. 효율적인 메모리 사용
    3. 빠른 속도
    4. GPU 지원

  단점 
    1. Leaf-wise growh로 과적합의 우려가 다른 트리 알고리즘 대비 높음
    -> 데이터 양이 적을 수록 과적합에 취약해 사용 자제 권고

(4) 파이썬 LGBM 실습

  Light GBM 이용한 와인 품질 분류 

  [실습 코드]

(5) 파이썬 stratified k-fold 정의

  k-fold 교차검증 : 학습 데이터 셋을 학습 데이터와 검증 데이터로 나눠 반복해서 검증, 평가하는 것 
 -> 데이터 셋을 일정한 간격으로 잘라 사용하기 때문에 target 비율이 일정하지 않게 test셋에 들어가는 문제 발생

 Stratified k-fold
 : k-fold의 문제점인 target 데이터의 비율을 일정하기 유지하기 위해 교차 검증을 진행하는 것

 from sklearn.model_selection import StratifiedKFold

 skf = StratifiedKFold(n_splits=5)

 for train_idx, valid_idx in skf.split(x,y):

  #인덱스 이용해 학습 데이터 셋과 검증 데이터 셋으로 나눔
  train_df = train.iloc[train_idx]
  valid_df = train.iloc[valid_idx]

(6) 파이썬 stratified k-fold 실습

  [실습 코드]

(7) 파이썬 Voting Classifier 정의

  Voting Classifier: 여러개 모델을 결합하여 더 좋은 예측 결과를 도출하는 앙상블 기법

  1. Hard Voting(Majority Voting) : 각각의 모델들이 결과를 예측하면 각 모델의 예측을 모아 다수결 투표로 최종 예측결과 선정

  2. Soft Voting(Probablity Voting) : 각 모델들이 예측한 결과 값의 확률을 합산해 최종 예측결과 선정
    -> 단순히 개별 분류기의 예측결과만 고려하지 않고 높은 확률값을 반환하는 모델의 비중을 고려할 수 있기 때문에 Hard Voting 보다 성능이 좋음

(8) 파이썬 Voting Classifier 실습

  Soft Voting 을 사용한 Voting Classfier 실습

  from sklearn.ensemble import VotingClassifier
  VC = VotingClassifier(estimators=[('rf',RF),('xgb',XGB),('lgbm',LGBM)], voting='soft')

  [실습 코드]

4. 튜닝

(1) 파이썬 Bayesian Optimization 복습

  Bayesian Optimization 
  : 사전지식(실험 결과)를 반영해가며 하이퍼파라미터를 탐색 함
   -> 현재까지 얻어진 모델의 파라미터와 추가적인 실험 정보를 통해 
      데이터가 주어 졌을 때 모델의 성능이 가장 좋을 확률이 높은 파라미터 찾아냄. 

  1. 변경할 하이퍼파라미터의 범위 설정한다.
  2. Bayesian Optimization 패키지를 통해 하이퍼 파라미터의 범위 속 값들을 랜덤하게 가져옴.
  3. 처음 R번은 정말 Random하게 좌표를 꺼내 성능 확인
  4. B번은 Bayesian Optimization을 통해 B번 만큼 최적의 값을 찾음.

(2) 파이썬 Bayesian Optimization 실습

  1. 변경할 하이퍼 파라미터의 범위 설정
  2. Bayesian Optimization에 필요한 함수 생성
  3. Bayesian Optimization를 이용해 하이퍼 파라미터 튜닝

  [실습 코드]


(3) 파이썬 XGBoost 튜닝

  XGBoost 하이퍼 파라미터 

  -> XGBoost 파라미터 중 과적합을 방지하는 gamma, max_depth, subsample 3가지 파라미터를 튜닝 

  [실습 코드]


(4) 파이썬 Light GBM 튜닝

  Light GBM 하이퍼 파라미터

  -> Light GBM 하이퍼 파라미터 중 n_estimators, max_depth, subsample
     3가지 파라미터를 튜닝

  [실습 코드]

(5) 파이썬 모델 튜닝 / Voting Classifier

  Random Forest, XGBoost, Light GBM 총 3개의 모델을 튜닝하고
  Voting Classfier로 만들기

  1. 개별 모델을 basian optimization으로 튜닝
  2. 튜닝 된 모델을 Voting Classifier로 생성
  3. Voting Classifier 학습 및 test 데이터 예측
  4. 최종 정답 파일 제출

  [실습 코드]






출처 : https://dacon.io/competitions/open/235698/talkboard/403458?page=1&dtype=recent