앙상블 방법
-배깅: 같은 알고리즘으로 여러 모델을 만들어 분류함(랜덤포레스트)
-부스팅: 학습과 예측을 하면서 가중치 반영 (xgboost)
XGBoost 모델 더 알아보기
트리 앙상블 중 성능이 좋은 알고리즘
eXtreme Gradient Boosting를 줄여서 XGBoost라고 한다.
약한 학습기가 계속해서 업데이트를 하며 좋은 모델을 만들어 간다.
부스팅(앙상블) 기반의 알고리즘
캐글(글로벌 AI 경진대회)에서 뛰어난 성능을 보이면서 인기가 높아짐
# xgboost
from xgboost import XGBClassifier
model = XGBClassifier(random_state=0, use_label_encoder=False, eval_metric='logloss')
model.fit(X_train, y_train)
pred = model.predict(X_test)
accuracy_score(y_test, pred)
booster (기본값 gbtree) : 부스팅 알고리즘 (또는 dart, gblinear)
objective (기본값 binary:logistic) : 이진분류 (다중분류: multi:softmax)
max_depth (기본값 6) : 최대 한도 깊이
learning_rate (기본값 0.1) : 학습률
n_estimators (기본값 100) : 트리의 수
subsample (기본값 1) : 훈련 샘플 개수의 비율
colsample_bytree (기본값 1) : 특성 개수의 비율
n_jobs (기본값 1) : 사용 코어 수 (-1: 모든 코어를 다 사용)
학습률과 트리의 수는 둘 다 낮추면 안 되고
한 쪽을 낮추면 다른 한 쪽은 높여야 한다
# xgboost 하이퍼파라미터
model = XGBClassifier(random_state=0, use_label_encoder=False, eval_metric='logloss',
booster = 'gbtree',
objective = 'binary:logistic',
max_depth = 5,
learning_rate = 0.05,
n_estimators = 500,
subsample = 1,
colsample_bytree = 1,
n_jobs = -1
# - booster(기본값 gbtree): 부스팅 알고리즘 (또는 dart, gblinear)
# - objective(기본값 binary:logistic): 이진분류 (다중분류: multi:softmax)
# - max_depth(기본값 6): 최대 한도 깊이
# - learning_rate(기본값 0.1): 학습률
# - n_estimators(기본값 100): 트리의 수
# - subsample(기본값 1): 훈련 샘플 개수의 비율
# - colsample_bytree(기본값 1): 특성 개수의 비율
# - n_jobs(기본값 1): 사용 코어 수 (-1: 모든 코어를 다 사용)
)
model.fit(X_train, y_train)
pred = model.predict(X_test)
accuracy_score(y_test, pred)
# 조기종료 : 더 이상 성능향상이 없을 때
model = XGBClassifier(random_state=0, use_label_encoder=False, eval_metric='logloss',
learning_rate = 0.05,
n_estimators = 500)
eval_set = [(X_test, y_test)]
model.fit(X_train, y_train, eval_set=eval_set, early_stopping_rounds=10)
pred = model.predict(X_test)
accuracy_score(y_test, pred)