【问题标题】:Storing TfIdf model and then loading it to test the new dataset存储 TfIdf 模型,然后加载它以测试新数据集
【发布时间】:2019-06-18 00:24:52
【问题描述】:

我正在尝试存储训练数据集后获得的 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_ 和词汇表分别保存整个“X”。但我只想存储模型/向量器(不知道),以便下次加载模型/向量器时,我只需要为测试数据调用 vectorizer.fit(),无需使用训练数据调用 fit_transform()。 有什么办法吗?

【问题讨论】:

    标签: python tf-idf joblib tfidfvectorizer


    【解决方案1】:

    按照说明here,您可以直接(取消)腌制已安装的vectorizer 对象,它会自行处理正确的(反)序列化。

    【讨论】:

    • 我正在尝试将数据集从字符串转换为数字,您发布的链接显示了保存和加载分类器模型的方法,这与我尝试做的方式不同
    • @HarshBhagwani 这只是一个例子,它适用于所有 scikit 模型
    猜你喜欢
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2016-10-01
    相关资源
    最近更新 更多