인프런 커뮤니티 질문&답변

정재욱 새벽하늘님의 프로필 이미지
정재욱 새벽하늘

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

만들어진 모델에 다른 데이터 적용할 때 에러가 납니다..

작성

·

739

0

안녕하세요, 선생님

강의 잘 듣고 있습니다.

AdaboostClassifier 모델을 만들고 새로운 데이터를 Test 데이터와 똑같이 전처리하여 score 함수를 썼는데요,,

아래와 같은 에러가 뜹니다.

valueError: Number of featues of the model must match the input. Model n_features in 1680 and input n_features in 1270

모델을 만들고 새로운 데이터를 넣어서 그 데이터가 분류가 잘 되는지 확인하기 위해 모델을 만든다고 생각하는데요.

처음에 모든 data를 넣어서 test와 train 데이터로 나누면 그건 한정된 데이터로 모델을 만드는게 아닌가란 생각이 듭니다..

stackoverflow에 찾아봐도 데이터를 모두 합친 후에 model을 만들라고 하네요.

새로운 데이터가 나올때마다 분류를 해야 하는데 어떻게 하면 위 에러가 안뜨게 할 수 있을까요..?

답변 5

1

권 철민님의 프로필 이미지
권 철민
지식공유자

도움이 되었다니 다행입니다

감사합니다

1

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

학습 모델이 1682개의 feature들로 되어 있는 feature vector 데이터 세트로 학습 되어 있기 때문에 1270개의 feature 들로 되어 있는 데이터 세트로 예측 할 수 없습니다.

아래와 같이 vectorize2.fit_transform(gogl2020_feat)으로 되어 있는 부분을 vectorize.transform(gogl2020_feat)로 바꿔 주십시요.  변경 후 glgo2020_features.shape는

19674, 1270 이 아니라 19674, 1682 가 되는 지 확인해 주십시요.

gogl2020_features = vectorizer2.fit_transform(gogl2020_feat)
gogl2020_features.shape


vectorizer2.fit_transform(gogl2020_feat)을 호출하면 fit()하고 transform()하게 되므로 gogl2020_feat 데이터 세트로 다시 feature vector 데이터 세트를 만들게 됩니다. 이 경우 feature 갯수가 처음 학습된 feature vector와 맞지 않을 수 있습니다.
때문에 학습시에 사용된 feature vectorizer를 이용하여 테스트를 수행하려면 fit_transform()이 아니라 transform()만 호출하여 기존 feature 갯수대로 변환 시켜 줄수 있어야 합니다.


감사합니다.

0

선생님, 정말 감사합니다.

자세한 답변 덕분에 fit_transform 과 transform의 차이를 확실하게 알았습니다.

더욱더 열심히 공부하다가 모르는 거 있으면 질문 드리겠습니다 :)

0

위 질문에 대한 source 코드 입니다

정재욱 새벽하늘님의 프로필 이미지
정재욱 새벽하늘

작성한 질문수

질문하기