Sklearn error : predict(x,y) takes 2 positional arguments but 3 were given

Sklearn error : predict(x,y) takes 2 positional arguments but 3 were given

我正在 sklearn 上构建多元回归分析,我仔细查看了文档。当我 运行 predict() 函数时,我得到错误:predict() 需要 2 个位置参数,但给出了 3 个

X是数据框,y是列;我尝试将数据框转换为数组/矩阵,但仍然出现错误。

已添加显示 x 和 y 数组的片段。

reg.coef_
reg.predict(x,y)

x_train=train.drop('y-variable',axis =1)
y_train=train['y-variable']

x_test=test.drop('y-variable',axis =1)
y_test=test['y-variable']


x=x_test.as_matrix()
y=y_test.as_matrix()

reg = linear_model.LinearRegression()
reg.fit(x_train,y_train)

reg.predict(x,y)

使用reg.predict(x)。您不需要向 predict 提供 y 值。事实上,训练机器学习模型的目的是让它在给定 x 中的输入参数的情况下推断出 y 的值。

此外,predict here 的文档解释说 predict 只需要 x 作为参数。

出现错误的原因:

predict() takes 2 positional arguments but 3 were given

是因为,当您调用 reg.predic(x) 时,python 会将其隐式转换为 reg.predict(self,x),这就是为什么错误会告诉您 predict() 接受 2 个位置参数 。您调用预测的方式 reg.predict(x,y) 将被转换为 reg.predict(self,x,y) 因此将使用 3 个位置参数而不是 2 个,这解释了整个错误消息。

当您在测试集上进行测试时,假设您没有它的标签。您正在测试您的模型的泛化能力,因此您将预测与真实标签进行比较。当你想预测时,你只使用你的 X 变量。

我认为您对 reg.predict()reg.score() 感到困惑,前者是一种使用数据训练的模型对数据进行预测的方法。它只将您的 features/independent 变量 X 和对象本身 self (内部处理)作为输入,并为您提供相应的预测 target/dependent 变量 Y ,稍后可以将其与目标变量的实际值进行比较并评估模型的性能。但是,如果您希望一步完成模型评估,您可以使用 reg.score() 方法,该方法将 XY 作为输入并计算相应的评估指标(R^ 2 或准确性取决于手头的问题)。详情请参考sklearn.linear_model.LinearRegression

此外,这些方法对于 sklearn 中的大多数监督学习模型都是通用的。