inflearn logo
강의

Course

Instructor

[Revised Edition] The Complete Guide to Python Machine Learning

Wisconsin Breast Cancer Prediction Using XGBoost (using scikit-learn Wrapper XGBoost)

조기중단기능(early stopping) 질문

356

zcx6263

10 asked

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은

검증 데이터로 진행해야 한다고 하셔서 이부분이 궁금합니다.

 

감사합니다.

 

python 머신러닝 통계

Answer 2

0

zcx6263

안녕하세요.

아래 코드에서 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

dooleyz3525

evals에 학습과 검증 데이터를 다 넣어도 eval은 검증만 수행합니다. 그리고 학습을 넣으면 학습에 대한 loss만 출력해 줍니다.

0

dooleyz3525

안녕하십니까,

질문을 제대로 이해하지 못했습니다.

 

예제를 보면 train-logloss는 계속해서 감소하고 eval-logloss는 감소하지 않는 구간이 있는데

똑같은 데이터를 나눈 것인데 차이가 발생하는 이유가 궁금합니다!

=> train-logloss에 사용된 데이터와 eval-logloss에 사용되는 데이터는 서로 다릅니다. 학습 데이터를 다시 쪼개서 tr과 val 로 만들어서 적용한 것입니다. eval을 검증 데이터로 적용하고 있습니다.

원하는 답변이 아니시면 다시 한번 질문 사항을 정리 부탁드립니다.

감사합니다.

안녕하세요 열심히 수강중인 학생입니다

0

63

2

정수 인덱싱

0

68

2

넘파이 오류

0

85

2

11강 numpy의 axis 축 질문 드립니다.

0

85

2

Kaggle 에서 Santander customer satisfaction data 를 다운로드 되지가 않습니다.

0

79

2

Feature importances 를 보여주는 barplot 이 그래프로 안보여져요.

0

70

2

타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.

0

75

2

타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.

0

64

2

5강 강의 오류가 있어요.

0

84

1

실무에서 LTV 관련 모델 선택 질문입니다!

0

72

2

14강 강의 듣는중에 궁금한게 있어서 질문합니다~

0

69

3

파이썬 다운그레이 후 사이킷런 재설치

0

117

2

좋은 강의 감사합니다.

0

73

2

scoring 함수 음수값

0

67

2

6번 강의에 사이킷런, 파이썬, 아나콘다 각각 버전 일치 안 시키고 진행해도 강의 따라가 지나요?

0

100

2

분류 평가 정확도 예측

0

78

2

안녕하세요. 강의 들으면서 업무에 적용하고 싶은 수강생입니다.

0

99

1

카카오톡 채널 있나요

0

108

1

혹시 강의에서 사용하시는 ppt 받을 수 있는건가요

0

190

2

pca 스케일링 관련하여 질문드립니다.

0

100

2

주피터 대신 구글 코랩

0

172

2

강의에서 사용하는 pdf or ppt자료는 따로 없는 건가요?

0

148

2

실루엣 스코어..

0

86

2

float64 null 값 처리 방법

0

103

2