ML| Cross Validation

Cross Validation(교차 검증)

학습을 시키는 과정에서 과적합이 발생할 수 있습니다. 해당 문제점을 해결하기 위해서 교차 검증을 이용해 더 다양한 학습과 평가를 수행합니다.

장단점

  • 적은 데이터에 대한 validation 신뢰성을 높일 수 있습니다.
  • 모든 데이터셋을 훈련에 활용할 수 있으므로 데이터 편중을 막을 수 있습니다. (k-fold)
  • 검증 결과에 따라 더 일반화된 모델을 만들 수 있습니다.
  • 모델 학습에 오랜 시간이 소요됩니다.

종류

  • Exhaustive Cross-validation(소모적 교차검증): Cross-validation에는 모든 가능성을 검증해 보는 방법
  • Non-exhaustive Cross-validation(비소모적 교차검증): 모든 가능성에 대해 검증하지는 않는 방법

Hold-out Cross Validation

일정한 비율의 validation 데이터셋 하나를 지정하여 검증 데이터셋으로 사용합니다.

특징

  1. validation 데이터셋으로 지정된 부분의 데이터가 학습셋으로 사용되지 않는다는 문제가 있습니다.
  2. 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)에서는, 훈련 데이터의 다음 시점이 검증 데이터로 간주됩니다.


© 2024. All rights reserved.

Powered by Hydejack v9.2.1