我需要构建自定义变压器,将其用于流水线,并使用GridSearchCV评估该流水线的参数。scikit学习。 GridSearchCV管道中的自定义变压器set_params逻辑。
我设法实现简单的自定义变压器,遵循here的建议,但 在尝试使用内部估计器实现变压器时发生的问题,并在GridSearchCV中使用此构造。我自己找不到答案,因为我认为,因为我没有完全理解搜索方法(如网格/随机)SearchCV和set_params的细微之处。
书“介绍与Python ML”形容GridSearchCV逻辑比较幼稚:
...iterating over each parameters combination...
init estimator
fit estimator
evaluate
但这种幼稚的做法不能回答我的问题。为了澄清我的问题,让看看这个案例:
class OuterTransformer(BaseEstimator, TransformerMixin):
_options = {'std':StandardScaler(),'mm':MinMaxScaler()}
def __init__(self, option='std'):
...
对我来说,主要的问题是‘我在哪里把选择内部估计的逻辑是什么?’。根据上述职位,这应该是这个样子:
def __init__(self, option='std'):
self.option = option
def fit(self, data, y=None):
self.option = self._options[option]
...
在另一方面,常识表明GridSearch必须通过参数调用适合之前初始化内部估计,因此内部估计应该是选在__init__。
看来,第一种方式工作正常,但我只是不明白为什么。 可以请有人向我解释这个现象吗?