gpt4 book ai didi

python - scikit 学习。 n_jobs=-1 的多处理管道中的自定义估算器

转载 作者:太空宇宙 更新时间:2023-11-03 14:50:54 26 4
gpt4 key购买 nike

我在 scikit learn 中编写了自定义转换器并构建了管道。现在我正在尝试使用 GridSearchCV 调整此管道。一切工作正常,直到我尝试设置 n_jobs=-1 来加速该过程。

GUI Jupyter笔记本没有写任何问题,只显示内核正忙,但在控制台内部打印了以下错误,复制了几次: Jupyter notebook consone logDrop 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)

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

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”?

最佳答案

scikit-learn 估计器需要支持交叉验证克隆,以便在 n_jobs=-1 的情况下对它们进行多重处理。你可以看他们的文档here 。 base.clone 获取您的自定义估计器类,调用其 get_params() 函数,并通过使用从原始类的 get_params() 方法检索到的相同参数重复调用类初始值设定项来创建副本。

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

关于python - scikit 学习。 n_jobs=-1 的多处理管道中的自定义估算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45903150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com