본문 바로가기
IT 개인학습/Memo

Train / Validation / Test

by kiimy 2021. 7. 7.
728x90
728x90

Train / Test

- > 답지를 보고 훈련을 하게되면 다른 학습데이터가 들어와도 제대로 맞출 수가 없다,

train_test_split 함수는 데이터를 랜덤하게 섞은 후, 인덱스 기반으로 train set과 validation set으로 나누는 함수
- 배열의 형태가 들어갈 수 없음

 

* training set중 몇개를 따로 빼내서(hold out) test error를 직접적으로 추정하는 방법.

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

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

 

단점

검증세트의 성능 추정이 어떤 샘플을 사용하느냐에 따라 다름(= train, val 나누는 방법에 따라 성능 추정 민감)

 

* K-fold

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

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

728x90

'IT 개인학습 > Memo' 카테고리의 다른 글

Deploy  (0) 2022.05.07
Jenkins 젠킨스  (0) 2022.05.07
SQL  (0) 2022.05.07
Airflow  (0) 2022.05.07
정규화( Normalization, Standardization, Regularization )  (0) 2021.07.04

댓글