본문 바로가기

Codestates AI 부트캠프/2. Machine Learning

[머신러닝] 2-2 Boosting

1. Bagging과 Boosting

앞서 배운 RandomForest 모델에서는 앙상블 기법 중 하나인 Bagging을 이용한다. Bagging은 샘플 데이터를 무작위로 뽑아 각각의 모델이 독립적으로 학습한다. 독립적인 모델들이 내놓은 결과를 토대로 최종 결과를 낸다. 

 

하지만 Boosting은 앞서 학습한 모델의 영향을 받는다. 이전 모델의 오류를 고려하여 다음 모델을 학습시키는 것이다.  그래서 앞서 학습된 모델보다 발전적인 방향을 학습을 할 수 있으나 갈수록 복잡도가 상승하고 과소적합이 해소된다. 

 


1. XGBoost 

 

A. 모델 생성 및 학습

 

from xgboost import XGBClassifier


xgb = XGBClassifier(
objective = 'binary:logistic', # 이진 분류 문제일 경우
# 다중 분류일 경우 'reg:logistic' 입력
# 회귀 문제일 경우에는 'reg:squarederror'를 입력해준다
# 이 외에도 다양한 objective가 있다

eval_metric = 'error', # 검증 방법을 설정할 수 있다
n_estimator=200,
n_jobs=-1,
max_depth=7,
learning_rate=0.1
)

xgb.fit(X_train, y_train)

 

n_estimator는 몇번의 학습을 할지 정하는 하이퍼파라미터다. 앞선 학습의 오차를 분석해 개선해나가는 xgboost의 특성상 n_estimator가 너무 크면 과적합이 올 수 있다. 그래서 early_stopping을 이용해 적정한 학습 횟수를 알아내야 한다.

# 인코딩
encoder = OrdinalEncoder()
X_train_encoded = encoder.fit_transform(X_train)  # 학습데이터
X_val_encoded = encoder.transform(X_val)  # 검증데이터

# 모델 생성
model = XGBClassifier(
    objective="binary:logistic",
    eval_metric="error",  # error = 1 - accuracy 지표를 사용해 평가합니다.
    n_estimators=987654321,  # 매우 큰 값으로 설정했지만, 성능 향상이 없으면 자동으로 종료합니다.
    random_state=42,
    n_jobs=-1,
    max_depth=7,
    learning_rate=0.1,
    reg_lambda=1,
)

# 검증할 데이터셋 지정
watchlist = [(X_train_encoded, y_train), (X_val_encoded, y_val)]

# 학습 및 early_stopping 수행
model.fit(
    X_train_encoded,
    y_train,
    eval_set=watchlist,
    early_stopping_rounds=50,  # 50 rounds 동안 성능 개선이 없으면 학습을 중지합니다.
)

 

 

B. 주요 하이퍼파라미터

  • n_estimators
  • learning_rate
  • max_depth : 트리들의 최대 깊이 결정. 모델의 성능에 가장 큰 영향을 주는 변수
  • min_child_weight : leaf 노드에 포함되는 관측치의 수. 값이 커질수록 복잡도 감소. 과적합 발생시 1,2,4,8 등 값을 2배씩 늘려 성능 확인
  • subsample : 0~1의 범위를 가진다. 일반화 성능을 올리기 위해 전체 데이터 중 일부 샘플링하여 학
  • colsample_bytree : 전체 column 중 일부를 샘플링하여 학습
  • scale_pos_weight