【问题标题】:TypeError: fit() takes 1 positional argument but 3 were givenTypeError: fit() 接受 1 个位置参数,但给出了 3 个
【发布时间】: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_path1checkout docs here

标签: python python-3.x scikit-learn pipeline


【解决方案1】:

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

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

【讨论】:

  • 这对我有用。请使用显示问题的完整、可运行的示例更新问题。
猜你喜欢
  • 2015-07-13
  • 2015-09-01
  • 2019-06-28
  • 2020-10-28
  • 1970-01-01
  • 2023-03-03
  • 2020-06-13
  • 2021-02-02
  • 2021-07-30
相关资源
最近更新 更多