Проблема:
Я проектирую собственный преобразователь, используя конвейер scikit-learn, но у меня несоответствие позиционных аргументов. Класс, который я определил:
class DataSubsetGenerator(BaseEstimator, TransformerMixin):
def __init__(self, sub_percentage, random_state = 42):
self.sub_percentage = sub_percentage
self.random_state = random_state
def fit(self):
return self
def transform(self, X_train, X_test, y_train, y_test):
# Do data processing stuff here, removed to simplify example here...
return X_train_sub, X_test_sub, y_train_sub, y_test_sub
Затем я помещаю это в 1-шаговый пользовательский конвейер для проверки:
reduce_pipeline = Pipeline([
('Prototype dataset', DataSubsetGenerator(0.5, random_state = random_state))
])
X_train, X_test, y_train, y_test = reduce_pipeline.transform(X_train, X_test, y_train, y_test)
И я получаю ошибку:
TypeError Traceback (most recent call last)
<ipython-input-42-4b2a20eb8b63> in <module>()
3 ])
4
----> 5 X_train, X_test, y_train, y_test = reduce_pipeline.transform(X_train, X_test, y_train, y_test)
TypeError: _transform() takes 2 positional arguments but 5 were given
Это не имеет смысла, потому что я определил функцию transform()
класса DataSubGenerator
, которая будет принимать 4 аргумента.
Мое тестирование:
Я проверил это без использования конвейера sklearn, создав экземпляр DataSubGenerator
и вызвав transform()
, и он работает в соответствии с проектом:
dsg = DataSubsetGenerator(0.5, random_state = random_state)
X_train, X_test, y_train, y_test = dsg.transform(X_train, X_test, y_train, y_test)
Мой вопрос: почему нет Разве функция transform()
распознает эти 4 аргумента при использовании в конвейере sklearn?
Связанные вопросы и ответы:
Я пробовал исследовать и ближайший поток вопросов и ответов таков: _transform () принимает 2 позиционных аргумента, но 3 получили . Однако я не могу понять решение и то, как оно применимо к моему сценарию.