再次加载时存储的Tfidf-Vectorizer ValueError

时间:2018-03-20 20:55:05

标签: python scikit-learn tf-idf text-classification tfidfvectorizer

我为一个PassiveAgressive分类器训练了一个Tfidf-Vectorizer并对其进行了测试,一切正常。然后我保存了拟合的矢量化器和训练好的分类器供以后使用。当我再次加载矢量图时,我在其上转换了一个新的数据集(因为我想用分类器对看不见的数据进行分类)并尝试预测新的数据集。当我运行代码时,我得到:

b = np.array([[1,5,3],
     [2,8,6],
     [6,100,9],
     [10,4,3]])

这是我用来获取矢量化器和分类器的代码:

ValueError: X has 1375913 features per sample; expecting 1373084

这就是我再次打开并使用它的方式:

X_train, X_test, y_train, y_test = train_test_split(df['Processed_text'], y, test_size=0.2)
tfidf_vectorizer = TfidfVectorizer()
tfidf_train = tfidf_vectorizer.fit_transform(X_train)
with open('vectorizer.pkl', 'wb') as fin:
    pickle.dump(tfidf_vectorizer, fin)
tfidf_test = tfidf_vectorizer.transform(X_test)
linear_clf = PassiveAggressiveClassifier(n_iter=50)
linear_clf.fit(tfidf_train, y_train)
pred = linear_clf.predict(tfidf_test)
with open('topic_classifier.pkl', 'wb') as fid:
    pickle.dump(linear_clf, fid)  

我还在我训练分类器的文件中再次检查并查看了词汇的长度并得到了

classifier = pickle.load(open('topic_classifier.pkl', 'rb'))
vectorizer = pickle.load(open('vectorizer.pkl', 'rb'))
tfidf_vectorizer = vectorizer
tfidf_articles = tfidf_vectorizer.transform(texts)
topics = classifier.predict(tfidf_articles)

还有一个号码......我真的不知道这里出了什么问题。我处理了火车/测试数据集的文本以及在以完全相同的方式再次加载所有内容之后需要进行分类的文本,因此我认为这与我给予矢量化器的输入无关。我无法再次适应矢量化器或再次训练分类器,因为我在应用程序中同时使用它们 - 所以它需要以某种方式使用已保存的版本。

1 个答案:

答案 0 :(得分:0)

在反复检查所有内容之后,结果发现使用pickle.dump保存矢量图和分类器存在一些问题。当我使用joblib.dump / load时,它就像一个魅力!在这里使用pickle来保持数据持久性显然不是一个好主意!