2020-03-16 12:12:35

머신러닝 모델의 성능을 평가하는 방법은 크게 두가지로 나눌 수 있습니다. 하나는 hold-out 교차검증이고 하나는 k-fold 교차검증입니다. 제가 주로 연구하는 이미지품질평가 분야에서는 hold-out 교차검증을 주로 채택합니다. 그리고 시각품질편안도평가 분야에서는 k-fold 교차검증을 주로 활용하구요. 문헌조사를 통해 자신이 연구하는 분야에서 보통 어떤 검증 방법을 채택하는지를 살펴본 후 그것을 이용하면 됩니다. 그러면 이제 hold-out 교차검증과 k-fold 교차검증에 대해서 하나씩 살펴보도록 하겠습니다. 

 

hold-out 교차검증 

hold-out은 데이터셋을 훈련셋과 테스트셋으로 분리합니다. 예를들어, 데이터셋의 80%를 훈련셋으로 삼아 모델을 훈련시키고, 나머지 20%를 테스트셋으로 이용해서 성능을 평가하는 것이죠. 그런데 훈련셋과 테스트셋으로만 나눠서 모델의 성능을 평가하다보면, 테스트셋이 모델의 파라미터 설정에 큰 영향을 미치게 됩니다. 모델이 테스트셋에 오버피팅될 가능성이 있게 되는 것이죠.

 

hold-out 교차검증의 한 방법

 

그래서 데이터셋을 훈련셋과 테스트셋으로만 나누기 보다는 훈련셋, 검증셋, 테스트셋 이렇게 세개로 나누는 것을 권장합니다. 훈련셋을 이용해서 모델을 훈련시키고, 검증셋으로 모델의 최적 파라미터들을 찾아가고, 그 다음에 테스트셋을 이용해서 모델의 성능을 평가하는 것이죠. 이렇게 해주면, 테스트셋은 모델의 훈련과 성능을 높여주는 과정과는 무관하기 때문에 좀 더 나은 검증방법이라고 볼 수 있습니다. 

 

hold-out 교차검증의 또다른 방법

k-fold 교차검증

k-fold 교차검증은 데이터셋을 k개의 서브셋으로 분리합니다. 5-fold면 5개의 서브셋으로 분리해주는 것이죠. 그 다음에 하나의 서브셋만 테스트에 사용하고 나머지 k-1개의 서브셋은 훈련에 사용합니다. 이것을 k번 반복합니다. 다음 그림과 같은 방식으로 말이죠. 이렇게 k번 측정한 성능지표를 평균냄으로 최종적으로 모델의 성능을 평가합니다. 

 

k-fold 교차검증

 

 

만약 데이터셋의 크기가 별로 크지 않다면, 데이터셋의 샘플을 랜덤하게 섞어준 다음에 hold-out 교차검증이나 k-fold 교차검증을 해줍니다. 샘플을 섞어주고 검증하는 과정을 여러번 반복해서(10번 or 100번 or 1000번) 얻은 성능지표들을 평균내어 성능을 평가하기도 합니다. 이렇게 해주면 좀 더 제대로 모델을 평가할 수 있죠. 

 

끝까지 읽어주셔서 감사합니다. 항상 질문과 지적은 환영합니다. 빠르게 답변드리고 있으니 댓글 남겨주세요.

 

 

참고자료

[1] https://medium.com/@eijaz/holdout-vs-cross-validation-in-machine-learning-7637112d3f8f, Eijaz Allibhai, "Hold-out vs. Cross-validation in Machine Learning"

[2] wooono.tistory.com/105, 최운호님, "[ML] 교차검증 (CV, Cross Validation)이란?"

 

 

(이 글은 2021-2-14에 마지막으로 수정되었습니다.)