기계학습 모델의 Cross Validation

mycogno·2022년 2월 26일
0

Machine Learning

목록 보기
1/1

기계학습 모델의 성능 검증

기계학습 모델은 성능을 평가할 때, 그 모델이 모집단에 대해서 일반화를 잘 되었는지 확인하는 것이 중요하다.
예를 들어, 스팸 메일 여부를 확인하는 기계학습 모델이 있다면 모집단은 온 세상에 존재할 수 있는 가능한 모든 메일 메시지일 것이다. train, test 데이터 셋이 모집단의 표본으로서 수집될 것이고 학습에 사용할 train 데이터 셋의 경우 그것이 스팸 메일인지 아닌지 label을 포함할 것이다.
우리가 train 데이터 셋으로 학습한 모델은 train 데이터 셋 뿐만 아니라 모델이 한 번도 확인하지 않은 test 데이터 셋에서 좋은 성능을 보여주어야 일반화가 잘 된, 좋은 모델이라고 할 수 있다.

test dataset을 고정하면 생기는 문제

test 데이터 셋을 고정한다면, 그 test 데이터 셋에 대해 모델이 overfit될 수 있다. 그 test set에서만 성능이 잘 나오도록 모델이 학습될 수 있는 것이다.

K-Fold Cross Validation

위 문제를 해결하기 위해서 Cross Validation(교차 검증)이라는 방법을 사용한다. 그 중 대표적으로 K-Fold Cross Validation이라는 방법이 있다.

위의 그림에 간단히 설명되어 있는데, 절차를 자세히 설명하자면,
1. 기존의 training data에 대해 k개의 fold로 나누고 k개의 fold 중 하나는 validation용, 나머지 k-1개는 train 용으로 사용한다.
2. 첫번째 시도에서 train 용으로 빼둔 k-1개의 fold로 학습한다.
3. validation 용도의 fold로 성능 측정을 한다.
4. 2, 3번을 반복한다.
5. k번 시도에 대한 성능(ex: accuracy)을 평균한다.
6. 평균해서 나온 성능을 그 모델의 성능으로 평가한다.
7. 따로 빼두었던 test dataset으로 모델의 성능을 측정하고 cross validation으로 학습한 모델이 일반화가 잘 되었는지 평가한다.

cross validaiton의 성능 지표와 최종 test data에 대한 성능 지표가 큰 차이가 나지 않는다면, 일반화가 잘 되었다고 판단할 수 있다.

Stratified K-Fold


80%가 정상 메일 데이터, 20%가 스팸 메일인 데이터가 포함된 데이터 셋을 5-fold로 나눌 때 극단적으로 하나의 fold에 스팸 메일의 데이터 전부가 들어갈 수 있다.
위의 경우처럼, train dataset의 class 비율이 불균형할 경우 k-fold를 나눌 때 특정 class에 데이터 편향될 수 있다. 이를 방지하기 위해 fold 당 각 class 비율을 고정하는 방식을 Stratified K-fold라고 한다.

Dataset이 충분히 크지 않을 때의 Cross Validation

train, test dataset에 대해 Cross Validation을 하는 경우도 있다. 데이터 셋이 충분히 크지 않을 때 사용하며, validation dataset을 따로 나누지 않고 train, test dataset에 대하여 위의 K-Fold Cross Validation 설명처럼 교차 검증한 성능 평균을 최종 성능지표로 삼는다.

더 조사해보니, 사실은 이처럼 validation set을 따로 두지 않는 경우가 순수한 K-Fold Cross Validation이고 train, validation, test set으로 분리하는 검증 방법은 Holdout Cross Validation라는 이름이 있었다.
따라서, 위처럼 validation set과 test set을 분리하고 k-fold도 적용한 것은 Holdout과 K-fold를 혼합하여 일반화 성능을 측정하는 장치를 하나 더 심어둔 것이나 다름이 없다.

이런 점을 이용하여 K-fold 과정에서는 hyper parameter tuning을 하고,(GridSearch, RandomizedSearch) 나머지 test set에서 일반화 및 성능 평가를 하는 방법도 생각해 볼 수 있다.


reference

profile
What's on your mind?

0개의 댓글