【发布时间】: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