【问题标题】:scikit learn. Custom Estimators in multiprocessing pipeline with n_jobs=-1scikit 学习。 n_jobs=-1 的多处理管道中的自定义估计器
【发布时间】:2018-02-04 18:54:33
【问题描述】:

我在 scikit learn 中编写了自定义转换器并构建了管道。现在我正在尝试使用 GridSearchCV 调整这个管道。一切正常,直到我尝试将 n_jobs=-1 设置为加快进程。

GUI Jupyter notebook 没有写任何问题,只显示内核忙,但在控制台内部打印了以下错误,复制了几次: Drop Fields 是我的一个自定义转换器的名称(不知道这是否重要,但它是管道的第一步)。定义如下:

class DropFields(FieldsTransformerMixin, Transformer):  
    def __init__(self, fields=None, all_except=False):
        self.fields = fields
        self.all_except = all_except

    def _fit_before(self, data):
        self.fields_ = list(set(data.columns) - set(self.fields)) if self.all_except else list(self.fields)

    def _transform_before(self, data):
        return  data.drop(self.fields_, axis=1)

父母(在上面单元格中定义的笔记本中):

class Transformer(BaseEstimator, TransformerMixin):
    pass

class FieldsTransformerMixin:
    def __init__(self, fields=None):
        self.fields = fields 

    def fit(self, data, y=None):
        self._validate_params()
        self._fit_before(data)
        for field in self.fields:
            self._fit_field(field, data)
        return self

    def transform(self, data):
        data = data.copy()
        data = self._transform_before(data)
        for field in self.fields:
            data = self._transform_field(field, data)
        return data

    def _validate_params(self):
        if self.fields is None:
            raise ValueError('Fields is none.')

    ... empty definitions of _fit_before,_fit_field,
    ... definitions of _transform_before and _transform_field returning default data

问题是:

我是否需要在自定义估算器中实现特定逻辑,以便将它们与 n_jobs=-1 一起使用,如果不需要,那么这里有什么问题?为什么多处理找不到“DropFields”?

【问题讨论】:

    标签: python python-3.x scikit-learn


    【解决方案1】:

    scikit-learing估算需要支持克隆跨验证以用n_jobs = -1来多处处理它们。您可以在here中看到他们的文档。 base.clone拍摄自定义估算器类,调用其get_params()函数,并通过从原始类'get_params()方法中检索的相同参数来创建副本。

    您的自定义估算器类也必须是“抢席”。如果未在模块的根目录中定义您的自定义估算器类,则会导致错误。估算类需要将其所需的所有内容作为参数获取并与模块分开运行。

    【讨论】:

      猜你喜欢
      • 2015-12-22
      • 2018-02-04
      • 1970-01-01
      • 2017-07-11
      • 2020-01-13
      • 2020-01-01
      • 2017-12-19
      • 1970-01-01
      • 2020-04-07
      相关资源
      最近更新 更多