머신러닝을 공부하던 중 K-Fold Cross Validation에 이해가 가지 않는 부분이 생겨 혹여나 도움을 받을 수 있을까 질문드립니다.
5-fold로 train_test_split을 하여 총 5번 모델을 학습시켰습니다. 각각의 학습은 모두 epoch=50으로 두고 학습하였구요.
예를 들어, 어떤 실험 A를 수행하고 acc를 구했더니 최대 acc가,
0th-fold에서는 epoch=20일 때,
1st-fold에서는 epoch=40일 때,
2nd-fold에서는 epoch=5일 때,
3rd-fold에서는 epoch=45일 때,
4th-fold에서는 epoch=35일 때 나왔다고 합시다.
실험 A의 성능을 실험 B와 비교하고 싶어서 실험 A의 최종 acc를 구하고자 한다면,
1) 각 fold마다 최대acc가 나왔던 epoch(순서대로 20, 40, 5, 45, 35)에서의 acc값의 mean을 구하면 되는 것인가요?
2) 혹은 epoch=1 일 때 모든 fold의 acc의 평균을 구하고, epoch=2일 때 모든 fold의 acc의 평균을 구하고, ... 이런 식으로 epoch = '1~50'일 때 매 epoch마다 구해놓은 평균들(총 50개) 중 가장 높은 값을 구해서 그것을 실험 A의 최종 acc로 써야하나요?
아뇨, internal validation을 하고 계시고 independent test data가 없다고 하면 최대 성능을 보는 건 치팅입니다.
Train data로만 early stopping하던가 test data 따로 만들고, 남은 train 데이터를 5-fold CV하여서 validation performance metric으로 early stopping하시면 됩니다.
최종 성능 평가는 테스트 데이터셋으로 구하세요
학회나 저널에서 억셉되더라도 연구자들의 평가는 성능 좋아보이게 하기 위함 혹은 제대로 연구안했다고 판단하기 쉽습니다.
만약 따로 테스트데이터셋 구하기 힘들면 마지막 epoch 로 성능 평가내세요.
서로 다른 epoch로 성능 좋을때 쓴다는건 윗 댓글대로 치팅입니다.
2021.09.07
대댓글 1개
2021.09.07
대댓글 1개
2021.09.07