나는야 데이터사이언티스트/통계

교차검증(Cross-Validation) 쉽게 이해하기

우주먼지의하루 2020. 6. 4. 00:12
728x90

training / validation / test dataset

교차 검증을 설명하기에 앞서 training / validation / test dataset에 대해 간단한 개념부터 이해해야 합니다. 먼저 데이터를 왜 분할하여 사용할까요. 모델을 만드는 것은 가지고 있는 샘플 데이터를 이용하여 충분한 정확도로 일반화 시켜야 합니다. 이를 위해 샘플 데이터를 training / validation / test dataset으로 나누어 진행합니다.

 

Training Dataset   - The sample of data used to fit the model

 - 모델을 만드는데 사용하는 실제 dataset입니다
Validation Dataset  - The sample of data used to provide an unbiased evaluation of a model fit on the training dataset while tuning model hyperparameters. The evaluation becomes more biased as skill on the validation dataset is incorporated into the model configuration.

 -training datset으로 만든 모델이 잘 예측하는지 성능을 평가하기 위해 validation dataset을 이용합니다
Test Dataset  - The sample of data used to provide an unbiased evaluation of a final model fit on the training dataset.

 - validation dataset으로 최종 모델을 선택하고 그 성능을 테스트하기 위해 test dataset을 이용합니다. 모델을 만드는 것이 끝날 때 까지 test dataset을 노출시키지 않아야하고 최종적으로 충분한 정확도로 일반화 시킬 수 있는 모델인지 확인하기 위해 필요한 dataset입니다

 

정리하자면 training set으로 모델을 만들고, validation set으로 모델을 평가하고, 선택된 모델을 test set으로 최종 평가하는 것입니다.

교차 검증은 왜 필요할까 ?

그렇다면 training / validation / test dataset으로 모델을 만들면 되지 교차 검증은 왜 필요할까요?

 

고정적인 training set으로 모델을 만드는 경우 overfitting(과적합)이 나타날 수 있습니다. 과적합이라는 말이 어렵게 느껴지실까봐 조금 풀어쓰자면 계속 똑같은 training set으로 모델을 만들게 되면 training set에서만 잘 맞는 모델이 만들어 집니다. 하지만 위에서 말했듯이 모델을 만드는 궁극적인 목표는 충분한 정확도로 일반화를 시켜야하는 것입니다. training set에서만 잘 맞으면 그 모델은 필요가 없죠. 이러한 문제를 해결하기 위해서 교차검증을 사용하는 것입니다. 교차 검증은 크게 holdout cross validation / k-fold cross validation / Leave-p-out cross validation 으로 나눌 수 있습니다.

홀드 아웃 교차 검증(Holdout Cross Validation)

홀드 아웃 교차 검증(Holdout Cross Validation)은 일반적으로 사용하는 데이터셋을 train과 validation으로 나누어 사용하는 것입니다. 보통 데이터셋을 8 : 2로 나누어 많이 사용하지만 7 : 3, 9 : 1 비율로도 나누어 많이 사용합니다.

 

일반적으로 많이 사용하는 것이기 때문에 적을까 말까 고민을 했는데, 어쨌든 누군가 '홀드 아웃으로 나눠서 해주세요.'했는데 단어를 몰라서 모른다고 말하는 건 억울하기 때문에 단어 공부 겸 적었습니다.

K-겹 교차 검증(K-fold Cross Validation)

K-겹 교차 검증(K-fold Cross Validation)은 가지고 있는 데이터를 K개의 그룹으로 나누어 그 그룹 중에서 하나를 추출하여 validation set으로 사용하는 것입니다. 그리고 이 과정을 K번 반복하여 나온 결과값을 평균내어 검증 결과 값으로 사용합니다. 

 

k-fold의 장점은 모든 데이터를 training과 validation에 쓸 수 있고 오버피팅의 염려도 크지 않습니다. 하지만 시간이 다소 오래걸린다는 단점이 존재합니다. 보통 k-fold는 일반화 성능을 만족시키는 최적의 하이퍼 파라미터를 구하기 위한 모델 튜닝에 사용됩니다. 층화 추출(stratified)로 k-fold를 샘플링하게 되면 모델은 조금 더 개선이 가능한데 이를 층화 k-fold 교차검증(Stratified K-fold Cross Validation)이라고 합니다.

 

리브-p-아웃 교차 검증(Leave-p-out Cross Validation)

리브-p-아웃 교차 검증(Leave-p-out Cross Validation)은 가지고 있는 데이터셋에서 p개의 데이터를 추출하고 남은 데이터를 validation data로 사용하는 방법입니다. 예를 들어 리브-3-아웃 교차검증은 가지고 있는 데이터에서 아래의 그림처럼 3개를 추출하여 train data로 이용합니다. 그리고 나머지 데이터는 validation data로 사용하여 검증 결과를 도출합니다. 이 방법 또한 계산 시간이 오래 걸린다는 단점이 있습니다.

 

p=1일 때, Leave-one-out Cross validation이라고 하는데 이는 LOOCV라고 줄여서 사용합니다. 

 

 

 

 

출처 : https://aiaspirant.com/cross-validation/

 

6 types of Cross Validation in Machine Learning | Python - AI ASPIRANT

Cross validation is an evaluation technique which is used to asses the generalization performance of the machine learning model.

aiaspirant.com

 

반응형