如何在sklearn中使用与自定义估计器的交叉验证



我已经用fittransform方法编写了一个自定义估计器类。我能够创建一个模型,使用该模型进行训练和预测。

然而,在进行交叉验证时,我遇到了以下错误:TypeError: cannot deepcopy this pattern object

这就是CustomEstimator的样子:

class DefaultEstimator(BaseEstimator, TransformerMixin):
def __init__(self, preprocessor, pipelines):
self.preprocessor = preprocessor
self.pipelines = pipelines
def fit(self, X, y=None):
for each_pipeline in self.pipelines:
each_pipeline.fit(self.preprocessor.apply(X), y)
return self
def transform(self, X):
transformed_data = []
for each_pipeline in self.pipelines:
transformed_data.append(each_pipeline.transform(self.preprocessor.apply(X)))
return sp.hstack(transformed_data)

有人对处理这个问题有想法吗?

我建议在管道内部安装预处理器。Cross_val_score会尝试复制估计器的参数,当估计器在调用get_params()时无法返回参数时,它会中断。

我不确定您的pipeline参数是否是Sklearn pipeline,因为pipeline对象是不可迭代的。

正如一些评论中所建议的,这个错误是因为self.processor无法深度克隆。

因此,这个错误的解决方法是从这个类中删除预处理步骤,并将其作为独立的预处理步骤或转移到管道本身内部。

相关内容

  • 没有找到相关文章

最新更新