类型错误:fit()接受2个位置参数,但给出了3个

2024-06-16 12:19:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我编写了此命令,它引发了以下错误:

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

但这对我不起作用。:(一)


Tags: and数据github机器管道pipeline错误解决方案
1条回答
网友
1楼 · 发布于 2024-06-16 12:19:50

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

在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

相关问题 更多 >