如何在Tensorflow中计算R^2

问题描述 投票:0回答:6

我正在尝试在 Tensorflow 中进行回归。我不确定我是否正确计算了 R^2,因为 Tensorflow 给了我一个与

sklearn.metrics.r2_score
不同的答案,有人可以看一下我下面的代码,让我知道我是否正确实现了图中的方程。谢谢

The formula I am attempting to create in TF

total_error = tf.square(tf.sub(y, tf.reduce_mean(y)))
unexplained_error = tf.square(tf.sub(y, prediction))
R_squared = tf.reduce_mean(tf.sub(tf.div(unexplained_error, total_error), 1.0))
R = tf.mul(tf.sign(R_squared),tf.sqrt(tf.abs(R_squared)))
python tensorflow regression
6个回答
10
投票

您计算的“R^2”是

R^2_{\text{wrong}} = \operatorname{mean}_i \left( \frac{(y_i-\hat y_i)^2}{(y_i-\mu)^2} - 1\right)1

与给定的表达式相比,您在错误的位置计算平均值。在进行除法之前,计算误差时应该取平均值。

unexplained_error = tf.reduce_sum(tf.square(tf.sub(y, prediction)))
total_error = tf.reduce_sum(tf.square(tf.sub(y, tf.reduce_mean(y))))
R_squared = tf.sub(1, tf.div(unexplained_error, total_error))

7
投票

我强烈建议不要使用食谱来计算这个!我发现的示例并不能产生一致的结果,尤其是只有一个目标变量时。这让我非常头疼!

正确的做法是使用

tf.keras.metrics.R2Score
。 Tensorflow 附加组件位于 PyPi ,文档是 Tensorflow 的一部分。您所要做的就是将
y_shape
设置为输出的形状,通常对于单个输出变量来说是
(1,)

此外...我完全推荐使用 R 平方。它不应该与深度网络一起使用。

R2 倾向于乐观地估计线性回归的拟合度。它总是随着模型中包含的效应数量而增加。调整后的 R2 试图纠正这种高估。如果特定效果不能改善模型,则调整后的 R2 可能会降低。

IBM Cognos Analytics 调整后的 R 平方


5
投票

函数在这里给出:

def R_squared(y, y_pred):
  residual = tf.reduce_sum(tf.square(tf.subtract(y, y_pred)))
  total = tf.reduce_sum(tf.square(tf.subtract(y, tf.reduce_mean(y))))
  r2 = tf.subtract(1.0, tf.div(residual, total))
  return r2

这个概念已解释here


1
投票

所有其他解决方案都不会为多维 y 生成正确的 R 平方分数。在 TensorFlow 中计算 R2(方差加权)的正确方法是:

unexplained_error = tf.reduce_sum(tf.square(标签 - 预测))
Total_error = tf.reduce_sum(tf.square(labels - tf.reduce_mean(labels, axis=0)))
R2 = 1。- tf.div(无法解释的错误,总错误)

此 TF 片段的结果与 sklearn 的结果完全匹配:

从 sklearn.metrics 导入 r2_score
R2 = r2_score(标签、预测、多输出='variance_weighted')

0
投票

实际上应该与右侧相反。无法解释的方差除以总方差


0
投票

我觉得应该是这样的:

total_error = tf.reduce_sum(tf.square(tf.sub(y, tf.reduce_mean(y))))
unexplained_error = tf.reduce_sum(tf.square(tf.sub(y, prediction)))
R_squared = tf.sub(1, tf.div(unexplained_error, total_error))
© www.soinside.com 2019 - 2024. All rights reserved.