0

我正在尝试存储训练数据集然后加载存储的模型以适应新数据集后获得的 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()。有没有办法做到这一点?

4

1 回答 1

0

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

于 2019-01-24T09:56:01.783 回答