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

问题描述 投票:0回答:2

我正在尝试存储训练数据集后获得的 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()。 有什么办法可以做到吗?

python tf-idf joblib tfidfvectorizer
2个回答
0
投票

按照here的说明,您可以直接(取消)pickle安装的

vectorizer
对象,它会自行处理正确的(反)序列化。


0
投票

如果您转储您的模型为 vectorizer.fit_transform(df) 并转储 vectorizer = TfidfVectorizer(min_df=0.0,analyzer="char", sublinear_tf=True, ngram_range=(1,2))。然后在 Loadtfidf() 中加载两个 pickle 文件。这将解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.