최종 모델을 훈련시키기 위해 항상 전체 데이터 세트를 사용하는 것이 더 낫습니까?


24

선호하는 머신 러닝 모델을 교육, 검증 및 테스트 한 후의 일반적인 기술은 테스트 서브 세트를 포함한 전체 데이터 세트를 사용하여 최종 모델 ( 예 : 제품) 을 배포 하기 위해 학습 하는 것입니다.

내 질문은 : 항상 그렇게하는 것이 최선입니까? 실제로 성능이 저하되면 어떻게됩니까?

예를 들어, 테스트 하위 세트를 분류 할 때 모델의 점수가 약 65 % 인 경우를 가정 해 보겠습니다. 이는 모델이 불충분하게 훈련되었거나 테스트 하위 집합이 특이 치로 구성되어 있음을 의미 할 수 있습니다. 후자의 경우 최종 모델을 학습하면 성능이 저하되고 배포 후에 만 ​​알게됩니다.

내 초기 질문을 다시 표현 :

당신이이 있다면 모델의 1 시간 데모 같은 온보드 내장 된 전자에 고가의 로켓 실험을 배포 등을, 당신은 다시하지 않고 최종 단계의 시험 항목과 재 훈련 된 모델을 신뢰하는 것입니다 새로운 성능을 테스트 했습니까?

답변:


14

모델에 대해 최적의 하이퍼 파라미터를 얻은 후에는 교육 및 교차 검증 등을 수행 한 후 이론적으로 전체 데이터 세트에서 모델을 학습하여 프로덕션에 배포하는 것이 좋습니다. 이론적으로 이것은 더 잘 일반화 될 것이다.

그러나 더 이상 테스트 데이터 세트가 없으므로 테스트 데이터에 대한 통계 / 성능 클레임을 더 이상 청구 할 수 없습니다.

전체 교육 데이터 세트를 사용하여 모델을 프로덕션에 배치하고 새 수신 데이터의 대상 변수 (예 : 프로덕션 모델이 예측중인 데이터)의 실제 값을 알고 있으면 다음과 같이 실시간 성능 메트릭을 계산할 수 있습니다. 이 새로운 데이터는 테스트 데이터와 비슷합니다 (트레이닝 중에는 모델에 보이지 않음). 이 프로세스에서 모델 하이퍼 파라미터를 업데이트하여 성능을 향상시킬 수 있습니다.

그러나 새로운 데이터의 목표 값을 알고 있다면 왜 먼저 모델을 교육 할 것입니까?

일반적으로 충분한 다양성을 가진 충분한 데이터가 있고 데이터를 섞고 나누는 경우 80:20 훈련 : 테스트는 강력한 모델을 훈련시키고 일반화 문제에 대해 걱정할 필요가 없어야한다고 말하고 싶습니다 (물론 모델).


+1, 답변 주셔서 감사합니다! 80/20으로 나누기 전에 데이터 세트를 임의로
섞는

2
보류 테스트 세트의 성능은 올바르게 수행하는 한 전체 모집단에 일반화됩니다. 분석법을 전체 데이터 세트에 적용한 후에 테스트 세트가 없지만 원래 교차 검증 된 기차 / 테스트 세트의 성능은 교육 알고리즘의 성능에 대한 편견이 아닙니다. 그것은 모델을 훈련 시키거나 매개 변수화하는 것이 아니라 모델 구축 프로세스의 성능을 추정하는 CV의 요점입니다. 전체 데이터 모델링에 앞서 어떤 테스트 세트에 대한 귀하의 성능 입니다 전체 데이터에 대한 성능 추정.
핵 왕

13

흥미로운 질문입니다. 나는 개인적으로 제품이 생산에 들어가는 것을 보지 못했지만 논리를 이해합니다.

이론적으로 배포 된 모델에서 볼 수있는 데이터가 많을수록 일반화하는 것이 좋습니다. 따라서 사용 가능한 전체 데이터 세트에서 모델을 학습 한 경우 전체 데이터 세트에서 예를 들어 기차 / 발 세트 (예 : ~ 90 %) 만 보았던 모델보다 일반화하는 것이 좋습니다.

이것에 대한 문제 (그리고 처음에 데이터를 기차 / val / 테스트 세트로 나누는 이유!)는 보이지 않는 데이터의 정확성에 대한 통계적 주장을 할 수 있기를 원하기 때문입니다. 모든 데이터 에 대해 모델을 다시 훈련시키는 즉시 더 이상 그러한 주장을 할 수 없습니다.

[편집하다]

여기 에 Cross-Validated와 관련된 질문 이 있습니다. 여기 에서 허용 된 답변은 저에게 비슷한 지적을하고 다른 일을하는 방법을 언급합니다.


우리는 반복합니다.

  1. 모델 훈련
  2. 모델 변경
  3. 1 단계로 이동
  4. 테스트 세트에서 성능 평가
  5. 5 단계에서 찾은 테스트 정확도를 가진 현재 모델

결국 테스트 세트에서 큰 점수를 얻으면 일반화되었다고 주장 할 수 있습니다. 따라서 전체 데이터 세트에 대한 재교육이 향후 보이지 않는 데이터의 성능을 향상시킬 수 있는지에 대한 질문 은 엄격하게 테스트 할 수있는 것이 아닙니다. 다른 관련 문제 세트에서 더 나은 성능의 경험적 증거는 결정을 내려야 할 시점의 유일한 소스 또는 지침이 될 것입니다.

완전성 검사는 최종 재 훈련 된 모델을 원래 테스트 세트에서 다시 테스트하는 것입니다. 모델이 기차 / 발 세트 만 보았을 때보 다 점수가 높을 것으로 예상합니다. 실제로 훈련 중에 테스트 세트를 보았 기 때문입니다. 이것이 미래의 모든 경우에이 최종 모델이 우수하다는 것을 100 % 확신 할 수는 없지만 적어도 주어진 데이터로 얻을 수있는 것만 큼 좋습니다.

아마도 당신이하는 말 (아마도 학문적으로 움직일 수있는)을하는 것에 대해 더 엄격한 논증이 있을지 모르지만, 실제적인 적용에는 호소력이있는 것 같습니다!


+1 해 주셔서 감사합니다. 해당 게시물을 지적 해 주셔서 감사합니다. 결국 전체 교육 데이터 세트에서 모델을 테스트하라는 제안에 대해서는 그 결과로 귀중한 통찰력을 얻지 못한다고 생각합니다. 알고리즘 훈련은 일반적으로 비용 함수의 최적화를 기반으로하기 때문에 훈련 된 모델은 훈련 데이터를 고려할 때 최적입니다. 열차 데이터의 정확도가 낮다는 것은 그것이 최적이 아니라는 것을 의미하지 않으며, 단지 해당 데이터 세트와 선택한 알고리즘 아키텍처를 고려할 때 단순히 더 잘 수행 할 수 없다는 것을 의미합니다. 그것의 외부 유효성에 대해서는 아무것도 유추 할 수 없습니다.
pcko1

1
천만에요! 나는 당신의 진술에 전적으로 동의합니다 (비록 훈련이 아닌 출발지 테스트 데이터 에서 최종 훈련 모델을 테스트한다고 말했지만 ). 어쨌든, 나는 여전히 최종 모델이 완전히 예기치 않은 것을하지 않았다는 것을 알고 싶습니다. 이론과 실습이 항상 일치하지는 않습니다 :)
n1k31t4

6

통계 머신 러닝에 대해 강조해야 할 점 은 보장이 없다는 것 입니다. 보류 세트를 사용하여 성능을 추정 할 때 이는 추정치 일뿐 입니다. 추정치가 잘못되었을 수 있습니다.

익숙해지는 데는 다소 시간이 걸리지 만 익숙해 져야합니다. "실제로 성능이 저하되면 어떻게해야합니까?"라고 말할 때 대답은 확실합니다. 실제 성능은 예상 / 예상보다 악화 될 수 있습니다. 더 나을 수도 있습니다. 둘 다 가능합니다. 불가피하다. 내재적이며 돌이킬 수없는 불확실성이 있습니다.

보류 된 테스트 세트를 사용하여 성능을 평가할 때 과거의 데이터를 사용하여 미래의 성능을 예측하려고합니다. 그들이 말했듯이 과거의 성과는 미래의 결과를 보장하지 않습니다 . 이것은 우리가 받아 들여야 만하는 삶의 사실입니다.

당신은 이것을 고정시킬 수 없습니다. 예측 한 것보다 더 나빠질 수 있다는 사실은 데이터에 대해 훈련 된 모델을 프로덕션에 배포하지 않는 이유가 아닙니다. 특히, 그렇게하지 않으면 제대로하지 못할 수도 있습니다. 모든 데이터에 대해 훈련 된 모델 (train + validation + test)이 train + validation 부분에 대해서만 훈련 된 모델보다 나빠질 수 있습니다. 더 나아질 수도 있습니다. 그러므로 우리는 보증을 찾기보다는 스스로에게 다음과 같이 자문해야합니다. 가장 효과적인 것은 무엇입니까?

이 경우 프로덕션 환경에 배포하려는 경우 사용 가능한 모든 데이터를 사용하는 것이 가장 좋습니다. 예상 성능 측면에서 모든 데이터를 사용하는 것이 일부 데이터를 사용하는 것보다 나쁘지 않으며 잠재적으로 더 좋습니다. 따라서 프로덕션 모델을 빌드 할 때 사용 가능한 모든 데이터를 사용하여 모델을 학습 할 수도 있습니다. 통계 방법을 사용할 때마다 항상 운이 나빠질 수 있지만 상황이 잘 진행될 수있는 최상의 기회를 제공합니다.

특히 표준 사례는 다음과 같습니다.

  1. 일부 데이터는 보류 테스트 세트로 예약하십시오. 어떤 분수를 사용해야하는지에 대한 엄격한 규칙은 없지만, 예를 들어 테스트 세트에 20 %를 예약하고 나머지 80 %를 교육 및 검증에 사용할 수 있습니다. 일반적으로 모든 분할은 임의적이어야합니다.

  2. 다음으로, 훈련 및 검증 데이터를 사용하여 여러 아키텍처와 하이퍼 파라미터를 시험해보고 가능한 최상의 모델을 찾아보십시오. 훈련 및 검증을 위해 보유한 80 %를 훈련 세트와 검증 세트로 나누고 훈련 세트를 사용하여 모델을 훈련 한 다음 검증 세트에서 정확도를 측정합니다. 교차 유효성 검사를 사용하는 경우이 분할을 여러 번 수행하고 유효성 검사 세트의 결과를 평균화합니다. 그렇지 않은 경우 단일 분할 (예 : 80 %의 70 % / 30 % 분할 등)을 수행하고 유효성 검사 세트의 성능을 평가합니다. 시도 할 하이퍼 파라미터가 많은 경우 하이퍼 파라미터의 각 후보 설정에 대해이 작업을 한 번 수행하십시오. 시도 할 아키텍처가 많은 경우 각 후보 아키텍처에 대해이를 수행하십시오. 당신은 당신이 무엇을 사용하여 이것에 대해 반복 할 수 있습니다

  3. 만족하면 아키텍처, 하이퍼 파라미터 등을 자유롭게 선택할 수 있습니다. 이제 실험이 완료되었습니다. 이 지점에 도달하면 새로운 테스트 세트를 얻지 않고 다른 옵션을 다시 시도 할 수 없으므로 준비가 될 때까지이 지점을 누르지 마십시오.

  4. 준비가되면 앞에서 선택한 아키텍처 및 하이퍼 파라미터를 사용하여 전체 교육 + 검증 세트 (80 %)에 대한 모델을 학습합니다. 그런 다음 보류 테스트 세트에서 정확도를 측정하십시오. 이것이이 모델링 접근법이 얼마나 정확한지에 대한 추정 / 예측입니다. 여기에 단일 번호가 있습니다. 그 숫자는 그 숫자입니다. 마음에 들지 않으면 1 단계와 2 단계로 돌아가서 더 많은 실험을 할 수 없습니다. 그것은 유효하지 않습니다.

  5. 마지막으로, 프로덕션 사용의 경우 전체 데이터 세트, 교육 + 유효성 검증 + 테스트 세트에서 모델을 학습하여 프로덕션 용도로 사용할 수 있습니다. 이 생산 모델의 정확성을 측정하지 마십시오. 그에 대한 데이터가 남아 있지 않기 때문입니다. 이미 모든 데이터를 사용했습니다. 성능이 얼마나 잘 될지 예측하려면 4 단계의 추정 정확도를 향후 성능에 대한 가장 유용한 예측 방법으로 프로덕션에서 성능이 얼마나 잘 수행되는지에 대한 예측으로 사용할 수 있습니다. 항상 그렇듯이 보장은 없습니다. 이용 가능한 정보를 고려할 때 가능한 최상의 추정치입니다. 예상했던 것보다 더 나쁘거나 예상했던 것보다 더 나을 수 있다는 것은 확실합니다. 항상 그렇습니다.


완전히 동의하지는 않았지만 노력에 +1했습니다. :) 예를 들어 "예상 성능 측면에서 모든 데이터를 사용하는 것이 일부 데이터를 사용하는 것보다 나쁘지 않을 수 있습니다." 나는 그 뒤에 추론을 볼 수 없습니다. 반면에 언급 한 두 번째 요점은 매우 중요한 교차 검증입니다! 따라서 기본적으로 모든 샘플을 학습 / 검증하므로 선택한 최종 모델에서 특이 치를 거부 할 수 있습니다. 답변 주셔서 감사합니다.
pcko1

@ pcko1, 원리는 간단합니다. 데이터가있는 경우 모두 또는 일부를 사용해야합니까? 왜? 데이터를 얻을 때, 무엇이든하기 전에, 우리는 단지 10 %를 가져와 버려야합니다. 실제로 일부를 버리는 것이 좋으면 더 많이 버리는 것이 더 좋으므로 모든 데이터를 버려야 할 것입니다. 터무니없는 말이지요? 왜? 이유를 알아 낸 다음이 상황에 적용 해보십시오. 잘만되면 이것은 당신이 생각하게한다!
DW

3

데이터 세트가있는 이유 중 하나는 과적 합을 피하기위한 것입니다. 교차 유효성 검사를 사용하는 경우 기본적으로 전체 데이터 세트가 훈련 세트 역할을하도록 허용하지만 재교육을 통해 과적 합의 징후가 있는지 확인할 수는 없습니다. 두 방법 중 하나 (교차 유효성 검사 또는 전체 데이터 세트로 재교육)는 결과를 (교육되지 않은 추측으로) 크게 변경해서는 안되지만 하이퍼 매개 변수 조정을 수행하거나 모델 성능을 검증 할 수는 없습니다. 테스트 세트가 있습니다. 그것이 더 나아지 든 말하기는 어렵지만, 알 수있는 유일한 방법은 시간이 지남에 따라 실제 데이터에 대해 두 모델의 A / B를 수행하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.