고정된 train_set 과 test_set으로 평가하고 반복적으로 모델을 튜닝하면 test_set에 Overfitting(과적합)이 발생하기 때문에 데이터의 모든 부분을 사용해서 모델을 검증하는 방식
train set : 학습을 위한 부분
test set : 평가를 위한 부분
필요성
위와 같이 우리가 사용할 데이터가 있다고 하자, 데이터는 label이 있는 train set과 test set으로 나뉘어져 있다.
만약 train set을 다시 train set + validation set으로 분리하지 않는다 라고 가정해보자.
모델 검증을 위해서 test set을 사용해야 한다. (test set이 validation set으로 되어버리는 경우)
이 경우, 고정된 test set으로 모델의 성능을 확인하고 파라미터를 수정하고, 이 과정을 반복하는 경우 결국 우리의 모델은 test set에만 잘 동작하는 모델이 되어 버린다.
이것을 test set에 overfitting(과적합)되었다. 라고 하며 실제 다른 데이터를 가지고 예측을 수행하면 엉망인 결과가 나온다.
Cross Validation은 이런 문제를 해결하기 위해서 고안되었다.
Cross Validation의 문제 해결 방식
test set에 과적합 되는 문제는 test set이 데이터 중 일부로 고정되어 있고, 이 일부분 데이터 셋에 대해 성능이 잘나오도록 파라미터를 반복적으로 튜닝하기 때문에 발생
과정
먼저 전체 데이터 셋을 k개의 subset으로 나눈 뒤 k 번의 평가를 실행한다. ( 여기서 test set을 중복없이 바꾸어가며 평가를 진행하게 된다. )
k개의 평가 지표를 평균( 때에 따라 평균이 아닌 방법 사용 가능 )을 내어서 최종적으로 모델의 성능을 평가한다.
장단점
장점
모든 데이터셋을 평가에 활용할 수 있다.
→ 특정 평가 데이터셋에 overfit 되는 것을 방지
모든 데이터 셋을 훈련에 사용할 수 있다.
→ 정확도 향상, 데이터 부족으로 인한 underfitting 방지
단점
Iteration 횟수가 많으므로 모델 훈련 및 평가 시간이 오래 걸린다.
종류
Holdout method
주어진 trainset을 다시 임의의 비율로 train set과 test set으로 분할하여 사용한다.
비율은 train:test = 9:1 or 7:3 이 많이 쓰인다.
Iteration(훈련 및 검증)을 한번만 하기 때문에 계산 시간에 대한 부담이 적다.
train set에 대한 검증 결과를 확인 후 모델 파라미터 튜닝을 하는 작업을 반복하게 되면 모델이 test set에 overfit 될 수 있다.
K-Fold Cross Validation
가장 일반적으로 사용되는 교차 검증 방법이다.
데이터를 k개의 데이터 폴드로 분할하고, 각 Iteration마다 test set을 다르게 할당해 총 k개의 데이터 폴드 세트를 구성한다.
모델을 학습 및 훈련하는데 총 k번의 Iteration이 필요한 것이 특징이다.
데이터폴드세트에 대해서 나온 검증 결과들을 평균내어 최종적인 검증 결과를 도출하는 것이 일반적이다.
Leave-p-out Cross Validation
전체 데이터(서로 다른 데이터 샘플들) 중 p개의 샘플을 선택하여 그것을 모델 검증에 사용하는 방법
test set을 구성할 수 있는 경우의 수 ( = 훈련 및 검증에 소요되는 Iteration 수) 는 ${n}{C}{p}$ 이다. (n개중 p개)
K-Fold와 마찬가지로 각 데이터 폴드 세트에 대해서 나온 검증 결과를 평균내어 최종적인 검증 결과를 도출하는 것이 일반적
데이터 폴드 세트의 경우의 수가 매우 크므로 계산 시간에 대한 부담이 매우 큰 방식
Leave-one-out Cross Validation
LOOCV라고도 불리며, Leave-p-out cross validation에서 p=1일때의 경우를 말한다.
Leave-p-out 보다는 계산 시간에 대한 부담을 줄이고, 더 좋은 결과를 얻을 수 있기 때문에 더욱 선호됨.
검증에 사용되는 test set의 갯수가 적은 만큼 모델 훈련에 사용되는 갯수는 늘어남
모델 검증에 희생되는 데이터의 갯수는 단 하나이므로 나머지 모든 데이터를 모델 훈련에 사용할 수 있다.
Stratified K-Fold Cross Validation
주로 Classification 문제에서 사용
label의 분포가 각 클래스별로 불균형 한 경우 사용
label의 분포가 불균형한 상황에서 sample의 index 순으로 데이터 폴드 세트를 구성하는 것은 치명적 오류를 야기할 수 있음
Stratified K-fold cross validation은 이러한 데이터 label의 분포까지 고려해서(따라서 데이터 폴드 세트를 구성해주는 함수에서 데이터 label의 값을 요구) 각 훈련 또는 검증 폴드의 분포가 전체 데이터셋이 가지고 있는 분포에 근사하게 됨.