예측이 목표 인 경우 교육 및 테스트 세트에 표준화 / 정규화를 적용하는 방법은 무엇입니까?


47
  1. 모든 데이터 또는 접기 (CV가 적용된 경우)를 동시에 변환합니까? 예 :

    (allData - mean(allData)) / sd(allData)

  2. trainset과 testset을 개별적으로 변환합니까? 예 :

    (trainData - mean(trainData)) / sd(trainData)

    (testData - mean(testData)) / sd(testData)

  3. 아니면 trainset을 변환하고 testset에서 계산을 사용합니까? 예 :

    (trainData - mean(trainData)) / sd(trainData)

    (testData - mean(trainData)) / sd(trainData)

나는 3이 옳다고 믿는다. 3이 맞으면 평균이 0이 아니거나 범위가 [0; 1] 또는 [-1; 1] 테스트 세트의 (정규화)?


이것을 코딩하는 우아한 방법이 R있습니까? 이 질문을보십시오 : stackoverflow.com/questions/49260862/…
Boern

답변:


41

세 번째 방법은 맞습니다. 통계 학습의 요소 에서 왜 정확한 세부 사항을 다루고 있는지에 대한 자세한 내용 은 주식 시장의 예에서 "교차 유효성 검증을위한 잘못되고 올바른 방법"섹션과 데이터 에서 학습 의 마지막 장을 참조 하십시오.

기본적으로 절차 1과 2는 모델의 교육 또는 평가에 대한 보류 데이터 세트에서 응답 또는 향후 정보에 대한 정보를 유출합니다. 이로 인해 모델 평가에서 상당한 낙관적 편향이 발생할 수 있습니다.

모델 검증의 아이디어는 모델이 생산 결정을 내릴 때, 실제 응답에 액세스 할 수없는 상황을 모방하는 것입니다. 결과는 당신은 아무것도에 대한 테스트 세트에 응답을 사용할 수 없다는 것입니다 제외하고 당신의 예측 값을 비교.

접근하는 또 다른 방법은 한 번에 하나의 데이터 포인트에만 액세스 할 수 있다고 상상하는 것입니다 (생산 모델의 일반적인 상황). 이 가정 하에서 할 수없는 일은 의심의 여지가 있습니다. 분명히 할 수없는 한 가지는 과거와 미래의 모든 새로운 데이터 포인트를 집계하여 생산 데이터 스트림을 정규화하는 것입니다. 따라서 모델 유효성 검사에 대해 동일한 작업을 수행하는 것은 유효하지 않습니다.

테스트 세트의 평균이 0이 아닌 것에 대해 걱정할 필요가 없습니다. 홀드 아웃 성능 추정값을 바이어스하는 것보다 더 나은 상황입니다. 물론, 테스트가 기차와 동일한 기본 분포 (통계 학습의 필수 가정)에서 실제로 도출된다면, 평균은 대략 0으로 나와야합니다.


그것이 내가 생각했던 거죠. 이것을 명확히 해 주셔서 감사합니다!
DerTom

Clearly, one thing you cannot do is aggregate over all new data-points past and future to normalize your production stream of data. 왜 안돼?
Anmol Singh Jaggi

1
@AnmolSinghJaggi "그리고 미래"입니다. 실제로 데이터를 아직 수집하지 않은 경우이를 사용하여 정규화 할 수 없습니다.
Matthew Drury

4
y

1
@MatthewDrury. 명확한 설명에 감사드립니다. 지금 동의합니다. 세 번째 방법 만 맞습니다.
17
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.