Как передать подходящие параметры от одного этапа конвейера sklearn к другому? - PullRequest
2 голосов
/ 22 сентября 2019
p = Pipeline([
  ('pre', Preprocessing()),
  ('clf', KerasClassifier()),
])

После установки Preprocessing он будет содержать обученный tokenizer, и я хочу использовать этот токенизатор внутри clf.fit.Есть ли способ передать его?


Проверено Исходный код и похоже, что нет пути.К сожалению, мне нужно заранее установить токенизатор вручную и передать его на каждый этап конвейера.

Или с помощью некрасивого хака: make preprocessing.transform возвращает кортеж с преобразованными данными и токенизатором вместо просто данных, а затем внутри clf.fit распаковывает этот кортеж.


В конечном итогебезобразный хак:

class Preprocessing(TransformerMixin, BaseEstimator):
    ...

    def transform(self, X):
        ...
        return X, self.tokenizer.word_index


class CustomClassifier(KerasClassifier):
    def fit(self, X, y, sample_weight=None, **kwargs):
        X, word_index = X
        self.sk_params['word_index'] = word_index
        return super(NNClassifier, self).fit(X, y, sample_weight, **kwargs)

    def predict(self, X, **kwargs):
        X, _ = X
        return super().predict(X, **kwargs)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...