교차 유효성 검사 후 '테스트'데이터 집합을 어떻게 사용합니까?


25

내가 본 일부 강의자습서 에서는 데이터를 교육, 유효성 검사 및 테스트의 세 부분으로 나누는 것이 좋습니다. 그러나 테스트 데이터 세트를 어떻게 사용해야하는지, 전체 데이터 세트에 대해 교차 검증보다이 방법이 더 나은 방법은 명확하지 않습니다.

데이터의 20 %를 테스트 세트로 저장했다고 가정 해 봅시다. 그런 다음 나머지를 가져 와서 k 폴드로 나누고 교차 유효성 검사를 사용하여이 데이터 세트에서 알 수없는 데이터를 가장 잘 예측하는 모델을 찾습니다. 우리가 찾은 최고의 모델이 75 %의 정확도를 제공한다고 가정 해 봅시다 .

다양한 Q & A 웹 사이트에 대한 다양한 자습서와 많은 질문에 따르면 이제 저장된 (테스트) 데이터 세트에서 모델을 확인할 수 있다고합니다. 그러나 나는 아직도 그것이 정확히 어떻게 이루어 졌는지, 요점이 무엇인지 알 수 없습니다.

테스트 데이터 세트에서 정확도가 70 % 라고 가정 합니다. 그럼 다음에 무엇을해야합니까? 테스트 데이터 세트에서 높은 점수를 얻을 때까지 다른 모델을 시도한 다음 다른 모델을 시도합니까? 그러나이 경우 제한적인 (20 %) 테스트 세트에 맞는 모델을 찾는 것처럼 보입니다 . 그렇다고 일반적으로 가장 적합한 모델을 찾을 수는 없습니다.

또한 이 점수가 제한된 데이터 세트에서만 계산되는 경우 모델의 일반적인 평가로이 점수를 어떻게 고려할 수 있습니까? 이 점수가 낮 으면, 우리는 운이 좋지 않고 "나쁜"테스트 데이터를 선택했을 것입니다.

반면에 우리가 가진 모든 데이터를 사용하고 k- 폴드 교차 검증을 사용하여 모델을 선택하면 우리가 가진 전체 데이터 세트 에서 알 수없는 데이터를 가장 잘 예측하는 모델을 찾을 수 있습니다.


1
해당 테스트 세트에서 최상의 모델을 평가하고 성능을보고하십시오. 모델 성능에 대한 최상의 추정치 입니다. Yaser Abu-Mostafa의 "도서에서 배우기"라는 훌륭한 책의 첫 두 장을 읽어 보는 것이 좋습니다. 간결하고 접근성이 뛰어납니다. work.caltech.edu/telecourse.html
Vladislavs Dovgalecs

1
제안하신 책에 감사드립니다! 그러나 질문에 대한 귀하의 답변에 관해서는- "모델의 성능에 대한 최상의 추정"이라고 말하지만 실제로 는 작은 (20 %) 테스트 세트 에서 모델성능에 대한 추정치입니다. 일반적으로 모델 성능을 의미합니다.
Serhiy

2
실제로는 일반적으로 모델의 성능을 가장 잘 추정합니다. 모델에 편차가 있거나 편차가 심할 수 있지만 테스트 세트에서 모델의 성능은 보이지 않는 데이터에서 어떻게 수행되는지를 나타내는 가장 좋은 지표입니다.
블라디슬라프 Dovgalecs

고마워 제온! 나에게 여전히 분명하지 않은 유일한 것은 테스트 데이터 세트를 사용하여 모델을 평가 한 후에 무엇을 하는가?
Serhiy

결과에 만족하는 경우 모델을 제공하거나 모델을 개선하기 위해 더 나은 기능 / 알고리즘 / 더 많은 데이터를 찾으십시오.
Vladislavs Dovgalecs

답변:


20

이것은 교차 유효성 검사 및 테스트 세트 에 관해 내가 대답 한 다른 질문과 유사 합니다 . 여기서 이해해야 할 핵심 개념은 독립적 인 데이터 세트 입니다. 두 가지 시나리오 만 고려하십시오.

  1. 리소스가 많은 경우 하나의 데이터 집합을 수집하고 교차 유효성 검사를 통해 모델을 학습하는 것이 이상적입니다. 그런 다음 완전히 독립적 인 다른 데이터 집합을 수집 하고 모델을 테스트 합니다. 그러나 앞에서 말했듯이 이것은 많은 연구자들에게는 일반적으로 불가능합니다.

내가 운이 좋지 않은 연구원이라면 어떻게해야합니까? 글쎄, 당신은 그 정확한 시나리오를 모방하려고 할 수 있습니다 :

  1. 모델 교육을 수행하기 전에 데이터를 분할하여 옆으로 두십시오 ( 교차 유효성 검사 중에는 절대 손대지 마십시오 ). 이는 위의 이상적인 시나리오에서 언급 한 것과 동일한 독립적 인 데이터 집합을 시뮬레이션하기위한 것입니다. 동일한 데이터 세트에서 가져 왔지만 모델 학습에서는 해당 샘플에서 정보를 가져 오지 않습니다 (교차 유효성 검사를 수행하는 모든 데이터가 사용되는 경우). 모델을 학습 한 후에는 해당 모델을 테스트 세트에 적용 할 수 있습니다.이 설정은 다시는 훈련 중에 볼 수 없었으며 결과를 얻었습니다. 이것은 수 있도록하기위한 것입니다 것은 확실 모델은 더 일반화하고 방금 배운하지 않은 사용자의 데이터를.

다른 문제를 해결하려면 :

테스트 데이터 세트에서 70 %의 정확도를 얻었으므로 다음에 무엇을해야합니까? 테스트 데이터 세트에서 높은 점수를 얻을 때까지 다른 모델을 시도한 다음 다른 모델을 시도합니까?

일종의 아이디어는 데이터에서 가능한 최고의 모델을 만든 다음 이전에는 볼 수 없었던 더 많은 데이터에서 평가하는 것입니다. 교차 유효성 검사 체계를 다시 평가할 수 있지만 조정 된 모델 (예 : 하이퍼 매개 변수)이 있으면 해당 모델이 최선의 성능을 발휘했기 때문에 해당 모델을 계속 사용하게됩니다. 핵심은 튜닝을 위해 테스트 데이터를 사용하지 않는 것 입니다. 테스트 데이터의 결과는 '일반적인'데이터에 대한 모델의 성능입니다. 이 프로세스를 복제하면 데이터 집합 (전체 지점)의 독립성이 제거됩니다. 이것은 또한 시험 / 검증 데이터 에 관한 또 다른 질문에서 다루어진다 .

또한 제한된 데이터 세트에서 계산 된 경우이 점수를 모델의 일반 평가로 어떻게 간주 할 수 있습니까? 이 점수가 낮 으면 "나쁜"테스트 데이터를 선택하는 것이 불행했을 것입니다.

데이터를 올바르게 분할 한 경우에는 불가능합니다. 클래스 밸런싱을 위해 잠재적으로 계층화되었지만 데이터를 무작위로 분할해야합니다. 데이터 집합이 데이터를 세 부분으로 분할 할 정도로 충분히 큰 경우 테스트 하위 집합은 잘못된 데이터를 선택했을 가능성이 매우 낮아야합니다. 모델이 지나치게 적합했을 가능성이 큽니다.


3
자세한 설명 감사합니다! 나에게 여전히 분명하지 않은 유일한 것은 테스트 데이터 세트를 사용하여 모델을 평가 한 후에 무엇을 하는가? 결과가 실제로 낮 으면 어떻게해야합니까? 우리는 다른 모델을 시도합니까?
Serhiy

위에서 말했듯이 교차 검증을 다시 평가하고 모델 훈련에 '테스트'데이터를 사용하지 않는 한 분석법을 개선 할 수 있는지 확인할 수 있습니다. 결과가 낮 으면 모델을 과적 합했을 수 있습니다. 데이터 세트에는 예측력이 너무 많을 수 있습니다.
cdeterman

교차 검증이 단순히 훈련과 테스트 세트로 반복적으로 분할되지는 않습니다 (예 : 테스트 세트는 첫 20 %, 두 번째 20 %, 세 번째 등). 아니면 테스트 n 시간 동안 무작위로 20 %를 따서 평균 정확도 계산) 테스트 세트로하는 것과 똑같은 일을합니까? 테스트 할 때까지 알고리즘에 전혀 표시하지 않습니까?
Zelphir Kaltstahl

2
@Zelphir 아니오, 각 접힘은 각 하이퍼 파라미터 조합으로 여러 번 평가됩니다. 최상의 결과를 선택하면 '독립적 인'테스트 세트보다 더 높은 결과를보고 할 수 있습니다. 아이디어는 이러한 매개 변수에서 일반화되는 매개 변수를 확인하고 해당 아키텍처를 테스트 세트에서 사용하여 모델의 '일반화 가능'여부를 판별 한 적이 없습니다.
cdeterman

1
실제로 독립 테스트 세트의 성능을 보고 모델을 다시 학습하기로 결정 하면 테스트 세트가 더 이상 완전히 독립 되지 않습니다 . 사실 완벽한 정확도를 얻을 때까지이 작업을 여러 번 수행 할 수 있습니다. 학문적 참조와 관련하여, 나는 "데이터로부터 배우기"책을 추천하며, 저자 ( work.caltech.edu/telecourse.html ) 는 무료 온라인 강좌도 있습니다 .
마이클

4

원시 또는 최소 전처리 된 데이터 세트 (예 : one-hot 인코딩 및 / 또는 NA 제거)에서 기본 설정으로 모델을 학습하는 경우 별도의 테스트 세트가 필요하지 않습니다. 훈련 세트 및 검증 세트에 대해 테스트하거나 교차 검증을 사용하여 전체 세트에 대해 훈련하여 성능을 평가하십시오.

그러나 데이터에 대한 지식으로 인해 원래 전략을 변경하면 결과가 "오염"됩니다. 몇 가지 예는 다음과 같습니다.

  • 모델 선택 : 물류, 올가미, 랜덤 포레스트, XGBoost를 지원하고 벡터 머신을 지원하고 최상의 모델을 선택했습니다.

  • 매개 변수 조정 : 최적의 하이퍼 파라미터를 찾기 위해 XGBoost를 조정했습니다.

  • 기능 선택 : 역 선택, 유전자 알고리즘, 보 루타 등을 사용하여 모델에 포함 할 기능의 최적 하위 집합을 선택했습니다.

  • 누락 된 대치 : 평균 또는 다른 변수를 기반으로하는 간단한 모형으로 누락 된 변수를 대치했습니다.

  • 피처 변환 : 숫자 변수를 z- 점수 (평균과의 표준 편차 수)로 대체하기 위해 중심 변수를 조정했습니다.

위의 모든 경우에 단일 홀드 아웃 세트 또는 교차 유효성 검사를 사용하더라도 의사 결정에 향후 데이터에없는 정보를 사용하기 때문에 실제 성능에 대한 현실적인 추정치를 제공하지 않습니다. 대신, 데이터에 가장 적합한 모델, 최상의 하이퍼 파라미터, 최적의 기능 세트 등을 선택하고 전략에 따라 데이터에 약간 "비 적합"할 수 있습니다. 실제 성능을 정직하게 추정하려면 의사 결정 프로세스에 전혀 들어 가지 않은 데이터에 대해 점수를 매길 필요가 있으므로 교육 (모델링) 및 검증 ( 모델, 피처, 하이퍼 파라미터 등) 선택.

테스트 세트를 유지하는 대신 중첩 교차 검증이라는 기술을 사용할 수 있습니다. 이를 위해서는 전체 모델링 전략 (변형, 대치, 기능 선택, 모델 선택, 하이퍼 파라미터 튜닝)을 비모수 함수로 코딩 한 다음 단순히 전체 함수에 대해 마치 모델 적합 함수 인 것처럼 교차 검증을 수행해야합니다. 이것은 대부분의 ML 패키지에서 수행하기 어렵지만 랩퍼를 사용하여 학습 전략을 정의한 다음 랩핑 된 학습자를 리샘플링하여 mlr 패키지로 R에서 매우 쉽게 구현할 수 있습니다.

https://mlr.mlr-org.com/articles/tutorial/nested_resampling.html


1

나는 당신이 분류를하고 있다고 가정하고 있습니다.

데이터를 가져 와서 70/30을 trainingData / testData 하위 세트로 나눕니다. trainingData 서브 세트를 가져 와서 다시 70/30을 trainingData / validateData 서브 세트로 분할하십시오. 이제 원본 데이터의 세 가지 하위 집합 인 trainingData (.7 * .7), validateData (.7 * .3) 및 testData (.3)가 있습니다.

trainingData를 사용하여 모델을 훈련시킵니다. 그런 다음 validateData를 사용하여 모델의 성능을 확인합니다. validateData는 trainingData와 독립적으로 생각할 수 있으므로 모델의 일반화 수준을 잘 평가합니다. 75 %의 정확도를 달성했다고 가정 해 봅시다.

이제 모델을 임의의 횟수만큼 재교육하십시오. 재 훈련 할 때마다 다른 하이퍼 파라미터 세트 (처음에 모델에 공급되는 매개 변수와 모델이 최적화하는 매개 변수)를 평가하지만 여전히 trainingData 하위 세트를 사용합니다. 재 훈련 할 때마다 validateData의 성능을 확인하여 새 모델의 일반화 수준을 다시 확인합니다.

평가하려는 하이퍼 파라미터의 모든 조합을 확인한 후 validateData에서 최상의 성능을 제공하는 하이퍼 파라미터 세트를 선택하십시오. validateData에서 최고의 성능을 80 % 정확도로 가정하십시오. 이들은 최종 하이퍼 파라미터이며 해당 하이퍼 파라미터에 의해 정의 된 모델은 다음 단계에서 사용할 모델입니다.

이제 최종 하이퍼 파라미터를 사용하는 모델을 사용하여 testData를 평가하십시오. 이 전체 프로세스가 시작된 이후 testData가 처음으로 터치되었습니다! validateData의 성능과 비슷한 testData 성능을 얻으면 (보통 약간 낮지 만) 모델이 예상대로 작동하고 잘 일반화된다고 확신 할 수 있습니다! 이런 일이 발생하면 이것이 최종 모델입니다!

왜이 모든 일을합니까? 과적 합을 피하려고합니다. 모델을 훈련하고 튜닝 (일명 검증) 할 때 사용하는 데이터에 과도하게 적합 할 위험이 항상 있습니다. 하나의 데이터 세트 만 사용하여 교육, 조정 (검증) 및 테스트를 수행하면 해당 데이터를 과도하게 적합하게 만들 가능성이 높고 일반화되지 않습니다. 교육 및 테스트 데이터 세트를 분리하고 (테스트 데이터를 사용하여 튜닝한다고 가정하면) 내부를 직접 확인할 수는 있지만 여전히 테스트 데이터를 과적 합할 가능성은 여전히 ​​있습니다. 그렇기 때문에 우리는 세 번째 데이터 세트를 분석하고 유효성을 검사하므로 내부적으로 정직하게 유지할 수있는 추가 계층이 있습니다. validateData를 사용하여 조정하면 우리가 overfitting에서 trainingData로 넘어 가지 않습니다. testData를 사용한 최종 테스트를 통해 우리는 validateData에 과적 합하지 않습니다.


이 답변은 허용되는 답변과 어떻게 다릅니 까?
Jan Kukacka

원래 질문은 교차 유효성 검사가 포함되지 않은 워크 플로에 대해 명시 적으로 묻는 것입니다. 나는 그것이 어떻게 작동하고 왜 신뢰할 수 있는지 묻는 그의 질문을 읽었습니다. 승인 된 답변에는 여전히 교차 검증이 포함 된 워크 플로우에 대해 설명합니다. 누군가가 초보자이고 아직 그 시점에 있지 않은 경우 사람들이 반드시 교차 유효성 검사를 사용하지 않고 어떻게하는지 설명하고 싶었습니다. 게시가 잘못된 경우 죄송합니다. 저는 새로운 사용자이며 규칙을 어 기지 않았습니다.
John D

0

다음과 같이 봅시다.

  1. 상습

    a) 교육 데이터-모델 매개 변수를 선택하는 데 사용됩니다.

     i) E.g., finding intercept and slope parameters for an ordinary linear 
        regression model. 
    
     ii) The noise in the training data-set is used in some extent 
         in over-fitting model parameters. 
    

    b) 유효성 검사 데이터-하이퍼 파라미터 선택에 사용됩니다.

     i)  E.g., we may want to test three different models at step 1.a, say 
         linear model with one, two or three variables.   
    
     ii) The validation data-set is independent from training data, and thus, they provide 
         'unbiased' evaluation to the models, which help to decide which 
         hyper-parameter to use. 
    
     iii) We note that, a model trained in 1.a, say y = b_0+b_1*x_1, does 
         not learn anything from this data-set. So, the noise in this data- 
         set is not used to over-fit the parameters (b_0, b_1), but, over- 
         fit exists in choosing which linear model to use (in terms of 
         number of variables). 
    

    c) 시험 데이터-위의 두 단계에서 출력의 신뢰를 얻는 데 사용

    i) Used once a model is completely trained
    
  2. 1 부를 보는 또 다른 방법

    a) 우리의 모델 후보 풀은 5-dimenson 세트입니다.

    i) Dimension 1: number of variables to keep in the regression model, 
       e.g., [1, 2, 3].
    
    ii) Dimension 2-5: (b_0, b_1, b_2, b_3). 
    

    b) 1a 단계는 모델 후보를 5 차원에서 1 차원으로 줄입니다.

    c) 1b 단계는 모델 후보를 1 차원에서 1 차원으로 0 차원으로 줄입니다.

    d) 그러나 OP는 위의 '최종'출력이 테스트 데이터 세트에서 충분히 성능이 좋지 않다고 생각할 수 있으므로 일반적인 선형 회귀 대신 릿지 회귀를 사용하여 전체 프로세스를 다시 실행합니다. 그런 다음 테스트 데이터 세트가 여러 번 사용되므로이 데이터의 노이즈로 인해 선형 회귀 또는 능선 회귀를 사용할지 여부를 결정하는 데 약간의 오차가 생길 수 있습니다.

    e) 매개 변수, 하이퍼 파라미터, 모델 유형 및 전처리 방법이 포함 된 고차원 모델 풀을 처리하기 위해 우리가 이용할 수있는 데이터로 분리되는 것은 본질적으로 의사 결정 프로세스를 정의합니다.

    i)  Sequentially reducing the model pool to zero-dimension.
    
    ii) Allocating data noise overfitting to different steps of dimension 
        reductions (overfitting the noise in the data is not avoidable but 
        could be allocated smartly). 
    
  3. OP의 질문에 대한 결론 및 답변

    a) 2 분할 (트레이닝 및 테스트), 3 분할 (트레이닝, 검증 및 테스트) 또는 더 많은 스플릿 수는 본질적으로 차원을 줄이고 데이터를 할당하는 것 (특히 노이즈 및 과적 합의 위험)에 관한 것입니다.

    b) 어떤 단계에서 '최종'모델 후보 풀이 나온 다음 차원을 순차적으로 줄이는 프로세스를 설계하는 방법을 생각할 수 있습니다.

    i) At each step of reducing the dimensions, the output is satisfactory, 
      e.g., not using just 10 data points with large noise to estimate a 
      six-parameter liner model. 
    
    ii) There are enough data for you to reduce the dimension to zero 
       finally. 
    

    c) 달성 할 수없는 경우 b

    i) Use model and data insight to reduce the overall dimensionality of 
      your model pool. E.g., liner regression is sensitive to outliers thus 
      not good for data with many large outliers. 
    
    ii) Choose robust non-parametric models or models with less number of 
       parameter if possible. 
    
    iii) Smartly allocating the data available at each step of reducing the 
        dimensionality. There is some goodness of fit tests to help us decide 
        whether the data we use to train the model is enough or not. 
    
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.