如何计算Tensorflow中的R ^ 2

Mat*_*amp 7 python regression tensorflow

我试图在Tensorflow中做回归.我不是肯定的我正在正确计算R ^ 2,因为Tensorflow给了我一个不同的答案,sklearn.metrics.r2_score有人可以看看我的下面的代码,让我知道我是否正确实现了图像方程.谢谢

我试图在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)))
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 9

你在计算"R ^ 2"是什么

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

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

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))
Run Code Online (Sandbox Code Playgroud)


rju*_*ney 6

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

正确的做法是使用tensorflow_addons.metrics.RQsquare(). Tensorflow Add Ons在 PyPi 上(此处),文档是Tensorflow 的一部分(此处)。您所要做的就是设置y_shape输出的形状,通常是(1,)针对单个输出变量。

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

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

IBM Cognos Analytics 调整后的 R 平方


Sha*_*ank 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
Run Code Online (Sandbox Code Playgroud)

这里解释了这个概念。