ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20221123 = 강의자료정리 (Boosting)
    PYTHON 2022. 11. 23. 16:51

    개념정리

    Boosting
    
    부스팅 기법은 여러 얕은 트리를 연결하며 편향과 분산을 줄여 트리를 생성하는 기법.
    이전 트리에 틀렸던 부분에 가중치를 주며 지속적으로 학습을 반복함.

    출처 : 멋쟁이사자처럼 AI 7기 강의자료

     

    GBM (Gradient Boosting Machine)
    
    → 회귀 또는 분류 분석을 수행할 수 있는 예측모형
    → 앙상블 방법론 중 부스팅 계열에 속하는 알고리즘
    → GBM은 계산량이 상당히 많이 필요한 알고리즘이기에, 하드웨어를 효율적으로 구현하는 것이 필요
    Gradient Boosting Tree의 특징
    
    1. 무작위성이 없다
    2. 매개변수를 잘 조정해야 하고 훈련시간이 길다
    3. 데이터의 스케일에 구애받지 않는다
    4. 고차원의 희소한 데이터에 잘 작동하지 않는다.
    Gradient Boosting Tree의 주요 파라미터
    
    → loss = 최적화시킬 손실 함수
    → learning_rate = 각 트리의 기여도를 제한하는 파라미터
    → n_estimators = 부스팅 단계를 지정하는 파라미터
    → subsample = 개별 기본 학습자를 맞추는데 사용할 샘플의 비율
    XGBoost
    
    → 정규화 그래디언트 부스팅 프레임워크를 제공하는 오픈소스 소프트웨어 라이브러리
    → XGBoost는 GBT에서 병렬 학습을 지원하여 학습 속도가 빨라진 모델
    → 기본 GBT에 비해 더 효율적이고, 다양한 종류의 데이터에 대응할 수 있다.
    
    XGBoost의 장점
    
    → GBM 대비 빠른 수행시간 (병렬처리)
    → 과적합 규제
    → Early Stopping 조기종료 기능
    
    XGBoost의 단점
    
    → 학습시간이 느림
    → Hyper parameter 수가 많아 튜닝을 하게되면 시간이 오래걸림
    → 모델의 Overfitting
    XGBoost 주요 매개변수
    
    → learning_rate (기본값 : 0.3) = rate가 높을수록 과적합되기 쉬움
    → n_estimators (기본값 : 100) = 생성할 weaker learner 수
      learning_rate가 낮을 때, n_estimators를 높여야 과적합이 방지됨
    → max_depth (기본값 : 6) = 트리의 maximum depth
    → min_child_weight (기본값 : 1) = 관측치에 대한 가중치 합의 최소를 의미
    → gamma (기본값 : 0) = 리프노드의 추가분할을 결정할 최소손실 감소값
    → subsample (기본값 : 1) = weak learner가 학습에 사용하는 데이터 샘플링 비율
    → colsample_bytree (기본값 : 1) = 각 tree별 사용된 feature의 퍼센테이지
    
    XGBoost 일반 파라미터
    
    → booster (기본값 : gbtree) = 어떤 부스터 구조를 쓸지 결정
    → n_jobs = XGBoost를 실행하는 데 사용되는 병렬 스레드 수
    
    XGBoost 과적합 방지를 위해 조정해야하는 변수
    
    → n_estimators 높이기
    → learning_rate 낮추기
    → max_depth 낮추기
    → min_child_weight 높이기
    → gamma 높이기
    → subsample, colsample_bytree 낮추기
    lightgbm
    
    → Light Gradient Boosting Machine의 약자, Microsoft에서 개발한 머신러닝을 위한 오픈소스
      분산 그래디언트 부스팅 프레임워크.
    → 결정트리 알고리즘을 기반으로 하고, 순위지정, 분류 및 기타 머신러닝 작업에 사용
    → 개발 초점은 성능과 확장성이다.
    → 균형을 맞추지 않고 최대손실 값을 가지는 리프 노드를 지속적으로 분할하여 트리가 깊어지고
      비대칭적인 트리 구조 생성하여 예측 오류 손실을 최소화함
    CatBoost
    
    → Yandex에서 개발한 오픈소스 소프트웨어 라이브러리
    → 기존 알고리즘과 비교하여 순열 기반 대안을 사용하여 범주형 기능을 해결하려고 시도하는
      그래디언트 부스팅 프레임워크를 제공
    
    CatBoost의 장점
    
    → 범주형 기능에 대한 기본처리
    → 빠른 GPU 훈련
    → 모델 및 기능 분석을 위한 시각화 및 도구
    → 과적합을 극복하기 위해 순서가 있는 부스팅 사용
    
    CatBoost의 단점
    
    → CatBoost는 희소행렬을 지원하지 않음
    → 수치형 타입이 많을 경우 LightGBM보다 훈련하는데 상대적으로 시간이 더 소요됨
    GBM 계열의 트리 분할 방식
    
    → 일반적인 GBM 계열의 트리 분할 방식은 균형 트리 분할방식을 이용
    장점 : 최대한 균형잡힌 트리를 생성하며, 트리의 깊이를 최소화할 수 있음
    단점 : 과적합 문제에 더 강한 구조를 갖게 되지만 균형을 맞추기 위한 시간이 필요하다

    ============================================================================================

    실습

    OneHotEncoder 사용하기
    
    from sklearn.preprocessing import OneHotEncoder
    
    ohe = OneHotEncoder(handle_unknown="ignore")
    
    train_ohe = ohe.fit_transform(train.drop(columns="y"))
    test_ohe = ohe.transform(test)
    
    # 위 코드를 사용하여 OneHotEncoder를 할 수 있으며, 
    # fit_transform을 이용하여 train을, transform을 이용하여 test를 각각 나눌 수 있음
    train_test_split 사용하여 X, y를 나누기
    
    from sklearn.model_selection import train_test_split
    
    X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.1, random_state=42)
    
    # train_test_split를 이용하여 X, y 의 valid를 나눠줄 수 있고, test_size으로
    # train과 test의 비율을 조정할 수 있음
    XGBoost 사용해보기
    
    import xgboost as xgb
    
    xgb.XGBRegressor(random_state=42, n_jobs=-1)
    
    # 위 코드로 import 할 수 있으며, XGBRegressor로 불러올 수 있음
    fit 시키기
    
    model.fit(X_train, y_train)
    
    # X_train, y_train을 각 모델에 맞게 fit(학습) 시켜줌
    feature_importances_ 확인하기
    
    model.feature_importances_
    
    # 각 모델에 맞게 fit한 데이터를 각 피쳐의 중요도를 확인할 수 있음
    Lightgbm 사용해보기
    
    import lightgbm
    
    # 위 코드로 lightgbm을 실행시킬 수 있음
    CatBoost 사용해보기
    
    import catboost
    
    # 위 코드로 catboost 라이브러리를 불러온다
    # catboost에는 다양한 변수가 있으므로 꼭 살펴보기
    # https://catboost.ai/en/docs/references/training-parameters/common#grow_policy

     

    출처 : 멋쟁이사자처럼 AI 7기 강의자료

    'PYTHON' 카테고리의 다른 글

    20221128 = 분류 측정지표  (0) 2022.11.28
    20221124 = Recall & Precision  (0) 2022.11.24
    20221122-1 = Neural Network  (1) 2022.11.22
    20221122 = PCA, Clustering  (1) 2022.11.22
    20221121-1 = Classification, DecisionTree 개념복습  (0) 2022.11.21
Designed by Tistory.