Machine Learning/Fundamentals

train vs. validation vs. test set

metamong 2022. 4. 18.

(! -- 매우 간단한 개념 짚고 넘어가는 목적 --!)

 

* ML modelling할 때 주어진 train set로 모델을 구축하고 미리 주어진 data에서 일부 test set으로 뽑아 나중에 model에 집어넣어 예측값을 뽑거나 해당 모델의 성능을 최종적으로 평가했다. 이런 일련의 과정 (train → test)을 앞선 모델에 계속 적용했는데, 이제는 validation set을 포함하여 이 세 종류의 set의 정확한 차이점을 알아보고 개념을 다지도록 하자!

 

- train vs. validation vs. test -

 

☝️ 먼저 주어진 train 훈련 data로 모델을 학습시킴

✌️ 기존 train 훈련 data에서 학습시킨 train data를 제외한 나머지 validation data로 학습된 모델의 hyperparamter 조합이 적절한지 평가!

(☝️와 ✌️를 여러번 반복해가며 최적의 hyperparameter 조합을 찾는다 + 또는 여러 종류의 모델을 각각 돌아가며 validation set의 성능으로 최적의 모델을 selection할 수도 있다.)

💅 마지막으로 최적의 hyperparameter 조합으로 구축된 model의 성능을 test data로 딱 한 번! 평가한다

 

Q. validation set과 test set의 차이점?

A - test set은 마지막에 최종적으로 딱 한 번 사용되어야 한다. validation set은 test set으로 test한 결과 최적의 좋은 결과가 나올 수 있도록 여러번 모델 hyperparameter의 조합을 미리 검증해주는 역할이다. (즉 validation set은 여러 번 사용 가능!)

 

Q. CV(Cross-Validation) 기법 적용 가능하나?

A - 적용 가능. 특히 주어진 dataset 자체의 크기가 적을 경우 충분히 validation set 한 번으로 최적의 결과를 낼 수 없다고 판단해서

train data를 validation set의 역할도 각각 번갈아 담당함으로써

각각 나온 결과의 평균으로 검증결과를 내게 할 수 있다.

 

(CV 관련 자세한 포스팅은 아래 참조 👇)

 

Cross-Validation (concepts)

* 머신러닝을 위해서 무.조.건. 알아야 하는 CROSS-VALIDATION! 간단히 개념만 알아보ZA * - 2번 과정 - model selection에서 주로 많이 쓰이는 cross-validation 기법 - 🧐 PURPOSE? 'The purpose of cross..

sh-avid-learner.tistory.com

 

(참고로 아래 출처 youtube에서 train data는 '학생들의 공부' validation data는 '모의고사' test data는 '최종 수능 시험'이라

비유를 들었는데 매우 매우 완벽한 비유라 생각!)

 

Q. test set을 검증용으로 사용하면?

A. test set 자체가 목표가 되어 검증하는 과정에서 test set에 과적합된 모델이 만들어질 가능성이 큼.

그렇게 되면 후에 extrapolate/interpolate 기법 등 random 값이 들어왔을 때

모델이 올바르게 예측하지 못할 가능성이 커 (즉 일반화 성능이 낮음) test set은 최종적으로 딱 한 번만.

 

+

 

👨 어떤 경우에 train/test/validation data를 쓰는 게 제일 바람직할 지 좀 더 자세히 r아보za 👨

 

- 출처 아래에 표시 -

 

🙌 위 빨간색 사각형 - 즉, 가장 최적의 모델 - 즉! model의 다양한 hyperparameter 조합을 선택할 때 train/test/validation data로 나누어 model을 select한다! (이를 3-way holdout 기법이라 한다)

☆ 추가로 위에서도 언급했지만 dataset 크기 자체가 너무 작으면, 두 가지의 CV 기법 (k-fold & leave-one-out 기법)을 사용

Q. what is a GOOD VALIDATION SET?

→ 그렇다면, 과연 무엇이 좋은 validation set이라 할 수 있을까?

 

→ sklearn에서는 train_test_split function을 제공해 랜덤으로 test set과 train set을 분리해준다. 그리고 train data 내에서도 train_test_split function을 이용해 랜덤으로 validation set을 지정한다. 실제 real-world problem에서는 이렇게 랜덤하게 지정된 validation set은 적절치 못한 choice이다.

 

ex) 예시로 시계열 data가 있다고 하자. 해당 시계열 dataset은 최근 시점의 data를 test data, 최근 시점이 아닌 옛날 data를 train data로 놓는다. 랜덤하게 test set(validation)을 배정하면 시계열 data 특성상 최근 시점에 큰 비중을 두어야 한다는 점에서 위배된다. 실제 kaggel competition에서도 제일 최근 연도의 data를 test set으로 쓰고 있다. 우리는 주어진 train data에서 가장 최근의 data를 validation set으로 놓고 최적의 모델링 작업을 해야 한다.

 

랜덤한 train data subset이 아닌, 실제 세계의 문제를 잘 대변하는 setstratified(주어진 target의 분포에 맞게 validation set을 구성), CV(Cross-Validation)기법을 사용, 또는 domain knowledge를 활용해 dataset의 성질에 대해 이해하고 문제 목적에 맞게 임의로 구성하는 것이 바람직하다.

 

ML의 기초 of 기초..! 돌다리도 두드리고 넘어가자! 👐


* 출처1) https://www.youtube.com/watch?v=pGlQLMPI46g 

* 출처2) what is a good validation set https://www.fast.ai/2017/11/13/validation-sets/

* 출처3) https://sebastianraschka.com/blog/2018/model-evaluation-selection-part4.html

'Machine Learning > Fundamentals' 카테고리의 다른 글

feature selection (1) - selectKBest (+jointplot)  (0) 2022.04.20
Ordinal Encoding  (0) 2022.04.20
Gradient Descent (concepts) (+momentum)  (0) 2022.04.18
One-Hot encoding  (0) 2022.04.17
Cross-Validation (concepts + w/code)  (0) 2022.04.17

댓글