작성
·
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