-
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