【问题标题】:Sklearn linear regression model yields negative R2 valueSklearn 线性回归模型产生负 R2 值
【发布时间】:2021-08-09 02:18:45
【问题描述】:

我一直在研究一些国际足联的数据,想看看运球和控球之间的关系。我在下面创建了一个线性回归,但是当我使用.score 方法获得 R2 时,我得到了 -1.9345 的输出。这显然是错误的,因为 R2 不能大于 1。有人可以用外行的话解释我哪里出错了。

另外,我注意到当我执行metrics.r2_score(x_test,y_test)) 时,我得到了正确的 R2。

x = fifa["Dribbling"].values.reshape(-1,1)
y = fifa["BallControl"].values.reshape(-1,1)

x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.3,random_state=42)
LinModel=LinearRegression()
LinModel.fit(x_train,y_train)
print(LinModel.intercept_)
print(LinModel.coef_)
y_estimates=LinModel.predict(x_test)

# Print R2 score
print(LinModel.score(x_test,y_test))
> -1.9345

【问题讨论】:

  • 为什么用 R 标记? R 是一种统计编程语言,它不是 R2。
  • 请不要使用不相关的标签。 (已移除)

标签: python machine-learning scikit-learn regression


【解决方案1】:

Sklearn 的线性模型有时会产生意想不到的行为,尤其是如果您有统计学背景。从sklearn.linear_model.LinearRegressionthe documentation开始,score方法默认返回R^2系数,依次定义如下:

系数R^2定义为(1 − u/v),其中u为残差平方和@987654324 @ 和 v 是平方和 ((y_true - y_true.mean()) ** 2).sum()。最好的分数是 1.0,它可以是负数(因为模型可以任意变坏)。始终预测 y 的期望值的常量模型,不考虑输入特征,将获得 0.0 的 R^2 分数。

如您所见,如果 u 很大,则 R^2 系数将为负。之所以如此,是因为 sklearn 是为预测任务而非推理而设计的,因此它的一些指标不符合教科书的定义。

为了以后参考,声明y时不需要重新整形目标。 Sklearn 的回归模型可以处理类似数组的一维结构。

【讨论】:

    猜你喜欢
    • 2020-12-24
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2018-05-16
    • 2017-10-13
    • 2021-04-16
    • 2021-02-20
    • 2019-10-09
    相关资源
    最近更新 更多