데이터 분할 전후의 StandardScaler


20

사용 StandardScaler에 대해 읽을 때 대부분의 권장 사항은 데이터를 기차 / 테스트로 나누기 StandardScaler 전에 사용해야한다고 말 했지만 온라인으로 게시 된 코드 중 일부 (sklearn을 사용하여)를 확인했을 때 두 가지 주요 용도가있었습니다.

1- StandardScaler모든 데이터를 사용 합니다. 예 :

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_fit = sc.fit(X)
X_std = X_fit.transform(X)

또는

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X = sc.fit(X)
X = sc.transform(X)

아니면 간단히

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_std = sc.fit_transform(X)

2- StandardScaler분할 데이터 사용.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform (X_test)

데이터를 표준화하고 싶지만 어떤 방법이 가장 좋은지 혼란스러워합니다!

답변:


25

모델에 누출되는 테스트 세트의 분포에 대한 정보를 방지 하려면 옵션 # 2로 이동하여 스케일러를 트레이닝 데이터에만 맞추고 해당 스케일러로 트레이닝 및 테스트 세트를 모두 표준화해야합니다. 분할하기 전에 (옵션 # 1) 전체 데이터 세트에 스케일러를 장착하면 테스트 세트에 대한 정보가 트레이닝 세트를 변환하는 데 사용되며,이 세트는 다운 스트림으로 전달됩니다.

예를 들어, 전체 데이터 세트의 분포를 알면 특이 치를 탐지 및 처리하는 방법과 모델을 매개 변수화하는 방법에 영향을 줄 수 있습니다. 데이터 자체는 공개되지 않지만 데이터 배포에 대한 정보가 있습니다. 결과적으로 테스트 세트 성능은 보이지 않는 데이터에 대한 실제 성능 추정치가 아닙니다. 유용한 추가 논의는 Cross Validated에 있습니다.


유효성 검사 세트에도 동일하게 적용됩니까? 다시 말해, 트레이닝 세트를 Train and Validation 세트로 분리하면, 기차에만 맞는 것을 배우고 나중에 Validation 및 Test 세트 모두에 적용 할 수 있습니까? 또는 검증 및 교육 예제를 모두 포함하는 전체 데이터 세트에 대한 적합성을 배우고 나중에 테스트 세트에 적용하는 것에 대해서만 걱정할 수 있습니다.
필 그 라우

안녕-맞아요, 기차에만 맞습니다-검증이나 테스트는 아닙니다
redhqs

0

다음은 어떻습니까 :

from sklearn.preprocessing import StandardScaler

sc = StandardScaler()

X_train = sc.fit_transform(X_train)

X_test = sc.fit_transform (X_test)

이면 아직 X_test = sc.transform(X_test)오류 X_test가 피팅되지 않았 음을 반환합니다 . 아니면 여기서 뭔가를 놓쳤습니까?


2
X_test에서 맞추기 만하면됩니다
tsumaranaina

0

테스트 데이터에 대해 fit_transform (X_test)을 수행해서는 안됩니다.
적합은 이미 위에서 일어났다.

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform (X_test)

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