如何解决vectorizor.tranform(fd_norm)
中的错误?
encoder = LabelEncoder()
vectorizer = CountVectorizer()
lis=[description]
lis1=[name_predict]
lis2=[text_predict]
lis_df=pd.DataFrame(lis,columns=['description'])
lis1_df=pd.DataFrame(lis1,columns=['name'])
lis2_df=pd.DataFrame(lis2,columns=['text'])
pred_df=pd.concat([lis_df,lis1_df,lis2_df],axis=1)
fd=pred_df.iloc[ : , : ].values
fd_norm=[normalize_text(s) for s in fd]
predV=vectorizer.transform(fd_norm)
fname='gender_predictor.sav'
model=pickle.load(open(fname,'rb'))
fresnel=model.predict(predV)
fresnel_label=encoder.inverse_transform(fresnel)
self.gender.setText(fresnel_label)
错误:
Traceback (most recent call last):
File "the_linking.py", line 162, in predict
predV=self._vectorizer.transform(fd_norm)
File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\feature_extraction\text.py", line 890, in transform
self._check_vocabulary()
File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\feature_extraction\text.py", line 278, in _check_vocabulary
check_is_fitted(self, 'vocabulary_', msg=msg),
File "C:\ProgramData\Anaconda3\lib\site-packages\sklearn\utils\validation.py", line 690, in check_is_fitted
raise _NotFittedError(msg % {'name': type(estimator).__name__})
sklearn.exceptions.NotFittedError: CountVectorizer - Vocabulary wasn't fitted.
答案 0 :(得分:2)
在致电transform()
之前,您必须拨打fit()
或fit_transform()
一次,以便模型可以了解数据的频率。
尝试:
predV=vectorizer.fit_transform(fd_norm)
编码器也是如此。我认为您之前已经转换了数据,然后训练了模型。但是从那里开始,你只保存了model
,但没有保存矢量图。保存模型时,您需要同时保存vectorizer
和encoder
,以便能够再次使用它们。以与模型相同的方式加载它们并使用它们(在这种情况下不调用fit()
。)