Как передать дополнительный аргумент в метод преобразования настроенного преобразователя sklearn - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь передать аргумент в метод преобразования пользовательского преобразователя, но он выдает ошибку. Также я попробовал это решение Передача параметров к настроенному преобразователю , но это не помогло.

Код выглядит следующим образом:

class DFFeatureUnion(TransformerMixin): 

    def __init__(self, transformer_list):

        self.transformer_list = transformer_list

    def fit(self, X, y=None, mode = None, **kwargs):

        for (name, t) in self.transformer_list: 
            t.fit(X, y) 

        return self

    def transform(self, X, y=None, mode = None, **kwargs):

        Xts = [t.transform(X) for name, t in self.transformer_list]
        Xunion = reduce(lambda X1, X2: pd.merge(X1, X2, left_index=True, right_index=True), Xts)

        return Xunion

class test1(TransformerMixin):
    """  Custom Define Transformer for Cleaning the Dataset  """

    def __init__(self, **kwargs):
        return

    def transform(self, X, y = None, mode = None, **kwargs):
        """  Transforms the given dataset to a required form """
        print("test1 transform")
        print(mode)
        return X

    def fit(self, X, y = None, mode = None, **kwargs):

        print("test1 fit")
        return self


class test2(TransformerMixin):
    """  Custom Define Transformer for Cleaning the Dataset  """

    def __init__(self, **kwargs):
        return

    def transform(self, X, y = None, mode = None, **kwargs):
        """  Transforms the given dataset to a required form """
        print("test2 transform")
        print(mode)
        return X

    def fit(self, X, y = None, mode = None, **kwargs):
        print("test2 fit")
        return self

конвейер содержит следующий код:

test_pip = Pipeline([
    ('features', DFFeatureUnion([
        ('features_clean', Pipeline([
            ('extract', test1()),    
            ('tokenization', test2())
        ]))
    ]))
])

Когда я выполняю следующий метод подбора:

test_pip.fit(X_train, mode = "train")

Выдает ошибку, говорящую, что:

ValueError: Pipeline.fit does not accept the mode parameter. You can pass parameters to specific steps of your pipeline using the stepname__parameter format, e.g. `Pipeline.fit(X, y, logisticregression__sample_weight=sample_weight)`.

КАК я могу передать аргумент mode в конвейер. ?? Также я знаю, что мы можем передать аргумент в функцию init класса, но я хотел, чтобы он был только в методе fit и transform. Как я могу его достичь ??

...