我需要構建自定義變壓器,將其用於流水線,並使用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__。
看來,第一種方式工作正常,但我只是不明白爲什麼。 可以請有人向我解釋這個現象嗎?