回归评测指标R2可以是负数吗? 您所在的位置:网站首页 f检验的f值一定不是负数吗 回归评测指标R2可以是负数吗?

回归评测指标R2可以是负数吗?

2024-07-14 11:24| 来源: 网络整理| 查看: 265

在评测回归模型时,R^2是一个常用的指标(其出现最早可追溯到初中时期...)。印象里的R^2的取值为[0,1],R^2的值越接近1,说明回归模型对数据的拟合程度越好。

问题源自一次使用sklearn做线性回归的实验,笔者使用了内置的计算R^2的函数,惊奇地发现得到的居然是一个负数。一方面说明回归模型失败了[捂脸],而另一方面也令人颇为不解——为什么R^2可以为负呢?

带着强烈的好奇心,笔者从sklearn的文档开始读起,弄明白了这是怎么回事。随手记录下来供大家参考。

先说结论:

R^2确实有两种不同的定义,其中一种的定义域包含负值在普通最小二乘 (OLS) 拟合中,两种定义等价,R^2取值范围是[0,1] R^2 的两种定义 从“可解释方差”的角度来看

从这一角度来看,认为回归问题中总平方和(Total Sum of Square, SS_{tot})是由两部分组成的。一部分是回归平方和(Regression Sum of Square, SS_{reg}),表示回归模型通过拟合数据能够表示的数据的方差;另一部分是残差平方和(Residual Sum of Square, SS_{res}),表示回归模型无法表示的数据的方差。这样一来,我们可以定义R^2为“可解释方差”的比例:

R^2=\frac{SS_{reg}}{SS_{tot}}=\frac{\sum_{i=1}^{N}{(\hat{y_i}-\bar{y})^2}}{\sum_{i=1}^{N}{(y_i-\bar{y})^2}}

显然,由于SS_{reg}一定是SS_{tot}的子集,因此在这种定义下R^2一定为正,而且取值介于0和1之间。

从“残差平方和的补”的角度来看

从这一角度来看,认为回归模型的效果应该用回归残差的补来衡量,进一步说就是先计算残差平方和占总平方和的比例,然后用1减去这一比例:

R^2=1-\frac{SS_{res}}{SS_{tot}}=1-\frac{\sum_{i=1}^{N}{(\hat{y_i}-y_i)^2}}{\sum_{i=1}^{N}{(y_i-\bar{y})^2}}

这么定义乍一看和上一种定义方式是一样的,但这样隐含地认为回归的SS_{res}也是SS_{tot}的子集,但实际上却不一定满足。在这种定义方式下,当SS_{res}大于SS_{tot}的时候,R^2 就会出现负值。

那么什么时候两种定义下的R^2相同,什么时候会出现负值呢?下面加以讨论。

什么时候R^2 取值在[0,1]

等价问题是:什么时候R^2的两种定义方式等价。

可以证明,当使用普通最小二乘(Ordinary Least Square, OLS)拟合的时候,两种R^2 的定义等价。

证明两种定义等价,等价于证明总平方和SS_{tot} =回归平方和SS_{reg} +残差平方和SS_{res},即:

\sum_{i=1}^{N}{(y_i-\bar{y})^2}=\sum_{i=1}^{N}{(\hat{y_i}-\bar{y})^2}+\sum_{i=1}^{N}{(\hat{y_i}-y_i)^2}

而等号左侧可以分解成:

\sum_{i=1}^{N}{(y_i-\bar{y})^2}=\sum_{i=1}^{N}{(\hat{y_i}-\bar{y})^2}+\sum_{i=1}^{N}{(\hat{y_i}-y_i)^2}

=\sum_{i=1}^{N}{(y_i-\hat{y_i})^2}+\sum_{i=1}^{N}{(\hat{y_i}-\bar{y})^2}+2\sum_{i=1}^{N}{(y_i-\hat{y_i})(\hat{y_i}-\bar{y})}

所以问题进一步转变为:证明在OLS中满足:

2\sum_{i=1}^{N}{(y_i-\hat{y_i})(\hat{y_i}-\bar{y})}=0

OLS是线性模型,其中一种最简单的形式为:

y_i=ax_i+b

如果存在多个自变量,或者存在多个因变量,需要写成向量/矩阵的形式:

y_i=\textbf a \textbf x_i+b , \textbf y_i=\textbf a X+\textbf b

下面以最简单的形式y_i=ax_i+b 为例加以证明:

\sum_{i=1}^{N}{(y_i-\hat{y_i})(\hat{y_i}-\bar{y})}

=\sum_{i=1}^{N}{[y_i-(ax_i+b)][(ax_i+b)-\bar{y})}

=\sum_{i=1}^{N}{[y_i-(ax_i+\bar{y}-a\bar{x})][(ax_i+\bar{y}-a\bar{x}))-\bar{y})}

=\sum_{i=1}^{N}{[(y_i-\bar{y})-a(x_i-\bar{x})][a(x_i-\bar{x})]}

=a\sum_{i=1}^{N}{(y_i-\bar{y})(x_i-\bar{x})}-a^2\sum_{i=1}^{N}{(x_i-\bar{x})^2}

=a\sum_{i=1}^{N}{(y_i-\bar{y})(x_i-\bar{x})}-a\sum_{i=1}^{N}{(y_i-\bar{y})(x_i-\bar{x})}

=0

所以在最小二乘条件下,两种R^2的两种定义方式等价,R^2的取值范围为[0,1]。

什么时候R^2是负值

当拟合方式不是最小二乘回归时(比如用非线性方程去拟合数据),R^2可能为负,此时R^2的值域为(-\infty,1]。要特别注意OLS中的截距项是必不可少的,这一点从上面的证明中也能看出来。

最后说一下sklearn中的回归模型。sklearn中默认的linear regression的拟合方式是最小二乘回归。笔者实验过程是在测试集上计算R^2得到了负值,所以并不是严格意义上的R^2 。需要注意,在不划分训练测试集的情况下,使用的又是默认参数,得到的R^2应该是介于0到1之间的,如果得到了负值的R^2,很可能是出了问题。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有