K-fold Cross Validation 기법과 활용
기존의 방식에서는 Train set 및 Test set을 고정하여 훈련 및 검증을 진행했는데,
이와 같은 방식에서는
- 해당 Test Set에만 잘 fit하는 모델이 된다 >>> Overfitting 되기 쉽다
라는 단점이 존재한다.
이러한 단점을 해결하고자 나온 것이 교차 검증(Cross Validation)이며 그 중 가장 널리 쓰이는 K-fold Cross Validation에 대해 알아볼 것이다.
※ K-fold Cross Validation이란?
총 train set을 K개의 fold로 나누어 K-1개의 fold를 train set, 1개의 fold를 validation set으로 설정해 모델의 성능을 검증하는 방식.
K-fold cross validation은 다음과 같은 과정을 거친다.
- 먼저 전체 data set을 Train Set과 Test Set으로 나눈다.
- 그 중 Train Set을 K개의 Fold로 나눈다.
- 첫 번째 Fold를 Validation Set으로, 나머지 폴드들을 Train Set으로 사용해서 훈련 및 평가를 한다.
A. Train Set(나머지 폴드)로 학습하고, Validation Set(첫 폴드)로 평가한다. - 차례대로 다음 폴드를 Validation Set으로 사용해서, 3-A와 같은 과정을 반복한다.
- 총 k개의 테스트 결과나 나오며, 이 k개의 평균이 해당 모델의 성능으로 판단한다.
※ K-fold Cross Validation의 활용
K-fold Cross Validation은 기본적으로 모델의 성능을 검증하는 목적을 가지고 활용된다.
좀 더 세부적으로 따지자면 이는 상황에 따라 모델 선택, 혹은 모델 튜닝(파라미터)에 사용 가능하다.
1. 모델 선택
Regression 모델 A와 B가 있다고 가정하자
각각의 Regression은 동일 데이터를 사용하지만 사용하는 Feature은 다르다고 한다면
- 전체 데이터셋을 k개의 fold로 분리
- 모델 A, B에 대해 k-fold cross validation 진행 → 이 경우 각 iteration에서 측정된 정확도(AUC라 가정)의 mean 값을 이용해 각 모델 정확도 비교
- 더 높은 정확도가 나온 모델을 선택, 해당 모델에 대해서 전체 데이터셋을 이용해 재적합 진행
위 과정을 통해 성능이 좋은 모델을 선택해주면 된다.
2. 모델 튜닝(파라미터)
이번엔 어느 한 고정된 머신러닝 / 딥러닝 모델이 있다 가정하자.
- 전체 데이터셋을 train, test set으로 분리
- Train set을 k개의 fold로 분리
- k-fold cross validation 진행 → 사용자가 설정한 파라미터의 조합에 대해 iteration 진행, 정확도(역시 AUC로 가정)의 평균을 산정
- 더 높은 정확도가 나온 모델 파라미터를 선택하여 해당 파라미터로 train set에 대해 재적합 진행
- 기존 split해 놓은 test set에 대해 performance 측정
3번 과정에서는 예를 들어 5개의 fold로 나눈다고 가정해보자.
기존 모델의 2가지 parameter을 조정하며 모델을 튜닝한다 하고 각 parameter이 5가지, 10가지 후보군이 있다고 가정했을 시
- 총 iteration 수 : 5 * 5 * 10 = 250번의 iteration 필요
이러한 점만 놓고 봐서는 모델 튜닝의 경우 굉장히 많은 시간과 비용이 소모될 것이라 예상한다.
※ 참고한 사이트들
https://velog.io/@recoder/Cross-Validation
[Recommend] K-Fold Cross Validation(CV, 교차 검증)의 개념
인공지능 모델의 평향 학습을 방지하기 위한, 교차 검증 기법의 개념
velog.io
[ K-fold Cross Validation] 모델 선택 or 모델 튜닝.
요즘은 Cross validation (교차검증)에 대한 개념들이 정리가 잘 되어 있지만, train / validation / test...
blog.naver.com