XGBoost 파라미터들

highway92·2022년 1월 18일
1

머신러닝

목록 보기
2/5

1. XGBoost(Extreme Gradient Boosting)

XGBoost는 앙상블 부스팅 기법의 한 종류이며 이전 모델에서의 loss를 gradient descent를 이용하여 보완해나가는 방식으로 개선(?)된다.

주로 이런 순서로 사용한다.

# 1. 임포트 하기
from xgboost import XGBClassifier

# 2. 객체 생성하기
model = XGBClassifier(여러가지 파라미터~)

xgb_model = model.fit(X_train, y_train, early_stopping_rounds = 200, eval_metric = 'logloss', eval_set = [(X_test, y_test)])

# 3. predict 진행
pred = xgb_model.predict(X_test)
pred_proba = xgb_model.predict_proba(X_test)[:,1]

# 4. 특성 중요도 시각화
fig, ax = plt.subplots(figsize = (10, 12))
plot_importance(xgb_model, ax=ax)

2. 파라미터

General parameters(일반 설정들)

  • booster[default = 'gbtree'] : 어떤 종류의 부스트를 쓸껀지
    gbtree : 트리 기반 모델
    gblinear : 선형 모델
  • silent[default = 0]
    0: 동작 메세지 프린트 함
    1: 동작 메세지 프린트 안함

Booster parameters(모델 파라미터)

  1. n_estimators[default=100] : 트리 모델의 갯수 라고 생각하면 된다.

  2. early_stopping_rounds : 최대한 몇 개의 트리를 완성할 것인지 valid loss에 더이상 진전이 없다면 멈춘다. n_estimators가 높을 때 주로 사용하며 과적합을 방지해준다.

  3. learning_rate[default=0.1] : 학습 단계별로 이전 결과를 얼마나 반영할지 설정한다.
    일반적으로는 0.01 ~ 0.2 사이의 값을 쓰며 너무 작게 하면 시간이 더 오래 걸리게 된다.

  4. min_child_weight[default=1] :
    child 에서 필요한 모든 관측치에 대한 가중치의 최소합
    이 값보다 샘플 수가 작으면 leaf node가 된다. 너무 크게 설정하면 Under-fitting 될 수 있다.

  5. max_depth[default=6] :
    트리의 최대 깊이를 뜻하며 일반적으로 3~10의 값으로 한다.

  6. gamma[default=0] : 트리에서 추가적으로 가지를 나눌지 말지 결정하는 최소 손실 감소 값
    값을 크게 설정할 수록 과적합이 감소하는 효과가 있다.

  7. subsample[default=1] : 각 트리마다 데이터 샘플링 비율 over-fitting방지
    일반적으로 0.5 ~ 1을 사용

  8. colsample_bytree[default=1] : 각 트리마다 feature 샘플링 비율
    일반적으로 0.5 ~ 1을 사용한다.

  9. reg_lambda [default=1] : L2 규제(Ridge)

  10. reg_alpha [default=0] : L1 규제(Lasso)

  11. scale_pos_weight[default = 1] : 데이터가 불균형 할때 사용
    보통은 음성 데이터 수 / 양성 데이터 수 값으로 한다.

Learning Task parameters

  1. objective[default=reg:linear]
  • binary:logistic : 이진분류를 위한 로지스틱 회귀, 클래스가 아닌 예측 확률 반환
  • multi:softmax : softmax를 사용한 다중 클래스 분류, 클래스 반환
  • multi:softprob : softmax를 사용, 클래스에 대한 예상 확률 반환
  1. eval_metric[목적함수에 따라 default가 다름 회귀-rmse/ 분류-error]
  • rmse : Root Mean Square Error
  • mae : Mean Absolute error
  • logloss : Negative log-likelihood
  • error : Binary classification error rate(임계값 0.5)
  • merror : multiclass classification error rate
  • mlogloss : multiclass logloss
  • auc : area under curve
  1. seed[default=0]
    시드값 고정(나중에 재현 할때 같은 값을 출력하기 위해서 사용함)

3. GridSearchCV

데이터가 너무 많아서 GridSearchCV를 돌리는데 시간이 너무 오래 걸린다면 우선 트리 수를 줄이고, 기본적인 파라미터 튜닝만을 한 이후에 데이터를 모두 넣어 train시키는 것이 일반적이라 한다.


from xgboost import XGBClassifier
from sklearn.model_selection import GridSearchCV

xgb_model = XGBClassifier(n_estimators=100)

# 후보 파라미터 선정
params = {'max_depth':[5,7], 'min_child_weight':[1,3], 'colsample_bytree':[0.5,0.75]}

# gridsearchcv 객체 정보 입력(어떤 모델, 파라미터 후보, 교차검증 몇 번)
gridcv = GridSearchCV(xgb_model, param_grid=params, cv=3)

# 파라미터 튜닝 시작
gridcv.fit(X_train, y_train, early_stopping_rounds=30, eval_metric='auc', eval_set=[(X_val, y_val)])

#튜닝된 파라미터 출력
print(gridcv.best_params_)

# 1차적으로 튜닝된 파라미터를 가지고 객체 생성
xgb_model = XGBClassifier(n_estimators=1000, learning_rate=0.02, max_depth=7, min_child_weight=1, colsample_bytree=0.75, reg_alpha=0.03)

# 학습
xgb_model.fit(X_train, y_train, early_stopping_rounds=200, eval_metric='auc', eval_set=[(X_val, y_val)])
profile
웹 개발자로 활동하고 있습니다.

0개의 댓글