TypeError: fit() 接受 1 个位置参数,但给出了 3 个

Posted

技术标签:

【中文标题】TypeError: fit() 接受 1 个位置参数,但给出了 3 个【英文标题】:TypeError: fit() takes 1 positional argument but 3 were given 【发布时间】:2020-07-14 08:06:19 【问题描述】:

我正在尝试编写一个仅由一个分类器组成的管道,并且失败了。

我通过运行这个得到标题中的错误:

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

我给它什么参数都没有关系,所以我只是写了None作为例子。

这是我的班级定义:

class MyClass (BaseEstimator, ClassifierMixin):

还有我的“适合”功能:

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

【问题讨论】:

只是一个代码风格的建议:变量应该是小写而不是驼峰式:而不是FilePath1file_path1。除此之外,更重要的是,根据 sckit 学习指南,属性必须以它们的变量命名,所以它应该是self.file_path1 = file_path1。 checkout docs here 【参考方案1】:

您需要先实例化您的估算器,然后再将其传递给Pipeline。这应该有效:

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

【讨论】:

这对我有用。请使用显示问题的完整、可运行的示例更新问题。

以上是关于TypeError: fit() 接受 1 个位置参数,但给出了 3 个的主要内容,如果未能解决你的问题,请参考以下文章

Sklearn - FeatureUnion - Transformer: TypeError: fit_transform() 接受 2 个位置参数,但给出了 3 个

如何修复“TypeError:fit_transform() 需要 2 个位置参数,但给出了 3 个”

TypeError: worker() 接受 0 个位置参数,但给出了 1 个

TypeError: __init__() 接受 1 个位置参数,但给出了 2 个

TypeError: login() 接受 1 个位置参数,但给出了 2 个

TypeError: done() 接受 1 个位置参数,但给出了 2 个