保存sklearn pipeline的部分模型

15

我的模型中的某些特征生成需要一些时间,因此为了快速尝试多个功能和参数,将它们保存到磁盘以供以后使用是一个好主意。

以一个具体的例子来说(摘自 这里),假设我有以下管道:

pipeline = Pipeline([
  ('extract_essays', EssayExractor()),
  ('features', FeatureUnion([
    ('ngram_tf_idf', Pipeline([
      ('counts', CountVectorizer()),
      ('tf_idf', TfidfTransformer())
    ])),
    ('essay_length', LengthTransformer()),
    ('misspellings', MispellingCountTransformer())
  ])),
  ('classifier', MultinomialNB())
])

我想将 CountVectorizer() 更改为 CountVectorizer(max_features=1000),然后只需要重新计算 CountVectorizerMultinomialNB,因为在它之前的参数或转换已经发生了更改。

有没有办法实现这个操作?


你是在询问如何在训练管道时使用调整网格,还是如何调整已经训练好的管道对象中的参数? - David
3
Scikit-learn没有提供内置解决方案,关于在管道中缓存中间步骤的问题在两个Github问题上进行了讨论:https://github.com/scikit-learn/scikit-learn/pull/2086和https://github.com/scikit-learn/scikit-learn/pull/3951。 - ldirer
@user3914041 谢谢你提供的参考资料。看起来在我第一次尝试中,我已经重新编写了Memory.cache的部分内容,所以它已经派上用场,避免了重复工作。 - simonzack
这与您正在寻找的内容有关吗? - AbtPst
2
@AbtPst 不完全是,我遇到的问题是如果初始参数和训练集相同,则不重新训练参数。您提供的链接问题更多地涉及搜索超参数。实际上,我通过对https://github.com/scikit-learn/scikit-learn/pull/2086 进行一些修改来解决了我的原始问题,也许我应该在某个时候发布一个答案。 - simonzack
显示剩余3条评论
1个回答

1
我使用Pachyderm成功地完成了这种类型的工作。它具有类似于git的cli,可以让您存储工作流程。在仓库中,请注意鸢尾花分类的ML管道示例,其中详细介绍了如何创建和保存管道和训练数据到他们所称的“推理管道”,从而允许您尝试的转换,并应用推断出的管道训练数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接