Scikit learn中的R2值是如何计算的?

26 投票
2 回答
42934 浏览
提问于 2025-04-18 04:20

在使用scikit learn中的metrics.r2_score()时,返回的R²值有可能是负数。文档中提到:

“与其他大多数评分不同,R²评分可能是负数(它不一定是某个量R的平方)。”

不过,关于R²的维基百科文章并没有提到任何未平方的R量。也许它使用的是绝对差值,而不是平方差值。我真的不太清楚。

2 个回答

9

因为 R^2 = 1 - RSS/TSS,所以只有在我们的模型比最差的模型还要差的时候,RSS/TSS 才会大于 1。最差的模型就是绝对均值模型。

这里的 RSS 是实际值(yi)和预测值(yi^)之间差异的平方和,而 TSS 是实际值(yi)和均值之间差异的平方和(在应用回归之前)。你可以想象 TSS 代表了最好的实际模型,而 RSS 则介于我们最好的模型和最差的绝对均值模型之间,这种情况下我们会得到 RSS/TSS 小于 1。如果我们的模型甚至比最差的均值模型还要差,那么在这种情况下 RSS 就会大于 TSS(因为实际观察值和均值之间的差异小于预测值和实际观察值之间的差异)。

想要更直观的理解,可以查看这里的可视化表示: https://ragrawal.wordpress.com/2017/05/06/intuition-behind-r2-and-other-regression-evaluation-metrics/

39

在scikit learn中,R^2的意思和维基百科上关于决定系数的描述基本相同(可以在文章中搜索“最一般的定义”)。它的计算公式是:1 - 残差平方和 / 总平方和

传统统计和机器学习之间的一个大区别是,机器学习中你会在看不见的数据上评估你的得分,这可能导致结果超出[0,1]的范围。如果你把R^2应用到你用来训练模型的同一组数据上,它的值会在[0, 1]之间。

你也可以看看这个非常相似的问题

撰写回答