X

교차 검증 (Cross Validation)

I. 인공지능 모델 평가 기법, 교차 검증 (Cross Validation)

모델의 일반화 오차에 대해 신뢰한 추정치를 구하기 위해 훈련/검증 데이터 기반 검증 기법
 

II. 교차 검증 기법, 홀드 아웃 및 k-fold 교차 검증

가. 홀드 아웃 교차 검증 기법


– 가용 데이터를 Train Set과 Test Set으로 랜덤 나눔
– 일반적으로 2/3 Train Set, 1/3 Test Set 지정

– 적합한 학습 알고리즘 및 Hyperparameter 모델 선택

– 모델 사용하여 Test Set의 Class Label 예측
– 일반화 성능 추정 위해 예측-결과 Label 비교

– 모든 Data Set은 최종 모델에 학습 수행
– Data Set 제공 시 모델 한계까지 일반화 성능 향상

나. k-fold 교차 검증 기법

① 전체 Dataset으로 Train/Test Set으로 제공
② Train Dataset k개 지정, 균등 랜덤화 k개 Fold로 나눔
(k – 1)개의 Fold는 Test용, 나머지 1개 Validation용 지정
③ 튜닝하려는 Hyperparameters 지정
④ 정해진 Hyperparameters 대해 검증범위, 실험세트 준비
⑤ Train Dataset 그룹이 서로 다른 Validatation Fold 지정
– (k – 1)개 Train Fold 학습
– 나머지 1개 Validation Fold 성능 측정
⑥ ⑤에서 얻은 k개 결과의 평균을 Hyperparameter로 지정
⑦ 마지막으로 ⑥에서 얻은 Hyperparameter 적용하여 Test Data에 대해 모델을 1회 평가

Hyperparameter: 기계학습 모델 설계 위해 필요한 파라미터

III. 교차 검층의 3가지 기법 설명

가. LOOCV (Leave One Out Cross Validation)

그래프 수행 방법
① 임의 Data(X, Y) 선택
② 선택 Data외 Train Set구성
③ Train Set 학습 → 모델 생성
④ Test Set으로 오류 정도 측정
⑤ 모든 Data ① ~ ④ 수행
평균 오류 측정

나. k-fold Cross Validation

그래프 수행 방법
① Data Set 분리 k 개 선택
② k-1개 Train Set, 1개 Test Set
③ Train Set 학습 → 모델 생성
④ Test Set으로 오류 정도 측정
⑤ 모든 Data ① ~ ④ 수행
평균 오류 측정

다. Repeated Random Sub Sampling Validation

그래프 수행 방법
① Data Set 임의 30% 선택
② 30% Test Set, 70% Train Set
③ Train Set 학습 → 모델 생성
④ Test Set으로 오류 정도 측정
⑤ 모든 Data ① ~ ④ 수행
평균 오류 측정

 

IV. 교차 검증 기법 간 장단점 비교

항목 LOOCV k-fold Random Sampling
장점 Data Set에서
낭비 Data 없음
측정 및 평가
저비용 소요
측정 및 평가
저비용 소요
단점 측정 및 평가
고비용 소요
10-fold 사용 시
10% Data 낭비
미래 예측 시
신뢰성 예측불가
  • 각 교차 검증 기법 장단점에 따라 적정한 비용 및 단점을 보유한 k-fold 교차 검증 기법 다수 사용
Categories: 알고리즘/AI
도리:

View Comments (4)

  • 좋은 글 잘 읽었습니다! 한 가지만 질문을 드려도 될까요?
    k-fold 교차 검증에서,
    ⑥ ⑤에서 얻은 k개 결과의 평균을 Hyperparameter로 지정
    ⑦ 마지막으로 ⑥에서 얻은 Hyperparameter 적용하여 Test Data에 대해 모델을 1회 평가
    라고 하셨는데

    1. 이 때 k개 결과의 평균 값을 k개의 결과들과 비교하여 평균과 가장 비슷할 때에
    Hyperparameter로 지정한다는 말인가요?

    2. 그 Hyperparameter를 지정하고 나서, k번의 반복 중 그 Hyperparameter가 선택된 그 때 train set에 대하여 이미 train 된 모델을 마지막 test data에 대해 모델을 1회 평가하는건가요? 즉
    Hyperparameter를 찾은 후에 다시 train을 시킬 필요는 꼭 없는건지 궁금합니다.

    • 1. Validation Fold로 측정한 성능치(위 그림에서 E1 ~ E10)의 평균(E)을 Hyperparameter로 지정한다는 것입니다.
      k개 결과는 k번의 iteration 시 각각 해당 Validation fold(위 그림에서 Test fold)로 측정한 모델 성능치이며, 이 모델 성능치들의 평균값을 Hyperparameter로 지정하여 기계학습 모델의 성능을 평가합니다.
      절차를 좀더 상세히 설명드리자면,
      ⑤에서는 각 iteration 마다 (k-1)개의 Train Fold로 깡통머신에 학습을 시킨 후, 1개의 Validation Fold로 학습된 머신의 성능을 측정합니다.
      ⑥에서는 k번의 iteration 시 측정된 머신의 성능치 k개의 평균을 Hyperparameter로 지정합니다.

      2. Hyperparameter는 기계학습 모델의 외부 튜닝 옵션이므로, 최적 모델을 생성하기 위해 기계학습 수행 전 적용합니다. 따라서 일반 기계학습 parameter와 달리 Hyperparameter로 train 시키지는 않습니다. k-fold 교차 검증 기법에서는 Hyperparameter가 지정되면 Training set가 아닌, 별도의 Test set로 모델을 1회 평가합니다. (참고로 Test set는 Test Data의 set이며, 위 그림에서의 Training set의 Test fold가 아닙니다.)
      Hyperparameter 값을 최적화하기 위해 grid search, random search, cross validation 등 많은 연구가 진행되고 있다고 하네요.

      답변이 잘되었는지 모르겠네요.. 보시고 이해가 잘 안되시면 다시 말씀해주세요^^

  • 친절하게 답변해주셔서 너무 감사합니다! 이해가 아직은 완전히 되지 않아서 한번 더 문의드려도 될까요..

    hyperparameter로 지정한다는 말이 잘 와닿지가 않습니다

    현재 hyperparameter를 튜닝할 때 cross validation 기법을 사용하려 합니다

    여러 글들을 읽어보고 제가 이해한 순서는 이렇습니다.

    1. 전체 data set이 있을 때 그 안에 Y라는 변수를 예측하기 위해 어떤 한 가지 머신러닝 기법을 이용하려 합니다.

    2. 단순히 2방향 홀드아웃을 하게 되면, train data, test data로만 나누어지기 때문에 고정된 hyperparameter에 대해서 train data를 train 시켰을 때의 성능과, 일반적인 test data로 일반적인 성능을 검증할 수 있습니다.

    3. 여기서 hyperparameter를 튜닝하기를 원합니다.(alpha라는 hyperparameter 값이 있음. 0~1 사이의 값을 가짐) 그래서 3방향 홀드아웃으로 train data, validation data, train data로 나눈 후, train data에 대해서 alpha를 0,0.5,1 임의로 3가지의 값을 준 후 train data에 train을 하고 나서 validation data로 검증을 하면 0.0.5,1의 3가지의 값에 대한 모델의 성능이 나옵니다. 이 때 가장 성능을 높인 값이 0.5라면, 0.5로 hyperparameter를 선택하고, 다시 train data와 validation data를 합쳐서 alpha를 0.5로 두고 train 시킨 후 최종적으로 test data로 일반적인 성능을 검증합니다.

    4. 이 때 hyperparameter를 튜닝할 때 cross validation 기법을 사용하게 되면

    우선 train / test 로 나누어진 후에
    train data 안에서 10-fold로 나누어 각각 별개의 validation data를 가집니다.
    alpha 값을 0,0.5,1를 달리하면서 0일 때 CV를 통하여 10개의 각각 validation data로 평가점수가 나오면 그 점수들의 평균을, alpha가 0일 때의 성능으로 봅니다.
    마찬가지로 0.5, 1 모두 수행하여 평균 값이 3개가 나오면 그 중 가장 성능이 좋은 평균값일 때의 hyperparameter를 선택하고, 3번처럼 처음에 남겨진 test data를 제외하고 다시 모두 합쳐서 지정된 hyperparameter를 가진 머신러닝을 다시 train 시켜 test data로 일반적인 성능을 검증합니다.

    1. 그래서 제가 생각하기에 글과 답변해주신 걸 다시 읽어보면, alpha 값에 따라 (0,0.5,1) 3가지를 모두 수행한게 아니라hyperparameter를 튜닝하기 위한 알고리즘이 아니라 내가 궁금한 hyperparamter(alpha)를 임의로 0.5로 하나 잡고, 10-fold에 대해 hyperparameter가 0.5일 때의 평균값을 본 것인가요?

    2. 그렇다면 hyperparameter라는 것은 train 시키기 전에 훈련에 필요한 환경? 필요한 조건? (세탁기를 돌릴 때 시간이라는 hypermarameter가 하나 있다면, 1시간을 할지, 2시간을 할지 골라야하는것처럼)으로 저는 현재 이해하고 있는데, 지정한 hyperparameter로 test set으로 검증한다는 것이 와닿지가 않습니다. 임의의 값을 넣은 hyperparameter로 CV를 통해 값의 평균을 찾은 다음에 그럼 현재 모델이 10개의 모델이 나온 것인데, 어떤 모델로 test set을 검증하는 것이지요?

    긴 글 읽어주셔서 감사합니다!

    • hyperparameter로 지정한다는 말은 특정 hyperparameter값을 가지는 모델의 성능치로 지정한다는 뜻인데 저의 이해가 부족하여 잘못 표현하였습니다. 인공지능 부분은 저도 깊은 지식이 없어 양해부탁드립니다. ^^;

      1. 10-fold CV에서 hyperparameter(alpha)가 0.5일 때를 가정해보면, 9개의 train fold로 학습시키고, 학습된 모델을 나머지 1개의 validation fold로 측정하는 과정을 10번 수행하여 생성된 10개의 정확도(Accuracy) 수치의 평균값을 구하는 것입니다.
      말씀하신 Hyperparameter(alpha)값(0, 0.5, 1)은 각각의 기계학습 모델로 볼 수 있고, 0일 때, 0.5일 때, 1일 때 k-fold cross validation을 수행하여 3개의 학습모델 중 정확도(Accuracy)가 가장 높은 최적의 Hyperparameter(alpha)를 가지는 모델을 선정(Hyperparameter 튜닝)할 수 있습니다.

      2. Hyperparameter는 모델 학습 전에 직접 설정해주어야하는 변수이며, 신경망에서 뉴런의 수, 학습률 등을 말합니다. 1번에서 Hyperparameter(alpha)가 0.5를 가지는 모델을 선정하였다면, Hyperparameter(alpha) = 0.5를 가지는 1개의 모델을 Test set로 최종 평가(검증)한다는 뜻입니다.

      저도 공부가 많이 되네요. 혹시 글에서 잘못된 점이 있다면 말씀해주세요~ 확인하고 정정하도록 하겠습니다. 감사합니다!^^