ML| Cross Validation
Cross Validation(교차 검증)
학습을 시키는 과정에서 과적합이 발생할 수 있습니다. 해당 문제점을 해결하기 위해서 교차 검증을 이용해 더 다양한 학습과 평가를 수행합니다.
- 장단점
- 종류
- Hold-out Cross Validation
- K-Fold Cross Validation
- Stratified K-Fold Cross Validation
- Leave-p-Out Cross-Validation(LpOCV)
- Leave-One-Out Cross-Validation(LOOCV)
- Repeated random sub-sampling Validation(Monte Carlo cross Validation)
- Repeated K-fold Cross-validation
- GroupKFold Cross Validation
- Time Series cross-validation
장단점
- 적은 데이터에 대한 validation 신뢰성을 높일 수 있습니다.
- 모든 데이터셋을 훈련에 활용할 수 있으므로 데이터 편중을 막을 수 있습니다. (k-fold)
- 검증 결과에 따라 더 일반화된 모델을 만들 수 있습니다.
- 모델 학습에 오랜 시간이 소요됩니다.
종류
- Exhaustive Cross-validation(소모적 교차검증): Cross-validation에는 모든 가능성을 검증해 보는 방법
- Non-exhaustive Cross-validation(비소모적 교차검증): 모든 가능성에 대해 검증하지는 않는 방법
Hold-out Cross Validation
일정한 비율의 validation 데이터셋 하나를 지정하여 검증 데이터셋으로 사용합니다.
특징
- validation 데이터셋으로 지정된 부분의 데이터가 학습셋으로 사용되지 않는다는 문제가 있습니다.
- validation 데이터셋에 편향되도록 모델을 조정하게 된다는 문제가 있습니다.
-> K-Fold 등장
K-Fold Cross Validation
train 데이터를 k개의 fold로 나누어, 그 중 하나의 fold를 validation 데이터셋으로 삼아 검증하는 방법을 k번 반복하여, 그 평균을 결과로서 사용하는 방법입니다.
from sklearn.model_selection import KFold
특징
- 랜덤하게 validation 데이터셋을 지정하게 되므로, 편향된 데이터로 이뤄진 폴드가 생성될 수 있습니다.
- 불균형 데이터세트에는 적합하지 않습니다.
- 모델 편향이 낮습니다.
-> Statified K-Fold Cross Validation 등장
Stratified K-Fold Cross Validation
K-Fold 방법에서 각 클래스별 비율을 고려하여 Fold를 구성하는 방법입니다.
from sklearn.model_selection import StratifiedKFold
특징
- 불균형한 데이터세트에 적합합니다.
- 시계열 데이터세트에 부적합합니다.
Leave-p-Out Cross-Validation(LpOCV)
p개의 데이터를 검증 데이터로 사용하고 나머지 데이터를 훈련 데이터로 사용하는 방식입니다.
from sklearn.model_selection import LeavePOut
Leave-One-Out Cross-Validation(LOOCV)
LpOCV with the case of p=1, 하나의 데이터 포인트만 남기고 나머지 데이터로 학습을 시킵니다. 다음 반복에서는 다른 하나의 포인트만 남기고 학습시킵니다. 여러 번 반복해서 남겨둔 포인트들로 검증을 합니다.
from sklearn.model_selection import LeaveOneOut
특징
- 낮은 편향이 발생할 수 있습니다.
- Data set에서 낭비되는 data가 없습니다.
- 측정 및 평가를 할 때 높은 비용이 발생합니다.
Repeated random sub-sampling Validation(Monte Carlo cross Validation)
데이터셋을 무작위로 훈련 세트와 검증 세트로 나누는 방법입니다. 이 방법은 k-fold 교차 검증과 달리, 데이터셋을 그룹이나 폴드로 나누지 않고, 임의로 분할합니다. 반복 횟수는 고정되지 않으며 분석을 통해 결정됩니다. 결과는 여러 분할에서 평균화됩니다.
전통적인 train-test split과 k-fold cross-validation 방식을 결합한 형태입니다.
from sklearn.model_selection import ShuffleSplit
특징
- 임의로 test set을 선택하여 일부 샘플은 훈련이나 검증을 위해 선택되지 않을 수 있습니다.
- 측정 및 평가에 적은 비용이 소모됩니다.
- 미래 예측시 신뢰성 예측이 불가능합니다.
- 불균형 데이터 세트에는 적합하지 않습니다.
Repeated K-fold Cross-validation
k-fold cross-validation 과정을 n번 반복합니다. 반복할 때마다 데이터 샘플을 섞어서 샘플을 다르게 분할합니다.
from sklearn.model_selection import RepeatedKFold
GroupKFold Cross Validation
train, test에서 동일한 그룹이 포함되지 않도록 하는 방법입니다.
from sklearn.model_selection import GroupKFold
Time Series cross-validation
시계열 문제에서는 데이터의 순서가 매우 중요합니다. 시간과 관련된 데이터셋의 경우, 데이터를 무작위로 분할하거나 k-fold로 나누는 방식은 좋은 결과를 내기 어렵습니다.
시계열 데이터셋에서는 데이터를 시간에 따라 훈련과 검증 세트로 나누며, 이를 Forward Chaining Method 또는 Rolling Cross-Validation이라고도 합니다. 특정 반복(iteration)에서는, 훈련 데이터의 다음 시점이 검증 데이터로 간주됩니다.