在评测回归模型时,是一个常用的指标(其出现最早可追溯到初中时期...)。印象里的
的取值为[0,1],
的值越接近1,说明回归模型对数据的拟合程度越好。
问题源自一次使用sklearn做线性回归的实验,笔者使用了内置的计算的函数,惊奇地发现得到的居然是一个负数。一方面说明回归模型失败了[捂脸],而另一方面也令人颇为不解——为什么
可以为负呢?
带着强烈的好奇心,笔者从sklearn的文档开始读起,弄明白了这是怎么回事。随手记录下来供大家参考。
先说结论:
确实有两种不同的定义,其中一种的定义域包含负值
- 在普通最小二乘 (OLS) 拟合中,两种定义等价,
取值范围是[0,1]
的两种定义
- 从“可解释方差”的角度来看
从这一角度来看,认为回归问题中总平方和(Total Sum of Square, )是由两部分组成的。一部分是回归平方和(Regression Sum of Square,
),表示回归模型通过拟合数据能够表示的数据的方差;另一部分是残差平方和(Residual Sum of Square,
),表示回归模型无法表示的数据的方差。这样一来,我们可以定义
为“可解释方差”的比例:
显然,由于一定是
的子集,因此在这种定义下
一定为正,而且取值介于0和1之间。
- 从“残差平方和的补”的角度来看
从这一角度来看,认为回归模型的效果应该用回归残差的补来衡量,进一步说就是先计算残差平方和占总平方和的比例,然后用1减去这一比例:
这么定义乍一看和上一种定义方式是一样的,但这样隐含地认为回归的也是
的子集,但实际上却不一定满足。在这种定义方式下,当
大于
的时候,
就会出现负值。
那么什么时候两种定义下的相同,什么时候会出现负值呢?下面加以讨论。
什么时候
取值在[0,1]
等价问题是:什么时候的两种定义方式等价。
可以证明,当使用普通最小二乘(Ordinary Least Square, OLS)拟合的时候,两种 的定义等价。
证明两种定义等价,等价于证明总平方和 =回归平方和
+残差平方和
,即:
而等号左侧可以分解成:
所以问题进一步转变为:证明在OLS中满足:
OLS是线性模型,其中一种最简单的形式为:
如果存在多个自变量,或者存在多个因变量,需要写成向量/矩阵的形式:
,
下面以最简单的形式 为例加以证明:
所以在最小二乘条件下,两种的两种定义方式等价,
的取值范围为[0,1]。
什么时候
是负值
当拟合方式不是最小二乘回归时(比如用非线性方程去拟合数据),可能为负,此时
的值域为
。要特别注意OLS中的截距项是必不可少的,这一点从上面的证明中也能看出来。
最后说一下sklearn中的回归模型。sklearn中默认的linear regression的拟合方式是最小二乘回归。笔者实验过程是在测试集上计算得到了负值,所以并不是严格意义上的
。需要注意,在不划分训练测试集的情况下,使用的又是默认参数,得到的
应该是介于0到1之间的,如果得到了负值的
,很可能是出了问题。