【发布时间】: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),然后只需要重新计算CountVectorizer、MultinomialNB,因为参数或转换之前已更改。
这可以通过某种方式实现吗?
【问题讨论】:
-
您是在问如何在训练管道时使用调整网格,或者如何在已经训练好的管道对象中调整参数?
-
Scikit-learn 不提供内置解决方案,在两个 github 问题中讨论了在管道中缓存中间步骤的问题:github.com/scikit-learn/scikit-learn/pull/2086 和 github.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