Sci-Kit学习分类器加载问题:词汇未装或空!使用转换时

时间:2016-02-04 16:10:05

标签: python machine-learning nlp scikit-learn

我正在https://www.kaggle.com/c/word2vec-nlp-tutorial处理Sci-Kit学习教程。

我将教程分为2个文件,其中一个是训练分类器,并将分类器保存到文件中,略微偏离了教程。另一个加载分类器并预测maxDate情绪的文件。原始程序要求在矢量化器上执行变换,但是我收到错误:

testFile

我还需要在此文件中初始化矢量化器对象,因为矢量化器位于最后一个文件中。如果我将行更改为Vocabulary wasn't fitted or is empty! at the line : test_data_features = vectorizer.transform(clean_test_reviews) ,程序将运行并打印出带有标签的文件。我确实担心我可能通过学习测试集上的词汇然后拟合数组而产生了逻辑错误。下面是加载分类器,准备测试数组,预测并将结果写入文件的代码。我看到的其他答案只是加载pickle文件并尝试预测,但我不知道如何将fit_transform放入正确的数据结构然后传递给预测。任何帮助表示赞赏。谢谢!

clean_test_reviews

2 个答案:

答案 0 :(得分:2)

您担心将CountVectorizer放在测试集上是正确的。使用CountVectorizer时,如果在两个不同的数据集上调用fit(),则会得到两个具有不同词汇表的不兼容的矢量化器。相反,您应该使用picklejoblib将矢量图保存到文件和分类器。你现在正在储蓄。

答案 1 :(得分:2)

基于David Maust上面的回答,我能够解决它....在第一个文件转储像这样的矢量化器:

joblib.dump(vectorizer.vocabulary_, dictionary_file_path) #dictionary_file_path is something like "./Vectorizer/vectorizer.pkl"

注意vectorizer.vocabulary_属性的下划线。在加载文件中,加载矢量化器,如下所示:

vocabulary_to_load =joblib.load(dictionary_file_path)

loaded_vectorizer = CountVectorizer(vocabulary=vocabulary_to_load)

...现在使用矢量化器进行转换