파이썬 데이터 스케일링 질문입니다. Standard Scaler

조회수 107회

오랜만에 인사드립니다. (__)

모델에 fit 하기전에 데이터 사이즈가 재각기라 스케일링으로 평균과 분산을 조정하는 작업이 필요하다고 배웠습니다.

여기서 보통은 train_test_split으로 train set/ test set으로 분리한 다음에 스케일링을 하는 작업을 하는데

전체 데이터프레임을 스케일링하고 train_test_split으로 분리해서 accuracy_score 평가를 하는데

스코어가 달라져서 궁금해졌습니다.

트레인,테스트셋 분리하고 스케일링과 스케일링 후 트레인,테스트셋 분리 어떤 방식이 맞을까요?

또 스케일링 후 fit 할 때

scaler1 = StandardScaler()
scaler1.fit(X_train)
X_train_scale = scaler1.transform(X_train)
X_test_scale = scaler1.transform(X_test) 

위 방식과 아래방식에서

scaler1 = StandardScaler()
X_train_scale = scaler1.fit_transform(X_train)
X_test_scale = scaler1.fit_transform(X_test) 

차이가 있을까요???

2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기
    1. train / test 분리 후 train data에만 scaler를 fit하고 해당 scaler로 train data, test data를 transform 해줍니다

    이유) test data를 scaler의 적합에 이용하는 경우 data leakage에 해당합니다.

    다만, Kaggle처럼 별도의 test data가 존재하며, train data로 CV를 하는 과정에서 train / validation data를 나누는 경우에는 스코어를 최대한 올리기 위해 train data 전체를 이용해 스케일링을 할 수 있습니다

    (train data는 이미 알고 있는 데이터이고 test data는 모른다는 가정 하에 분석을 진행하면 됩니다)

    • 아! 그 부분과 연관이 있었군요. 답변 감사합니다. seonwoochoi 2022.6.20 10:39
  • 두번째 방식으로 하면, 트레인과 테스트셋에 대해서 각각의 서로다른 스케일러로 스케일링하는 거라서 안 됩니다.

    • 답변 감사합니다. daewon님 께서는 스케일링을 진행 하실 때 DataFrame 전체를 스케일링하시고 Test/Train set으로 만드시는지 아니면 Test/train 만드시고 스케일링 작업하시는지 궁금합니다 seonwoochoi 2022.6.20 10:15
    • test 셋이라면 모르는 게 맞겠죠. daewon 2022.6.20 10:59
    • 다 주어진 데이터에만 적용하다 보니 가장 기본적인걸 놓친 기분이 드네요. 감사합니다!! seonwoochoi 2022.6.20 11:01

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.