如何将拟合参数从一个sklearn管道步骤传递到另一步?

时间:2019-09-21 23:00:38

标签: python scikit-learn pipeline

p = Pipeline([
  ('pre', Preprocessing()),
  ('clf', KerasClassifier()),
])

拟合Preprocessing后,它将包含训练有素的tokenizer,我想在clf.fit中使用该标记生成器。有什么办法可以通过吗?


选中了source code,看来没有办法。可悲的是,我需要事先手动安装令牌生成器,并将其传递到每个管道步骤。

或者使用丑陋的方法:使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)

0 个答案:

没有答案