전체 데이터셋을 일정 비율로 train dataset과 test dataset으로 나누어 train dataset을 이용해 모델을 학습하고 test dataset을 통해 최종적인 모델의 성능을 평가하는 것이 일반적이다.
그러나 고정된 train dataset으로 학습하고 고정된 test dataset으로 성능 평가를 통해 최적의 하이퍼 파라미터를 찾을 경우 test dataset에 overfitting할 위험이 크다.
Cross validation
따라서 일반화된 모델을 만들고 신뢰성있는 모델 평가를 진행하기 위해서 Cross Validation를 수행한다.
교차 검증에는 다양한 종류가 존재한다.
- Hold-out Cross-Validation
- K-Fold Cross-Validation
- Stratified K-Fold Cross Validation
Hold-out Cross Validation
데이터셋을 train dataset의 일부를 validation 용도로 사용하는 방법을 사용한다.
train dataset으로 학습하며 valid dataset으로 평가를 통해 하이퍼파라미터를 튜닝하고 test dataset으로 최종적인 모델의 성능을 평가한다.
→ 단점 : validation 데이터셋에 overfitting 될 수 있다.
K-fold Cross Validation
train dataset을 k개의 동일한 크기로 랜덤 분할하고 그 중 하나를 validation으로 사용하는 것이다.
그리고 이 과정을 k번 반복하여 나온 결과값을 평균내어 validation 값으로 사용한다.
→ 단점 : 랜덤하게 validation fold가 생성될 때, 편향된 데이터 fold가 생성될 수도 있다.
Stratified K-fold Cross Validation
K-fold Cross Validation이 랜덤하게 fold를 생성할 때 편향된 데이터 fold가 만들어질 수도 있다는 문제점을 해결하기 위해
클래스별 비율을 고려하여 fold를 구성하는 방법이다.
교차 검증을 크게 2가지로 분류할 수도 있다.
- 소모적 교차 검증(모든 가능성 검증)
- Leave-p-out Cross Validation
전체 데이터에서 서로 다른 샘플을 뽑아 그 중 p개의 샘플을 선택하여 Validation에 사용하는 방법
만들어낼 수 있는 fold는 nCp개로 개수가 많다면 시간이 매우 오래 걸린다는 단점이 있다.
- Leave-one-out Cross Validation
Leave-p-out 에서 p가 1인 경우
- 비소모적 교차 검증(모든 가능성을 검증하지 않음)
- Holdout method
- K-Fold Cross Validation