【问题标题】:Why should I subclass BaseEstimator in a Scikit-Learn Pipeline?为什么我应该在 Scikit-Learn 管道中继承 BaseEstimator?
【发布时间】:2018-07-26 18:05:44
【问题描述】:
在 scikit-learn 文档中,他们提供了 examples 的自定义 Transformer,它们是 BaseEstimator 和 TransformerMixin 类的子类。我想知道,为什么在这些示例中使用 BaseEstimator 子类?
为了尝试回答这个问题,我将它从 ItemSelector 类中取出,但 Python 没有抱怨。
【问题讨论】:
标签:
python
python-3.x
scikit-learn
【解决方案1】:
BaseEstimator 提供了get_params 和set_params 方法的实现。为什么需要这个?可以用来制作适用于GirdSearchCV的模型。这确保了它在放置在管道中时表现良好。这只是BaseEstimator的应用之一
在您提供的示例中,没有执行网格搜索,这就是不需要它的原因。它包含在大多数地方(我相信)以提供最佳实践,基本上可以为您的代码在未来将网格搜索插入管道。
【解决方案2】:
BaseEstimator 为 get_params 和 set_params 方法提供了一个默认实现,请参阅[the source code]。这对于使用 GridSearchCV 使模型网格可搜索以进行自动参数调整以及在管道中组合时与其他人的表现良好时很有用。