我在“动手机器学习”一书中处理问题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
但这不适合我。 :(
答案 0 :(得分:0)
警告,我将在这里大致简化,但我希望这会有所帮助。
在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_pipeline
,housing
和{ {1}}。
如果检查housing_labels
方法的定义,您可能会发现它确实只需要两个参数。我猜第一个将被称为fit
。