TypeError: fit () принимает 1 позиционный аргумент, но задано 3 - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь написать конвейер, состоящий только из одного классификатора, и ужасно терпит неудачу.

Я получаю ошибку в заголовке, выполнив следующее:

myclass = MyClass(path1, path2)
skl_pipeline = Pipeline(steps=[('myclass', myclass)])
skl_pipeline.fit(None)

Это не Не имеет значения, какие аргументы я привожу, поэтому я просто написал None в качестве примера.

Это мое определение класса:

class MyClass (BaseEstimator, ClassifierMixin):

И моя функция "fit":

def fit( self, X = None, y = None ):
    return self

Это буквально не может быть проще.

Что я делаю не так?

РЕДАКТИРОВАТЬ: Полный пример:

class MyClass (BaseEstimator, ClassifierMixin):

    def __init__(self, FilePath1, FilePath2):
        self.fp1 = FilePath1
        self.fp2 = FilePath2

    #Return self nothing else to do here    
    def fit( self, X = None, y = None ):
        return self 

    def transform( self, X, y = None ):
        return X

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Вам нужно создать экземпляр оценки, прежде чем передать ее Pipeline. Это должно работать:

skl_pipeline = Pipeline(steps=[('MyClass', MyClass()])
skl_pipeline.fit(None)
0 голосов
/ 02 апреля 2020

Согласно определению вашего класса, MyClass требует создания двух позиционных аргументов, а именно FilePath1 и FilePath2. Это предотвратит выполнение функции fit(). Поэтому я проверил ваш фрагмент кода, удалив функцию __init__(), и он работал нормально. Вы уверены, что ошибка относится к функции fit() MyClass?

...