홀드 아웃 유효성 검사 및 교차 유효성 검사


54

나에게 홀드 아웃 유효성 검사는 쓸모없는 것 같습니다. 즉, 원래 데이터 세트를 두 부분으로 나누고 (훈련 및 테스트) 테스트 점수를 일반화 척도로 사용하는 것은 다소 쓸모가 없습니다.

K- 폴드 교차 검증은 일반화에 대해 더 나은 근사치를 제공하는 것으로 보입니다 (모든 지점에서 학습하고 테스트하므로). 그렇다면 표준 보류 검증을 사용하는 이유는 무엇입니까? 아니면 그것에 대해 이야기?


10
왜 쓸모없는 것 같아? 장점과 단점에 대한 공식적인 분석은 통계 학습 이론의 요소 섹션 7을 읽을 수 있습니다. 통계적으로 말하자면 k- 폴드가 더 좋지만 테스트 세트를 사용하는 것이 반드시 나쁘지는 않습니다. 직관적으로, 테스트 세트 (정확하게 사용 된 경우)는 실제로 훈련에 전혀 사용 되지 않은 데이터 세트라는 것을 고려해야합니다 . 따라서 어떤 의미에서 모델을 평가하는 데 확실히 유용합니다. 또한 k-fold는 매우 비싸므로 k-fold가 수행하는 것에 대한 일종의 "근사치"입니다 (그러나 계산 능력이 낮은 사람에게는).
Charlie Parker

확실한. 이론적 인 관점에서 K-fold는 더 정확하지만 계산 비용이 약간 더 비쌉니다. 문제는 항상 K- 폴드 교차 검증을하지 않는 이유는 무엇입니까?

2
내가 참조. 나는 그 이유가 항상 계산적이라고 주장한다. K-fold는 통계적 관점에서 일반화 오류를 더 잘 근사합니다. K-fold는 제가 선택한 선택 방법입니다. 홀드 아웃은 구현하기가 훨씬 간단하며 많은 모델을 교육 할 필요가 없습니다. 실제로 모델을 훈련시키는 것은 상당히 비쌀 수 있습니다.
Charlie Parker

1
맞아요.하지만 "너무 계산이 비싼"논쟁은 상당히 연약하다고 생각합니다. 거의 항상, 우리는 가장 정확한 모델을 개발하는 것을 목표로하고 있습니다. 그러나이 역설은 문헌에서 수행 된 많은 실험에 단일 보류 검증 세트 만있는 경우가 있습니다.

1
질문-통계 학습 이론 섹션 7.10.1 "K 폴드 교차 검증"의 요소는 시험 데이터를 훈련 데이터와 완전히 분리시키는 것이 이상적이며, k- 폴드 검증은 다음과 같은 타협점을 나타냅니다. 데이터는 여러 번 부족합니다. 나는 아직도 통계에 익숙하지 않다. 교차 검증이 실제로 얼마나 정확한지 지적 할 수 있습니까?
numX

답변:


21

내 유일한 추측은 3 시간의 프로그래밍 경험으로 홀드 아웃 할 수 있다는 것입니다. 다른 하나는 원칙적으로 1 주일이 걸리고 실제로는 6 개월이 걸립니다.

원칙적으로 간단하지만 코드 작성은 지루하고 시간 소모적입니다. Linus Torvalds는 "나쁜 프로그래머는 코드에 대해 걱정합니다. 좋은 프로그래머는 데이터 구조와 관계에 대해 걱정합니다." 통계를하는 많은 사람들은 자신의 잘못없이 나쁜 프로그래머입니다. R에서 k- 폴드 교차 검증을 효율적으로 수행하려면 (그리고 이는 한 번 이상 디버깅하고 두 번 이상 사용하는 것이 끔찍한 방법으로) 데이터 구조에 대한 모호한 이해가 필요하지만 데이터 구조는 일반적으로 "소개에서 생략됩니다. 통계 프로그래밍에 대한 자습서 " 노인이 처음으로 인터넷을 사용하는 것과 같습니다. 실제로 어렵지는 않지만 처음으로 알아내는 데 30 분 정도가 더 걸리지 만 새롭고 혼란 스럽기 때문에 무시하기 쉽습니다.

다음과 같은 질문이 있습니다 : R에서 홀드 아웃 검증을 구현하는 방법 . 어차피 공격자에게 의도 된 범죄는 없습니다. 그러나 많은 사람들이 코드를 이해하지 못합니다. 사람들이 전혀 교차 검증을하고 있다는 사실만으로도 나를 행복하게 할 수 있습니다.

그것은 어리 석고 사소한 것처럼 들리지만, 이것은 개인적인 경험, 그 사람이었고 그 사람이었던 많은 사람들과 일한 것에서 비롯됩니다.


18
어쩌면 CS를 전공 한 사람으로서 나는 이것에 대해 약간 기울어 진 견해를 가지고 있지만 홀드 아웃 유효성 검사를 올바르게 구현할 수 있다면 (이미 데이터 세트를 두 부분으로 나누고 하나는 훈련을 위해, 다른 하나는 테스트를 위해 사용하는 것을 의미합니다), 당신이 변경해야 할 것은 분할의 비율이며 모든 것을 루프에 넣습니다. 이것이 큰 문제라고 믿기 힘들 것 같습니다.
Voo

3
@Voo : 또한 여기에서 프로그램을 할 수있는 것만으로는 충분하지 않습니다. 분할 절차 중에 어떤 confounders를 고려해야하는지 판단 할 수있을 정도로 문제를 충분히 이해해야합니다. 예를 들어 stats.stackexchange.com/questions/20010/…을 참조하십시오 . 나는 이런 종류의 문제를 "순수한"코딩 문제보다 더 자주 본다고 생각한다 (아무도 모르지만 데이터 매트릭스에서 행의 행 분할을 간신히 코딩 할 수없는 사람은 일반적으로 분할하지 않는 높은 수준의 실수를한다) 예 : 환자 수준에서)
cbeleites

또한 측정 장비가 생성하는 파일을 분리하여 프로그래밍하지 않고 적절한 (예 : 환자 / 측정 일 / ...) 홀드 아웃 분할을 수행 할 수 있습니다.
cbeleites

5
유권자에게 : 논리에 의문을 제기하는 별도의 질문을했습니다. stats.stackexchange.com/q/108345/36229
shadowtalker

1
두 가지 교차 검증 방법의 차이점을 설명하는 대답은 인간이 배우고, 시간이
지나도

40

홀드 아웃은 데이터를 무작위로 나누는 것과 독립적 인 테스트를위한 유효성 검사 실험을 설계하는 것 사이에는 결정적인 차이가 있지만 독립적 인 테스트 세트를 통한 유효성 검사와 동의어로 사용되는 경우가 많습니다.

독립적 인 테스트 세트 를 사용하여 리샘플링 또는 홀드 아웃 검증으로 측정 할 수없는 일반화 성능을 측정 할 수 있습니다. 기존 모델을 새 데이터에 사용할 수있는 기간 (예 : 계기 드리프트 등)을 알기 위해서는 중요합니다. 보다 일반적으로, 이는 적용 성의 한계를 정의하기 위해 외삽 성능을 측정하는 것으로 설명 될 수있다.

홀드 아웃이 실제로 유리한 또 다른 시나리오는 다음과 같습니다. 훈련 및 테스트 데이터가 올바르게 분리되도록하는 것이 매우 쉽습니다 . 예를 들어 리샘플링 유효성 검사보다 훨씬 쉽습니다.

  1. 분할 결정 (예 : 사례의 무작위 할당 수행)
  2. 법안
  3. 교육 사례의 측정 및 참조 데이터 => 모델링 \ 측정 또는 테스트 사례의 참조는 모델링하는 사람에게 전달되지 않습니다.
  4. 최종 모델 + 보류 된 사례의 측정 => 예측
  5. 보류 된 사례에 대한 예측과 예측을 비교합니다.

필요한 분리 수준에 따라 각 단계는 다른 사람이 수행 할 수 있습니다. 첫 번째 수준으로, 테스트 케이스의 데이터 (측정은 물론 측정)를 모델러에게 넘겨주지 않으면 테스트 프로세스에서 테스트 데이터가 유출되지 않을 것입니다. 두 번째 수준에서는 최종 모델 및 테스트 사례 측정이 다른 사람에게 전달 될 수 있습니다.

예, 리샘플링 유효성 검사에 비해 홀드 아웃 추정의 효율성이 낮아 비용을 지불합니다. 그러나 리샘플링 유효성 검사가 사례를 올바르게 분리하지 못한다고 생각하는 많은 논문을 보았습니다 (제 분야에는 많은 클러스터 / 계층 / 그룹 데이터가 있습니다).

분할 절차에서 이전에 감지되지 않은 (순열 테스트를 실행하여) 누출이 있음을 알았을 때 제출 후 일주일 후 원고를 철회하여 리샘플링에 대한 데이터 누출에 대한 교훈을 배웠습니다 (인덱스 계산의 오타).

결과에 대해 동일한 수준의 확실성을 얻기 위해 리샘플링 코드 (예 : 클러스터 된 데이터의 경우)를 기꺼이 확인하려는 사람을 찾는 것보다 홀드 아웃이 더 효율적일 수 있습니다. 그러나 IMHO는 일반적으로 미래의 성능 (예 : 첫 번째 지점)을 측정해야하는 단계 (즉, 기존 모델에 대한 유효성 검사 실험을 설정해야하는 경우) 전에이 작업을 수행하는 것이 효율적이지 않습니다.

작은 표본 크기 상황에서 OTOH는 선택의 여지가 없습니다. 시험 결과가 필요한 결론을 내릴 수있을만큼 정확할 수 있도록 충분한 시험 사례를 보류해야합니다 (기억 수단을 위해 3 개의 시험 사례 중 3 개는 이항 95 % 신뢰 구간은 50:50 추측보다 훨씬 낮은 범위입니다!) Frank Harrell은 적어도 약 ca. 유용한 정확도로 비율 (예 : 정확하게 예측 된 사례의 비율)을 올바르게 측정하려면 100 (테스트) 사례가 필요합니다.


업데이트 : 적절한 분할을 수행하기 어려운 상황이 있으며 교차 검증이 불가능 해집니다. 많은 혼란 자들에게 문제가 있다고 생각하십시오. 이러한 confounders가 엄격하게 중첩 된 경우 분할이 쉽습니다 (예 : 여러 환자를 대상으로 한 연구에서 각 환자의 여러 표본이 있고 각 표본의 여러 세포를 분석 함). 샘플링 계층 구조의 최상위 수준 (환자 별)으로 분할 . 그러나 중첩되지 않은 독립적 인 confounder가있을 수 있습니다 (예 : 테스트를 실행하는 다른 실험자에 의한 일일 변형 또는 분산). 그런 다음 분할이 모두에 대해 독립적인지 확인해야합니다.가장 높은 수준의 confounders (중첩 된 confounders는 자동으로 독립됩니다). 연구 중에 일부 교란자가 식별되는 경우이를 처리하기가 매우 어렵고 검증 실험을 설계하고 수행하는 것이 대리 모델의 교육이나 테스트에 거의 데이터를 남기지 않는 분할을 처리하는 것보다 효율적일 수 있습니다.


6
이 철저한 답변에 +1 이상을 줄 수 있기를 바랍니다. 특히 전문가조차도 그러한 문제를 배제하는 것이 사소한 일이 아니라는 사실을 효과적으로 보여주기 때문에 데이터 유출에 대한 문제를 언급하는 것이 좋습니다. 이것은 좋은 현실 점검입니다!
Marc Claesen

질문을 구걸하지 않습니까? 그렇습니다. 혼란 스러움으로 인해 분할은 어렵지만 단일 홀드 아웃 유효성 검사를 수행하든 k- 겹 교차 검증을 수행하든 상관없이 어렵습니까? (에 관계없이 통찰력있는 답변 감사합니다!)
닐스 폰 바스

1
@NilsvonBarth : 논증이 어떻게 순환하는지 알 수 없습니다. OP는 "[전체적으로] 홀드 아웃 유효성 검사를 사용하는 이유"를 묻고 실용적인 이유를 많이 제시합니다. 제한된 수의 사례를 통계적으로 가장 효율적으로 사용하는 것이 항상 연구 설계의 가장 중요한 속성은 아닙니다. (내 경험상 케이스 번호가 극도로 제한되어 있기 때문에 종종 발생합니다. 홀드 아웃 대신 반복 / 반복 k- 폴드 CV를 권장합니다.) 일부 혼란스러운 사람들에게는 물리적 분할이 가능하고 쉽고 몰래 미리보기를 방지하는 매우 효율적인 방법입니다. 누가 ... 우리는 이중 저를 찾을 수 있는지 알고있다
cbeleites

어떤 시점에서 너무 많은 오 탐지에 대해 맹검 통계 데이터 분석이 필요할 수 있습니까?
cbeleites

2
@NilsvonBarth : 홀드 아웃에 대한 독립성 보장 : 홀드 아웃을 구현하는 것은 쉬운 방법입니다 ( 물리적 홀드 아웃 (즉, 테스트 표본이 제거되고 모델 교육이 완료된 후에 만 ​​측정)). 종종 홀드 아웃이라는 용어는 실제로 데이터의 단일 임의 분할과 훨씬 유사한 의미로 사용됩니다. 그러면 분할에서 실수를 일으킬 수있는 모든 가능성도 홀드 아웃으로 만들 수 있습니다!
cbeleites

8

용어를 약간 정리하는 것이 유용 할 수 있습니다. 우리가 할 수있는 경우 어떤 정수보다 적은 (또는 동일한) 수 여기서 표본의 크기이며, 우리는에 샘플 분할 고유의 서브 샘플을, 당신은 홀드 아웃 검증을 호출 한 후 어떤 것은 단 2 배 정말 ( = 2 ) 교차 검증. 교차 유효성 검사는 특정 모델의 샘플 외부 오류율 (또는 일반화 가능성)을 추정하기위한 도구 일뿐입니다. 샘플 외부 오차율을 추정 할 필요성은 일반적이며 전체 문헌을 낳았습니다. ESL 7 장을 참조하십시오 .n n k kknnkk

따라서 질문에 대답하십시오.

  1. 왜 그것에 대해 이야기합니까? 교육적으로. 홀드 아웃 유효성 검사는 다양하고 많은 변형이있는 매우 유용한 방법의 특별하고 때로는 유용한 유용한 사례로 생각하는 것이 좋습니다.

  2. 왜 사용합니까? 하나가 거대한 데이터 세트를 가질 정도로 운이 좋으면 (관측 측면에서 ) 데이터를 반으로 나누고 다른 반으로 테스트하면 의미가 있습니다. 필요한 것은 모두 한 번 적합하고 한 번 예측하기 때문입니다 ( 회가 아닌 ). 모델에 맞는 수많은 관측치가 있으므로 "대표 본 추정"관점에서 의미가 있습니다.knk

내가 배운 규칙은 이 크면 가 작을 수 있지만 이 작 으면 는 가까워 야합니다 .k n k nnknkn


13
홀드 아웃이 2 배 검증과 동일하다고 생각하지 않습니다. 2 배 검증에서는 두 모델에 적합하고 두 홀드 아웃 세트의 오차를 평균화하기 때문입니다.
Alex

8

모델 선택 및 피팅 절차를 주관적이거나 부분적으로 그렇게하여 코딩 할 수없는 경우 (그래프 등을 포함하여) 홀드 아웃 유효성 검사가 최선일 수 있습니다. (각 CV 폴드마다 Mechanical Turk와 같은 것을 사용할 수 있다고 생각합니다.


6

Andrew Ng가 교차 검증에 관해 스탠포드의 CS 229 클래스에서 언급 한 간단한 지침을 추가하고 싶었습니다. 이것들은 자신의 작업에서 따르는 관행입니다.

하자 데이터 집합에서 샘플의 숫자. 만약 를 사용 남겨 - 한 아웃 교차 검증.m 20mm20

만약 비교적 큰 함께 사용 K 배 교차 검증 염두에두고 계산 비용.케이 ≤의 m20<m100km

이면 정규 k- 폴드 교차 검증 . 또는 계산 능력이 충분하지 않고 이면 홀드 아웃 교차 검증을 사용하십시오.( K = 5 ) m > 10 , 000100<m1,000,000(k=5)m>10,000

만약 사용 홀드 아웃 교차 검증, 그러나 계산 능력을 사용할 수있는 경우는 K-배 교차 유효성 검사를 사용할 수 있습니다 당신이 당신의 모델에서 여분의 성능을 짜내합니다.( k = 5 )m1,000,000(k=5)


5

짧은 답변:

다음과 같은 경우 항상 이상의 CV를 사용하는 것이 좋습니다 .k=5

  • 복잡한 모델
  • 유효성 제약 조건을 준수해야하는 최종 결과

당신은 이것을 위해 휴식을 취할 수 있습니다 :

  • 실제로 큰 데이터 세트에 대한 교육
  • 간단한 모델 훈련
  • 시간이 문제가 될 때 프로토 타이핑

여러분 중 일부는 R로 이것을 프로그래밍하는 것이 문제가 될 수 있다고 언급했습니다. "mlr"패키지를 살펴 보는 것이 좋습니다 . 통합 된 인터페이스로 서로 다른 패키지를 포장하고 실제로 고급 리샘플링 및 성능 평가 방법을 제공합니다.

살펴보기 : http://mlr-org.github.io/mlr-tutorial/release/html/resample/http://mlr-org.github.io/mlr-tutorial/release/html/performance/ index.htm

더 많은 설명-CV가 실제로하는 일은 바이어스 편차 트레이드 오프를 깨는 것입니다.

이제 두 가지 접근 방식으로 해결하려는 문제는 모델 학습에 사용 된 데이터에 따라 조건부 인 일반화 오류를 추정하는 것입니다.

홀드 아웃에는 바이어스 및 분산에 문제가 있습니다.

테스트하는 데이터의 양을 더 작게 만들면 테스트 데이터가 더 이상 기본 분포를 잘 나타내지 않을 수 있으므로 추정 된 일반화 오류에 편차가 발생합니다. 예상 성능이 정확할 것이기 때문에, 이것 자체는 바이어스를 도입하지 않습니다.

그러나 훈련 세트를 더 작게 만들면 기본 분포가 데이터에 잘 표현되지 않고 모델도 데이터에 적합하지 않으므로 비관적 편향이 발생합니다. 훈련 세트를 매우 작게 만들면 차이도 발생합니다.

훈련과 테스트 세트의 규모가 서로를 결정함에 따라, 이것은 비관적 편향 대 고 분산이라는 절충점을 남깁니다.

k - 1k 폴드 교차 검증은 훈련 세트를 크게 유지하고 ( 모든 반복에서 훈련에 데이터 의 의 일부를 사용함) 리샘플링으로 테스트 오류의 분산을 처리함으로써이 문제를 해결합니다. . 모든 반복 후에, 우리는 한 학습자와 함께 데이터 세트의 모든 관찰에 대한 성능을 테스트했습니다. 분명히 이것은 간단한 홀드 아웃보다 더 많은 계산 시간이 필요합니다.k1k

교차 검증은보다 복잡한 (높은 분산) 학습자에게 특히 중요합니다. 일반적으로 계산 비용이 많이 들기 때문에 전체 프로세스를 상당히 시간 집약적으로 만들 수 있습니다.


3

이것들은 모두 유용한 의견입니다. 한 번만 더 고려하십시오. 충분한 데이터가있는 경우 홀드 아웃을 사용하면 특정 모델 (특정 SVM 모델, 특정 CART 모델 등)을 평가할 수 있지만 다른 교차 유효성 검사 절차를 사용하는 경우 문제 상태에서 방법론을 평가할 수 있습니다 )가 아닌 모델 (SVM 방법론, CART 방법론 등)입니다.

도움이 되길 바랍니다.


3

시간이 심각한 데이터로 모델링하는 것은 예외입니다. 이전 데이터를 기반으로 미래를 예측해야하는 경우 K 접기가 작동하지 않는 경우가 있습니다. 테스트 세트는 미래의 데이터 여야하며 교육 단계에서는 절대로 만질 수 없습니다. 전 판매 또는 주식 시장 예측. 이러한 경우에는 보류가 유용합니다.


3

간단히 말하면; 시각. 교차 유효성 검사 훈련 루틴을 k 번 실행합니다 (즉, 각 보류 세트마다 한 번씩). 큰 데이터가있는 경우 하나의 데이터 세트에 대해서만 모델을 학습하는 데 몇 시간 또는 며칠이 걸릴 수 있으므로 교차 유효성 검사를 사용할 때 k를 곱합니다.

따라서 교차 유효성 검사가 가장 좋은 방법이지만 특정 상황에서는 불가능하기 때문에 데이터를 다른 방식으로 모델링하거나 더 나은 모델을 얻기 위해 다른 손실 함수를 시도하는 데 시간이 더 걸릴 수 있습니다.

개인적으로 선호하는 것은 데이터 세트 전체에서 유효성 검사 데이터를 가져 오는 것이므로 데이터의 머리 또는 꼬리에서 단일 10 % 청크를 가져 오는 대신 데이터 세트의 5 포인트에서 2 %를 가져옵니다. 따라서 유효성 검사 데이터가 데이터 전체를 조금 더 대표합니다.


그것은 오래된 질문이자 새로운 답변이지만, "K- 폴드는 더 정확하지만 약간 더 계산적으로 비싸다"는 근거없는 주장에 이의를 제기하기 때문에 이것을 찬성합니다.
Laconic

0

교차 유효성 검사를 항상 적용 할 수있는 것은 아닙니다. 히스토리 데이터를 사용하여 미래 행동에 대한 예측 모델을 학습시키려는 시간 종속 데이터 세트를 고려하십시오. 이 경우 홀드 아웃 유효성 검사를 적용해야합니다.


2
이 경우 정방향 유효성 검사를 수행해야합니다.
Neil G
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.