【问题标题】:Type error: fit() takes 2 positional arguments but 3 were given类型错误:fit() 接受 2 个位置参数,但给出了 3 个
【发布时间】:2018-03-18 16:16:15
【问题描述】:

我在处理“机器学习动手”一书中的问题 4(第 2 章)时遇到此错误。这是“尝试创建一个管道来完成完整的数据准备和最终预测”的问题。该解决方案在 Github 链接中可用,但该解决方案给了我标题中提到的错误。我以住房数据为例。请帮帮我。

我写了这个命令,它触发了以下错误:

prepare_select_and_predict_pipeline = Pipeline([
('preparation', full_pipeline),
('feature_selection', TopFeatureSelector(feature_importances, k)),
('svm_reg', SVR(**rnd_search.best_params_))
])

prepare_select_and_predict_pipeline.fit(housing,housing_labels)

错误:

TypeError: fit() takes 2 positional arguments but 3 were given

我想附上来自 Github 的解决方案 Solution of Question 2 from Github

但这对我不起作用。 :(

【问题讨论】:

标签: python jupyter


【解决方案1】:

警告,我将在这里大体简化,但我希望这会有所帮助。

在 Python 中,如果您在对象上调用函数,则对象本身总是作为第一个参数传递(除非它是静态方法或类方法)。这通常由我们称为self 的参数捕获。

因此,如果您调用object.function(),您将参数传递给function,即object 本身。

class C:
    def f(self):
        print(self)

o = C()
o.f()         # <__main__.C object at 0x7f1049993f28>
o.f('hello')  # TypeError: f() takes 1 positional argument but 2 were given

在您的情况下,您正在调用 prepare_select_and_predict_pipeline.fit(housing, housing_labels),因此您正在传递函数 fit 三个参数:prepare_select_and_predict_pipelinehousinghousing_labels

如果您检查fit 方法的定义,您可能会发现它确实只需要两个 参数。我猜第一个会叫self

【讨论】:

  • 感谢您分享此信息,但您能帮我现在应该做什么。
  • 首先,从您的函数调用中删除一个参数。您可能想查看您正在调用的 fit 函数的文档或源代码。
  • 好的。将查看文档。谢谢
猜你喜欢
  • 2021-07-26
  • 1970-01-01
  • 2020-07-14
  • 2020-03-08
  • 1970-01-01
  • 2020-05-02
  • 2020-12-29
  • 2022-01-17
  • 2019-09-21
相关资源
最近更新 更多