작성
·
257
0
안녕하세요.
좋은 강의 덕분에 많이 배우고 있습니다.
XGBoost를 이용한 위스콘신 유방암 예측 강의에서
early stopping 기능에 대해서 설명 주셨고,
이는 검증 데이터를 기반으로 중단 할지 말지 판단한다고 이해했습니다.
또한, 아래와 같이 학습 데이터, 검증 데이터 loss 값을 출력하여
확인해보면서, 검증 데이터가 더이상 감소하지 않는 구간이 있고
설정한 early stopping 값만큼 감소하지 않는다면
중단한하고 이해했습니다.
예제를 보면 train-logloss는 계속해서 감소하고
eval-logloss는 감소하지 않는 구간이 있는데
똑같은 데이터를 나눈 것인데 차이가 발생하는 이유가
궁금합니다!
[0] train-logloss:0.65016 eval-logloss:0.66183
[1] train-logloss:0.61131 eval-logloss:0.63609
[2] train-logloss:0.57563 eval-logloss:0.61144
[3] train-logloss:0.54310 eval-logloss:0.59204
강의에서 설명 주실때 학습 데이터는 계속해서 loss가
감소해서 오버피팅의 위험이 있기 때문에 early stopping은
검증 데이터로 진행해야 한다고 하셔서 이부분이 궁금합니다.
감사합니다.
답변 2
0
안녕하세요.
아래 코드에서 eval_list 는 학습 데이터와 검증 데이터가 담겨 있고,
evals 파라미터에 이를 추가했습니다.
# 학습 데이터 셋은 'train' 또는 평가 데이터 셋은 'eval' 로 명기합니다.
eval_list = [(dtr,'train'),(dval,'eval')] # 또는 eval_list = [(dval,'eval')] 만 명기해도 무방.
# 하이퍼 파라미터와 early stopping 파라미터를 train( ) 함수의 파라미터로 전달
xgb_model = xgb.train(params = params , dtrain=dtr , num_boost_round=num_rounds , \
early_stopping_rounds=50, evals=eval_list )
이를 실행하여 출력값을 확인해 보면 train-logloss는 계속 감소하고 있고, eval-logloss는 126번
부터 더 이상 감소하지 않습니다.
evals 파라미터에 학습과 검증 데이터를 모두 넣었는데 한쪽만 감소하는 이유가 궁금했습니다!
[126] train-logloss:0.01973 eval-logloss:0.25587
[127] train-logloss:0.01946 eval-logloss:0.25640
[128] train-logloss:0.01927 eval-logloss:0.25685
[129] train-logloss:0.01908 eval-logloss:0.25665
[130] train-logloss:0.01886 eval-logloss:0.25712
[131] train-logloss:0.01863 eval-logloss:0.25609
[132] train-logloss:0.01839 eval-logloss:0.25649
[133] train-logloss:0.01816 eval-logloss:0.25789
[134] train-logloss:0.01802 eval-logloss:0.25811
[135] train-logloss:0.01785 eval-logloss:0.25794
[136] train-logloss:0.01763 eval-logloss:0.25876
[137] train-logloss:0.01748 eval-logloss:0.25884
[138] train-logloss:0.01732 eval-logloss:0.25867
[139] train-logloss:0.01719 eval-logloss:0.25876
[140] train-logloss:0.01696 eval-logloss:0.25987
[141] train-logloss:0.01681 eval-logloss:0.25960
[142] train-logloss:0.01669 eval-logloss:0.25982
[143] train-logloss:0.01656 eval-logloss:0.25992
[144] train-logloss:0.01638 eval-logloss:0.26035
[145] train-logloss:0.01623 eval-logloss:0.26055
[146] train-logloss:0.01606 eval-logloss:0.26092
[147] train-logloss:0.01589 eval-logloss:0.26137
[148] train-logloss:0.01572 eval-logloss:0.25999
[149] train-logloss:0.01557 eval-logloss:0.26028
[150] train-logloss:0.01546 eval-logloss:0.26048
[151] train-logloss:0.01531 eval-logloss:0.26142
[152] train-logloss:0.01515 eval-logloss:0.26188
감사합니다.
0
안녕하십니까,
질문을 제대로 이해하지 못했습니다.
예제를 보면 train-logloss는 계속해서 감소하고 eval-logloss는 감소하지 않는 구간이 있는데
똑같은 데이터를 나눈 것인데 차이가 발생하는 이유가 궁금합니다!
=> train-logloss에 사용된 데이터와 eval-logloss에 사용되는 데이터는 서로 다릅니다. 학습 데이터를 다시 쪼개서 tr과 val 로 만들어서 적용한 것입니다. eval을 검증 데이터로 적용하고 있습니다.
원하는 답변이 아니시면 다시 한번 질문 사항을 정리 부탁드립니다.
감사합니다.
evals에 학습과 검증 데이터를 다 넣어도 eval은 검증만 수행합니다. 그리고 학습을 넣으면 학습에 대한 loss만 출력해 줍니다.