如何保存sklearn管道/功能变换器

时间:2015-12-19 23:35:39

标签: 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)])

我想为我的测试数据保存这个流水线功能转换器(我使用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,词汇= pickle.load(打开(“../ vocab) .pkl“,”rb“))

    ......

    feat_test = pipeline2.transform(X_test)

它说“NotFittedError:idf vector not fit”。然后我使用fit_transform而不是变换,但它生成一个包含不同值的特征向量(与正确的特征向量相比)。然后我跟着http://thiagomarzagao.com/2015/12/08/saving-TfidfVectorizer-without-pickles/继续努力让它发挥作用。

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

2 个答案:

答案 0 :(得分:0)

我会在第一个选项中使用joblib.dump。它产生了多少个* .npy文件?有很多* .npy文件有什么问题?

答案 1 :(得分:0)

目前尚不清楚您想要实现什么以及面临什么问题。 据我了解,您尝试过

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

由于这不能满足您的要求,因此您尝试了其他一些替代方法。好吧,如果您只想生成一个文件,则可以执行以下操作:

joblib.dump(pipeline, 'filename.pkl', compress = 1)

此外,我强烈建议您下次插入最小可行示例!