작성
·
3K
0
eval_set=[(X_train, y_train), (X_test, y_test)] 이부분이 잘 이해가 가지 않습니다.
eval_set의 역할이 뭔지 알고싶어요. 피팅에 이미 xtrain, ytrain 다 들어갔는데, eval_set에는 전 데이터가 다 들어가네요
train 데이터로 학습을 시키고 test데이터로 검증을 한건가요?? test데이터 빼고 train 데이터만 eval_set에 넣어도 돌아가는데 어떤차이가 있는지 알고싶습니다.
답변 3
4
0. 데이터 세트를 학습, 검증, 테스트 데이터로 나눠야하면, train_test_split으로 나눈 데이터에서 train 데이터를 다시 train 데이터를 train데이터와 검증데이터로 나누는 식으로 하면 되고, 데이터가 충분치 않아서 테스트 데이터를 검증데이터로 썼습니다.
1. 네, GBM은 여러개의 estimator가 순차적으로 오류를 개선하면서 Weight를 update하는 방식입니다. 오류 산출은 학습 데이터로 합니다. 학습 데이터 기반으로 오류를 줄이는 방향으로 weight를 update합니다.
한번 weight가 estimator가 update 되었으면 이번에는 update된 weight를 기반으로 검증 데이터로 오류를 산출합니다. 그리고 다시 estimator를 재 학습하고 다시 검증 데이터로 오류를 산출하여 평가합니다. 검증 데이터로 evaluation하는데 만약 early stopping 횟수동안 더 이상 오류가 개선되지 않으면 더 이상 학습은 진행하지 않습니다. 더 진행하면 오히려 학습 데이터로 과적합 우려가 있기 때문입니다. 검증 데이터로 evaluation을 하기 때문에 검증 데이터가 학습에 영향을 미칠 수는 있지만 과적합 정도 수준까지는 아닙니다.
2. XGB의 내장 교차 검증은 XGB 파이썬 래퍼의 cv 메소드를 얘기한것입니다. xgb 파이썬 래퍼의 cv() 메소드의 사용 방법은 https://statkclee.github.io/model/model-python-xgboost-hyper.html 를 참조하시면 좋을 것 같습니다.
감사합니다.
2
안녕하십니까,
eval_set은 evaluation 세트, 즉 검증 세트를 지정하는 것입니다. fit( ) 수행시 학습하면서 반복적으로 예측 오류값을 줄일 수 있도록 학습이 진행되는데 이때 학습은 학습 데이터로 하되, 예측 오류값 평가는 eval_set로 지정된 검증 세트로 평가하는 방식입니다. 학습 데이터로만 예측 오류값을 줄이게 되면 오버 피팅 우려가 높아서 별도의 검증 세트를 지정하여 수행합니다.
eval_set=[(X_train, y_train), (X_test, y_test)] 는 학습은 (X_train, y_train), 검증은 (X_test, y_test) 데이터 세트를 이용하라는 것입니다. 하지만 eval_set=[(X_test, y_test)]으로 하는게 더 명확한 설정인데 eval_set=[(X_train, y_train), (X_test, y_test)]로 해서 오히려 이해를 더 어렵게 만든것 같습니다.
그리고 eval_set=[(X_test, y_test)]로 테스트 데이터 세트를 설정하였는데, 원칙적으로는 이렇게 설정하면 안됩니다. 원래는 별도의 validation 데이터 세트를 넣어야 하는데, 데이터가 많지 않아서 test dataset를 설정하였으니 양해 부탁드립니다. 물론 eval_set=[(X_train, y_train)] 로 설정하실 필요도 마찬가지 이유로 없습니다.
감사합니다.
1
그럼 데이터 세트를 학습, 검증, 테스트 데이터로 나눠야하면, train_test_split으로 나눈 데이터에서 train 데이터를 다시 train 데이터를 train데이터와 검증데이터로 나누는 식으로 하면 될까요?
강의에서는 데이터가 충분치 않아서 테스트 데이터를 검증데이터로 쓰신거구요.
추가로
1. 다른 분류기와 달리 GBM에 eval_set가 필요한 것이, gbm이 weak learner가 학습한 후 검증데이터로 오류를 산출하고 순차적으로 업데이트 하는 과정때문이라 그런가요? 만약 그렇다면 모델이 검증데이터에 과적합이 되진 않는지 궁금하네요.
2. 책 p.228에 XGBM은 자체내장된 교차검증이 있다고 하는데 .fit 메소드를 쓰면 train 데이터와 eval_set을 이용하여 cross_val_score 처럼 교차검증이 이루어지는 건지 궁금합니다.
만약 그렇지 않다면 fit메소드로는 교차검증을 하지 않고 지속적으로 업데이트 되는 모델이 eval_set으로만 검증을 진행하나요? test 데이터를 검증데이터로 쓰셨고, test_size = 0.2니까 전체 데이터의 20%만 검증에 사용된건가요?