R方是统计学里常用的统计量,在不同任务模型下的解读和用途不一,有时候会出现误用情况。本文总结了对R方的理解和用法,遵循“从一般到特殊”的思路,先讲一般回归模型中的R方,再讲线性回归模型里的R方。"一般"回归模型包括线性模型,随机森林,神经网络等。
- R方的定义
R方的名字是coefficient of determination,另一个名字是Nash–Sutcliffe model efficiency coefficient。给定一系列真值 和对应的预测值, 另有为期望均值,R方的定义为
R方的含义是,预测值解释了 变量的方差的多大比例,衡量的是预测值对于真值的拟合好坏程度。通俗理解,假定 的方差为1个单位,则R方表示"使用该模型之后, 的残差的方差减少了多少"。比如R方等于0.8,则使用该模型之后残差的方差为原始 值方差的20%。
后边的分式中,分子是预测值与真实值的差方和,分母是真实值与均值的差方和,对一个样本来说,分母是固定的,当分子上预测值和真实值相当接近时,分子就非常的小,R方值就趋近于1,表示预测的就越准;如果预测值和均值很接近,那么分式就比较接近于1,R方接近于0,也就是胡乱用平均值来应付预测也可以得到一个R方为0的结果;如果预测值和真实值差别相当的大,后边的分式结果就比较大了,方差值就非常小(当然可能是负数,比用平均值来预测都差的结果啊)。
- R方=1:最理想情况,所有的预测值等于真值。
- R方=0:一种可能情况是"简单预测所有y值等于y平均值",即所有 都等于(即真实y值的平均数),但也有其他可能。
- R方<0:模型预测能力差,比"简单预测所有y值等于y平均值"的效果还差。这表示可能用了错误模型,或者模型假设不合理。
- R方的最小值没有下限,因为预测可以任意程度的差。因此,R方的范围是 (−∞,1] 。
- 注意:R方并不是某个数的平方,因此可以是负值。
Python里的scikit-learn包里,sklearn.metrics.r2_score即是R方的实现。sklearn的RandomForestRegressor等回归模型中,带有score(self, X, y)的函数,这个函数返回的是根据X得到的预测值和真值y的R方。