[머신러닝] 6. 지도학습(분류): XGboost

PurinYun·2023년 11월 23일
0

AIffel

목록 보기
25/75

앙상블 방법
-배깅: 같은 알고리즘으로 여러 모델을 만들어 분류함(랜덤포레스트)
-부스팅: 학습과 예측을 하면서 가중치 반영 (xgboost)

XGBoost 모델 더 알아보기

트리 앙상블 중 성능이 좋은 알고리즘
eXtreme Gradient Boosting를 줄여서 XGBoost라고 한다.
약한 학습기가 계속해서 업데이트를 하며 좋은 모델을 만들어 간다.
부스팅(앙상블) 기반의 알고리즘
캐글(글로벌 AI 경진대회)에서 뛰어난 성능을 보이면서 인기가 높아짐

1. XGBoost 불러오기

# 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)

2. 하이퍼 파라미터의 종류

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)


profile
Fantivation

0개의 댓글