【发布时间】:2018-02-04 13:20:35
【问题描述】:
我需要构建我的自定义转换器,在管道中使用它并评估它使用 GridSearchCV 调整该管道的参数。
按照here 的建议,我设法实现了简单的自定义转换器,但是 尝试使用内部估计器实现转换器并在 GridSearchCV 中使用此构造时出现问题。在我看来,我自己找不到答案,因为我不完全理解搜索方法(如(网格/随机化)SearchCV 和 set_params)的微妙之处。
“Python 机器学习简介”一书描述 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 必须在调用 fit 之前传递参数来初始化内部估计器,因此应该在 __init__ 中选择内部估计器。
似乎第一种方法效果很好,但我就是不明白为什么。 有人可以向我解释一下这种现象吗?
【问题讨论】:
标签: python python-3.x scikit-learn