存储TfIdf模型,然后加载它以测试新数据集

时间:2019-01-24 09:53:02

标签: python tf-idf joblib tfidfvectorizer

我正在尝试存储训练数据集后获取的TfIdf矢量化器/模型(不知道它是否是正确的单词),然后加载存储的模型以适合新数据集。 使用pickle存储和加载模型

我已经存储了在训练阶段获得的TfIdf词汇。然后,将存储的词汇加载到矢量化器以适合测试数据

def Savetfidf(df):
    vectorizer = TfidfVectorizer(min_df=0.0, analyzer="char", sublinear_tf=True, ngram_range=(1,2))
    X = pd.SparseDataFrame(vectorizer.fit_transform(df), columns = vectorizer.get_feature_names(), default_fill_value = 0)
    pickle.dump(vectorizer.vocabulary_, open("features.pkl", "wb"))
    return X

def Loadtfidf(df):
    vectorizer = TfidfVectorizer(min_df=0.0, analyzer="char", sublinear_tf=True, ngram_range=(1,2))
    vocabulary = pickle.load(open(feature, 'rb'))
    vectorizer.vocabulary_ = vocabulary
    X = pd.SparseDataFrame(vectorizer.transform(df), columns = vectorizer.get_feature_names(), default_fill_value = 0)
    return X

我遇到错误

“ sklearn.exceptions.NotFittedError:idf向量不适合”

据我所知,它正在尝试使用idf_和vocabulary_分别保存整个“ X”。但是我只想存储模型/矢量化器(不知道),以便下次加载模型/矢量化器时,我只需要调用vectorizer.fit()作为测试数据,而无需使用训练数据调用fit_transform()。 有什么办法吗?

1 个答案:

答案 0 :(得分:0)

按照here的说明,您可以直接对已安装的vectorizer对象进行插拔操作,它将自行进行正确的(反序列化)处理。