• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

scaler와 countervectorizer 를 서비스에 적용할 때는 어떻게 해야 하나요?

21.10.04 22:16 작성 조회수 176

0

선생님, 수업 잘 듣고 있습니다.
 
책을 보면, CounterVectorizer()나 StandardScaler, MinMaxScaler 사용을 하면,
학습/테스트 데이터 적용시 동일한 object를 사용해야 한다고 적혀져 있는데요.
만약, 학습을 다 완료하고 해당 모델로 서비스에 적용하려고 해도 동일한 object를 사용해야 하는 것인가요?
그럼, 대체적으로 어떻게 관리해서 사용하게 되는지 궁금합니다^^
 
특히나, 텍스트분석의 경우는 학습시 사용되지 않았던 단어들이 서비스시에 나올 수 도 있을거 같거든요.
신조어같은게 계속 늘어나니까요.... 이런경우도 어떻게 처리하는지 궁금합니다~
 
감사합니다^^
 
 

답변 1

답변을 작성해보세요.

0

안녕하십니까, 

테스트 데이터에 CountVectorizer나 scaler등을 적용할 때는 반드시 학습 데이터에 적용한 기준으로 테스트 데이터를 변경해야 합니다. 

즉 아래와 같이 테스트 데이터를 변경해야 하며, 반드시 학습 데이터로 fit() 한 scaler 객체를 사용해야 합니다. 

train_scaler = MinMaxScaler()

train_scaler.fit(학습 데이터)

train_scaled_data = train_scaler.transform(학습데이터)

# 테스트 데이터는 학습 데이터로 fit된 scaler를 적용해야 함. 실시간으로 테스트 데이터를 scaling할 때도 반드시 train_scaler 객체를 이용해서 변환해야 함. 

test_scaled_data = train_scaler.transform(테스트 데이터)

 

scaling도 마찬가지 이지만 텍스트 분석의 경우 학습 데이터에 없는 문자열은 학습데이터 기반의 CountVectorizer에서 자동으로 제외 됩니다.  때문에 주기적으로 추가된 데이터를 기반으로 CountVectorizer를 재생성해야 합니다. 

 

가물치님의 프로필

가물치

질문자

2021.10.06

답변 감사합니다. 테스트에 같은 scaler를 사용하는 부분은 이해를 하였는데요, 저는 서비스와 관련해서가 궁금했습니다.

만약, 서비스(온라인)시에도 동일한 scaler를 사용해야 한다면 메타정보식으로 저장을 해야 할거 같거든요. 학습을 시키고 서비스를 하는 환경이 서로 다른 경우들이 많으니까요. 그래서 scaler 자체를 저장할 수 있는지 궁금해서 질문하였습니다~^^

저도 해보진 않았지만, 학습데이터로 fit()된 scaler 객체 자체를 pickle 등으로 serialization 만들어서 다른 서버로 이동한 뒤 해당 서버에서 다시 serialization을 객체로 로딩하면 될 것 같습니다.