如何保存 sklearn pipeline/feature-transformer

Blu*_*482 5 python nlp scikit-learn

我有一个管道仅包含一个功能联合,该功能联合具有三组不同的功能,包括 tfidf:

A_vec = AVectorizer()
B_vec = BVectorizer()
tfidf_vec = TfidfVectorizer(ngram_range=(1,2), analyzer='word', binary=False, stop_words=stopWords, min_df=0.01, use_idf=True)
all_features = FeatureUnion([('A_feature', A_vec), ('V_feature', B_vec), ('tfidf_feature', tfidf_vec)])
pipeline = Pipeline([('all_feature', all_features)])
Run Code Online (Sandbox Code Playgroud)

我想为我的测试数据保存这个管道特征转换器(我使用 LibSVM 进行分类),这就是我尝试过的:

  • 我已经使用 joblib.dump 来保存此管道,但它生成了太多 .npy 文件,因此我不得不停止写入过程。这是一个相当愚蠢的尝试!

  • 我已经保存了 tfidf_vec.vocabulary_ 因此

    tfidf_vec2 = TfidfVectorizer(ngram_range=(1,3),analyzer='word',binary=False,stop_words=stopWords,min_df=0.01,use_idf=True,vocabulary=pickle.load(open("../vocab.pkl" ,“rb”))

    ……

    feat_test = pipeline2.transform(X_test)

它说“NotFittedError:idf向量未安装”。然后我使用 fit_transform 而不是 transform,但它生成包含不同值的特征向量(与正确的特征向量相比)。然后我关注了http://thiagomarzagao.com/2015/12/08/ saving-TfidfVectorizer-without-pickles/,但仍然努力让它工作。

有没有更简单的方法来实现这一目标?谢谢!

use*_*903 0

我会使用 joblib.dump 因为你在第一个选项中有它。它生成了多少个 *.npy 文件?拥有大量 *.npy 文件有什么问题?