我已经用fit
和transform
方法编写了一个自定义估计器类。我能够创建一个模型,使用该模型进行训练和预测。
然而,在进行交叉验证时,我遇到了以下错误: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
无法深度克隆。
因此,这个错误的解决方法是从这个类中删除预处理步骤,并将其作为独立的预处理步骤或转移到管道本身内部。