• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

eval_set 관련 헷갈리는 부분 질문드립니다.

21.04.15 13:47 작성 조회수 403

0

xgb_clf.fit 에서 X_train과 y_train을 인자로 넣어주는데 eval_set=[(X_train, y-train)]을 넣어주는 이유가 헷갈립니다.

교차검증처럼 학습데이터와 검정데이터로 나누어주는 것인가요?

답변 1

답변을 작성해보세요.

0

학습과 검증으로 나누는건 맞는데, 교차 검증하고는 조금 성격이 다릅니다.

eval_set = [(X_train, y_train), (X_test, y_test)] 를 적용하는 이유는 학습 데이터로 X_train, y_train, 검증 데이터로 X_test, y_test를 xgboost가 iteration을 수행할 때마다 사용하기 위함입니다.

xgboost는 num_iterations 수만큼 반복적으로 학습을 수행하는데 이때마다 학습데이터로 학습된 모델을 검증 데이터로 성능 검증을 합니다. 즉 iteration수행 시마다 얼마나 성능이 향상되었는지 검증 데이터로 검증을 합니다.

만약 iteration을 100으로 했는데, 검증 데이터로 성능 검증 시 더 이상 성능이 향상되지 않으면 early stopping으로 학습을 종료합니다. 또한 검증 데이터로 성능이 얼마나 향상되는지를 확인하면서 learning rate등을 어떻게 조정해야 하는지 길잡이 역할을 해줄 수 있습니다.

eval_set에 학습 데이터가 아닌 검증 데이터를 사용하는 이유는 머신러닝은 무조건 학습 데이터의 loss가 최소가 되는 방향으로 학습하기 때문에 오버피팅이 되기 쉽습니다. 따라서 iteration 시 마다의 성능 검증은 검증 데이터를 이용합니다.

김남욱님의 프로필

김남욱

질문자

2021.04.22

fit 파라미터로 학습데이터인 X_train과 y_train을 넣어주는데 eval_set 에도 검증데이터로 쓰일 데이터(예시에서 X_test, y_test) 말고도 학습데이터를 함께 넣어주는 것인가요?

교재 242p XGBoost에 대한 설명 및 코드에서는 eval_set 에 (X_test, y_test) 하나만 넣어주는데 이 부분때문에 헷갈리는 것 같습니다.

[(x_train, y_train), (x_test, y_test)] 이렇게 넣으면 (x_test, y_test)를 검증 데이터 세트를 지정하고 (x_test, y_test)하나만 넣으면 (x_test, y_test)를 검증 데이터로 지정합니다.