해결된 질문
작성
·
268
0
안녕하세요. 항상 강의 보며 많은 도움 받고 있습니다.
섹션4.분류 XGBoost를 이용한 위스콘신 유방암 예측(사이킷런 Wrapper XGBoost 사용)
위의 강의를 듣고 궁금점이 생겨 질문 드립니다.
아래 코드를 사용해 early_stopping_rounds를 50, 10일 때 결과를 봤는데
강의와 다르게 성능이 올라가는 것이 의문입니다.
10일때가 loss는 분명 더 큰데 정확도는 높게 나옵니다.
from xgboost import XGBClassifier
xgb_wrapper = XGBClassifier(n_estimators=400, learning_rate=0.05, max_depth=3)
evals = [(X_tr, y_tr), (X_val, y_val)]
xgb_wrapper.fit(X_tr, y_tr, early_stopping_rounds=50, eval_metric="logloss",
eval_set=evals, verbose=True)
ws50_preds = xgb_wrapper.predict(X_test)
ws50_pred_proba = xgb_wrapper.predict_proba(X_test)[:, 1]
get_clf_eval(y_test , ws50_preds, ws50_pred_proba)
early_stopping_rounds=50일 때의 결과:
validation_1-logloss:0.23533 , 정확도 0.9649
정확도: 0.9649, 정밀도: 0.9740, 재현율: 0.9740, F1: 0.9740, AUC:0.9961
early_stopping_rounds=10일 때의 결과:
validation_1-logloss:0.25165, 정확도 0.9737
정확도: 0.9737, 정밀도: 0.9868, 재현율: 0.9740, F1: 0.9804, AUC:0.9954
답변 1
1
안녕하십니까,
강의에서 사용된 위스콘신 데이터 세트는 검증 세트가 그렇게 크지 않아서 early stopping 별로 정확도의 차이에 대해서 너무 민감하게 생각하시지 않으셨으면 합니다.
일반적으로 early stopping이 많으면(여기서는 50) 좀 더 최적화 성능이 좋아집니다. 하지만 early stopping이 크다고 무조건 최적화 성능이 좋아지지는 않습니다. 오버 피팅이 될 확률도 높아지기 때문입니다. 예를 들어 평가는 logloss이기 때문에 loss값이 적어지는 방향성으로 최적화가 되지만, 검증 데이터에 대한 다른 평가지표, 예를 들어 정확도는 오히려 조금 떨어질 수 있습니다. 그렇지만 이런 경우는 그렇게 흔하지는 않으며, 아마 위스콘신 데이터의 검증 데이터가 그렇게 크지 않으므로 평가시 이러한 결과가 나오는 걸로 생각됩니다.
요약드리면 전반적으로는 early stopping 이 클 수록 최적화 성능이 좀 더 나은 경향이 있지만, 반드시 그렇지는 않습니다. 특히나 검증 데이터 세트가 작은 경우에는 그렇지 않은 경우가 발생할 확률이 좀 더 높은 것 같습니다.
감사합니다.