나에게 홀드 아웃 유효성 검사는 쓸모없는 것 같습니다. 즉, 원래 데이터 세트를 두 부분으로 나누고 (훈련 및 테스트) 테스트 점수를 일반화 척도로 사용하는 것은 다소 쓸모가 없습니다.
K- 폴드 교차 검증은 일반화에 대해 더 나은 근사치를 제공하는 것으로 보입니다 (모든 지점에서 학습하고 테스트하므로). 그렇다면 표준 보류 검증을 사용하는 이유는 무엇입니까? 아니면 그것에 대해 이야기?
나에게 홀드 아웃 유효성 검사는 쓸모없는 것 같습니다. 즉, 원래 데이터 세트를 두 부분으로 나누고 (훈련 및 테스트) 테스트 점수를 일반화 척도로 사용하는 것은 다소 쓸모가 없습니다.
K- 폴드 교차 검증은 일반화에 대해 더 나은 근사치를 제공하는 것으로 보입니다 (모든 지점에서 학습하고 테스트하므로). 그렇다면 표준 보류 검증을 사용하는 이유는 무엇입니까? 아니면 그것에 대해 이야기?
답변:
내 유일한 추측은 3 시간의 프로그래밍 경험으로 홀드 아웃 할 수 있다는 것입니다. 다른 하나는 원칙적으로 1 주일이 걸리고 실제로는 6 개월이 걸립니다.
원칙적으로 간단하지만 코드 작성은 지루하고 시간 소모적입니다. Linus Torvalds는 "나쁜 프로그래머는 코드에 대해 걱정합니다. 좋은 프로그래머는 데이터 구조와 관계에 대해 걱정합니다." 통계를하는 많은 사람들은 자신의 잘못없이 나쁜 프로그래머입니다. R에서 k- 폴드 교차 검증을 효율적으로 수행하려면 (그리고 이는 한 번 이상 디버깅하고 두 번 이상 사용하는 것이 끔찍한 방법으로) 데이터 구조에 대한 모호한 이해가 필요하지만 데이터 구조는 일반적으로 "소개에서 생략됩니다. 통계 프로그래밍에 대한 자습서 " 노인이 처음으로 인터넷을 사용하는 것과 같습니다. 실제로 어렵지는 않지만 처음으로 알아내는 데 30 분 정도가 더 걸리지 만 새롭고 혼란 스럽기 때문에 무시하기 쉽습니다.
다음과 같은 질문이 있습니다 : R에서 홀드 아웃 검증을 구현하는 방법 . 어차피 공격자에게 의도 된 범죄는 없습니다. 그러나 많은 사람들이 코드를 이해하지 못합니다. 사람들이 전혀 교차 검증을하고 있다는 사실만으로도 나를 행복하게 할 수 있습니다.
그것은 어리 석고 사소한 것처럼 들리지만, 이것은 개인적인 경험, 그 사람이었고 그 사람이었던 많은 사람들과 일한 것에서 비롯됩니다.
홀드 아웃은 데이터를 무작위로 나누는 것과 독립적 인 테스트를위한 유효성 검사 실험을 설계하는 것 사이에는 결정적인 차이가 있지만 독립적 인 테스트 세트를 통한 유효성 검사와 동의어로 사용되는 경우가 많습니다.
독립적 인 테스트 세트 를 사용하여 리샘플링 또는 홀드 아웃 검증으로 측정 할 수없는 일반화 성능을 측정 할 수 있습니다. 기존 모델을 새 데이터에 사용할 수있는 기간 (예 : 계기 드리프트 등)을 알기 위해서는 중요합니다. 보다 일반적으로, 이는 적용 성의 한계를 정의하기 위해 외삽 성능을 측정하는 것으로 설명 될 수있다.
홀드 아웃이 실제로 유리한 또 다른 시나리오는 다음과 같습니다. 훈련 및 테스트 데이터가 올바르게 분리되도록하는 것이 매우 쉽습니다 . 예를 들어 리샘플링 유효성 검사보다 훨씬 쉽습니다.
필요한 분리 수준에 따라 각 단계는 다른 사람이 수행 할 수 있습니다. 첫 번째 수준으로, 테스트 케이스의 데이터 (측정은 물론 측정)를 모델러에게 넘겨주지 않으면 테스트 프로세스에서 테스트 데이터가 유출되지 않을 것입니다. 두 번째 수준에서는 최종 모델 및 테스트 사례 측정이 다른 사람에게 전달 될 수 있습니다.
예, 리샘플링 유효성 검사에 비해 홀드 아웃 추정의 효율성이 낮아 비용을 지불합니다. 그러나 리샘플링 유효성 검사가 사례를 올바르게 분리하지 못한다고 생각하는 많은 논문을 보았습니다 (제 분야에는 많은 클러스터 / 계층 / 그룹 데이터가 있습니다).
분할 절차에서 이전에 감지되지 않은 (순열 테스트를 실행하여) 누출이 있음을 알았을 때 제출 후 일주일 후 원고를 철회하여 리샘플링에 대한 데이터 누출에 대한 교훈을 배웠습니다 (인덱스 계산의 오타).
결과에 대해 동일한 수준의 확실성을 얻기 위해 리샘플링 코드 (예 : 클러스터 된 데이터의 경우)를 기꺼이 확인하려는 사람을 찾는 것보다 홀드 아웃이 더 효율적일 수 있습니다. 그러나 IMHO는 일반적으로 미래의 성능 (예 : 첫 번째 지점)을 측정해야하는 단계 (즉, 기존 모델에 대한 유효성 검사 실험을 설정해야하는 경우) 전에이 작업을 수행하는 것이 효율적이지 않습니다.
작은 표본 크기 상황에서 OTOH는 선택의 여지가 없습니다. 시험 결과가 필요한 결론을 내릴 수있을만큼 정확할 수 있도록 충분한 시험 사례를 보류해야합니다 (기억 수단을 위해 3 개의 시험 사례 중 3 개는 이항 95 % 신뢰 구간은 50:50 추측보다 훨씬 낮은 범위입니다!) Frank Harrell은 적어도 약 ca. 유용한 정확도로 비율 (예 : 정확하게 예측 된 사례의 비율)을 올바르게 측정하려면 100 (테스트) 사례가 필요합니다.
업데이트 : 적절한 분할을 수행하기 어려운 상황이 있으며 교차 검증이 불가능 해집니다. 많은 혼란 자들에게 문제가 있다고 생각하십시오. 이러한 confounders가 엄격하게 중첩 된 경우 분할이 쉽습니다 (예 : 여러 환자를 대상으로 한 연구에서 각 환자의 여러 표본이 있고 각 표본의 여러 세포를 분석 함). 샘플링 계층 구조의 최상위 수준 (환자 별)으로 분할 . 그러나 중첩되지 않은 독립적 인 confounder가있을 수 있습니다 (예 : 테스트를 실행하는 다른 실험자에 의한 일일 변형 또는 분산). 그런 다음 분할이 모두에 대해 독립적인지 확인해야합니다.가장 높은 수준의 confounders (중첩 된 confounders는 자동으로 독립됩니다). 연구 중에 일부 교란자가 식별되는 경우이를 처리하기가 매우 어렵고 검증 실험을 설계하고 수행하는 것이 대리 모델의 교육이나 테스트에 거의 데이터를 남기지 않는 분할을 처리하는 것보다 효율적일 수 있습니다.
용어를 약간 정리하는 것이 유용 할 수 있습니다. 우리가 할 수있는 경우 어떤 정수보다 적은 (또는 동일한) 수 여기서 표본의 크기이며, 우리는에 샘플 분할 고유의 서브 샘플을, 당신은 홀드 아웃 검증을 호출 한 후 어떤 것은 단 2 배 정말 ( = 2 ) 교차 검증. 교차 유효성 검사는 특정 모델의 샘플 외부 오류율 (또는 일반화 가능성)을 추정하기위한 도구 일뿐입니다. 샘플 외부 오차율을 추정 할 필요성은 일반적이며 전체 문헌을 낳았습니다. ESL 7 장을 참조하십시오 .n n k k
따라서 질문에 대답하십시오.
왜 그것에 대해 이야기합니까? 교육적으로. 홀드 아웃 유효성 검사는 다양하고 많은 변형이있는 매우 유용한 방법의 특별하고 때로는 유용한 유용한 사례로 생각하는 것이 좋습니다.
왜 사용합니까? 하나가 거대한 데이터 세트를 가질 정도로 운이 좋으면 (관측 측면에서 ) 데이터를 반으로 나누고 다른 반으로 테스트하면 의미가 있습니다. 필요한 것은 모두 한 번 적합하고 한 번 예측하기 때문입니다 ( 회가 아닌 ). 모델에 맞는 수많은 관측치가 있으므로 "대표 본 추정"관점에서 의미가 있습니다.k
내가 배운 규칙은 이 크면 가 작을 수 있지만 이 작 으면 는 가까워 야합니다 .k n k n
모델 선택 및 피팅 절차를 주관적이거나 부분적으로 그렇게하여 코딩 할 수없는 경우 (그래프 등을 포함하여) 홀드 아웃 유효성 검사가 최선일 수 있습니다. (각 CV 폴드마다 Mechanical Turk와 같은 것을 사용할 수 있다고 생각합니다.
Andrew Ng가 교차 검증에 관해 스탠포드의 CS 229 클래스에서 언급 한 간단한 지침을 추가하고 싶었습니다. 이것들은 자신의 작업에서 따르는 관행입니다.
하자 데이터 집합에서 샘플의 숫자. 만약 를 사용 남겨 - 한 아웃 교차 검증.m ≤ 20
만약 비교적 큰 함께 사용 K 배 교차 검증 염두에두고 계산 비용.케이 ≤의 m
이면 정규 k- 폴드 교차 검증 . 또는 계산 능력이 충분하지 않고 이면 홀드 아웃 교차 검증을 사용하십시오.( K = 5 ) m > 10 , 000
만약 사용 홀드 아웃 교차 검증, 그러나 계산 능력을 사용할 수있는 경우는 K-배 교차 유효성 검사를 사용할 수 있습니다 당신이 당신의 모델에서 여분의 성능을 짜내합니다.( k = 5 )
짧은 답변:
다음과 같은 경우 항상 이상의 CV를 사용하는 것이 좋습니다 .
당신은 이것을 위해 휴식을 취할 수 있습니다 :
여러분 중 일부는 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 - 1 폴드 교차 검증은 훈련 세트를 크게 유지하고 ( 모든 반복에서 훈련에 데이터 의 의 일부를 사용함) 리샘플링으로 테스트 오류의 분산을 처리함으로써이 문제를 해결합니다. . 모든 반복 후에, 우리는 한 학습자와 함께 데이터 세트의 모든 관찰에 대한 성능을 테스트했습니다. 분명히 이것은 간단한 홀드 아웃보다 더 많은 계산 시간이 필요합니다.
교차 검증은보다 복잡한 (높은 분산) 학습자에게 특히 중요합니다. 일반적으로 계산 비용이 많이 들기 때문에 전체 프로세스를 상당히 시간 집약적으로 만들 수 있습니다.
간단히 말하면; 시각. 교차 유효성 검사 훈련 루틴을 k 번 실행합니다 (즉, 각 보류 세트마다 한 번씩). 큰 데이터가있는 경우 하나의 데이터 세트에 대해서만 모델을 학습하는 데 몇 시간 또는 며칠이 걸릴 수 있으므로 교차 유효성 검사를 사용할 때 k를 곱합니다.
따라서 교차 유효성 검사가 가장 좋은 방법이지만 특정 상황에서는 불가능하기 때문에 데이터를 다른 방식으로 모델링하거나 더 나은 모델을 얻기 위해 다른 손실 함수를 시도하는 데 시간이 더 걸릴 수 있습니다.
개인적으로 선호하는 것은 데이터 세트 전체에서 유효성 검사 데이터를 가져 오는 것이므로 데이터의 머리 또는 꼬리에서 단일 10 % 청크를 가져 오는 대신 데이터 세트의 5 포인트에서 2 %를 가져옵니다. 따라서 유효성 검사 데이터가 데이터 전체를 조금 더 대표합니다.
교차 유효성 검사를 항상 적용 할 수있는 것은 아닙니다. 히스토리 데이터를 사용하여 미래 행동에 대한 예측 모델을 학습시키려는 시간 종속 데이터 세트를 고려하십시오. 이 경우 홀드 아웃 유효성 검사를 적용해야합니다.