bskyvision RSS 태그 관리 글쓰기 방명록
2020-03-16 12:12:35
728x90

머신러닝 모델의 성능을 평가하는 방법은 크게 두가지로 나눌 수 있습니다. 하나는 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에 마지막으로 수정되었습니다.)

댓글

방문해주신 모든 분들을 환영합니다.

* 글을 읽던 중에 궁금했던 부분은 질문해주세요.

* 칭찬, 지적, 의문, 격려, 감사표현 등을 남겨주세요.

* 최대한 답변 드리도록 노력하겠습니다.

* 욕설과 광고를 담은 댓글은 가차없이 삭제합니다.


  1. 유니론@2021.02.14 16:53 ~$ 안녕하세요.
    bskyvision님의 글에 많은 도움받고 있습니다.
    훈련셋과 테스트셋등에 대한 내용 중, 한가지 궁금한 점이 있습니다.
    다른 분들의 블로그 글과 유튜브를 보니, 전제 데이터를 훈련셋과 테스트셋으로 나누고, 다시 해당 훈련셋 데이터를 이용하여 훈련셋 + 검증셋으로 나눈다고 설명한 내용이 몇개 있었습니다. 저도 이런 방식이 맞는게 아닌가 생각되는 데요. 즉, hold out cross validation의 경우 훈련셋 데이터를 다시 훈련셋과 검증셋으로 나누어 모델을 만들고, 최종적으로 테스트셋으로 모델의 성능을 평가하는 것이 맞지 않는지요? 특히 K-fold cross validation의 경우도 hold out cross validation과 같이 훈련셋 데이터를 훈련셋과 검증셋으로 나누어 모델을 만든 후, 최종적으로 테스트셋을 통해 모델성능 평가를 해야 하는 것이 아닌지 문의드립니다. 감사합니다. [댓글주소]  [수정/삭제]  [답글작성]
    • BlogIcon bskyvision@2021.02.14 23:11 신고 ~$ [답글]: 유니론님 좋은 댓글에 감사드립니다. 말씀하신 방식으로 해도 됩니다. ㅎㅎ 그리고 제가 여기서 소개한 방식으로 하는 경우도 꽤 있더라고요. 해당 분야에서 어떤 방식으로 평가해왔는지를 참고해서 적절한 방식을 채택하시는 것이 정답이 아닐까 싶네요^^ 분야마다 채택한 평가 방식이 조금씩 다르더라고요. [댓글주소]  [수정/삭제]
guest@이름 ~$
guest@패스워드 ~$
guest@홈페이지주소작성 ~$

guest@댓글작성 ~$




bskyvision. Designed by bskyvision.