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
【问题讨论】:
只是一个代码风格的建议:变量应该是小写而不是驼峰式:而不是FilePath1
去file_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 个