【问题标题】:Saving parts of a sklearn pipeline保存 sklearn 管道的一部分
【发布时间】:2015-11-01 13:10:06
【问题描述】:

我在模型中的某些特征可能需要一些时间才能生成,因此要快速试验多个特征和参数,最好将它们保存到磁盘以供以后使用。

作为一个具体的例子(取自here),假设我有以下管道:

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,因为参数或转换之前已更改。

这可以通过某种方式实现吗?

【问题讨论】:

  • 您是在问如何在训练管道时使用调整网格,或者如何在已经训练好的管道对象中调整参数?
  • Scikit-learn 不提供内置解决方案,在两个 github 问题中讨论了在管道中缓存中间步骤的问题:github.com/scikit-learn/scikit-learn/pull/2086github.com/scikit-learn/scikit-learn/pull/3951
  • @user3914041 感谢您的参考。看来,在我的第一次尝试中,我重做了 Memory.cache 的部分内容,因此它已经在避免重复工作方面派上了用场。
  • 如何使用 GridSearchCV.best_estimator_.get_params() ?你熟悉吗?它可能是您问题的部分解决方案,因为您可以为管道组件保存最佳估算器。稍后当您再次运行代码时,只需加载这些参数并创建管道。这样你就不必每次都调音了。
  • @AbtPst 不完全是,如果初始参数和训练集相同,我遇到的问题是不重新训练参数。您的链接问题更多是关于搜索超参数。我已经通过对github.com/scikit-learn/scikit-learn/pull/2086 的一些修改实际上解决了我最初的问题,也许我应该在某个时间发布一个答案。

标签: python scikit-learn


【解决方案1】:

我在使用Pachyderm 做这种事情时取得了一些成功。它有一个有点像 git 的 cli,可以让你存储你的工作流程。在 repo 中,请注意 ML pipeline for Iris Classification 示例,该示例提供了有关如何创建管道和训练数据并将其保存到他们所谓的“推理管道”中的一些详细信息,这将允许您尝试进行各种转换并应用推断管道训练数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 2021-07-22
    • 2017-08-15
    • 2020-08-04
    • 2020-03-18
    • 2021-03-19
    • 2014-01-29
    相关资源
    最近更新 更多