如何在Tensorflow中计算R^2

dzhpxtsq  于 2023-04-07  发布在  其他
关注(0)|答案(6)|浏览(193)

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

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)))
gmxoilav

gmxoilav1#

你要计算的R^2是

与给定的表达式相比,你在错误的地方计算了平均值。2你应该在计算误差时取平均值,然后再做除法。

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))
2guxujil

2guxujil2#

我强烈建议不要使用配方来计算这个!我发现的例子不能产生一致的结果,特别是只有一个目标变量。这让我非常头疼!
正确的做法是使用tensorflow_addons.metrics.RQsquare()。Tensorflow Add Ons是on PyPi here,文档是part of Tensorflow here。您所要做的就是将y_shape设置为输出的形状,通常是(1,)用于单个输出变量。
此外......我建议使用R平方。它不应该用于深度网络。
R2倾向于乐观地估计线性回归的拟合。它总是随着模型中包含的效应数而增加。调整后的R2试图纠正此高估。如果特定效应没有改善模型,则调整后的R2可能会降低。
IBM Cognos Analytics on Adjusted R Squared

kgsdhlau

kgsdhlau3#

函数为here

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

iovurdzv

iovurdzv4#

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

unexplained_error = tf.reduce_sum(tf.square(labels - predictions))
total_error = tf.reduce_sum(tf.square(labels - tf.reduce_mean(labels, axis=0)))
R2 = 1. - tf.div(unexplained_error, total_error)

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

from sklearn.metrics import r2_score
R2 = r2_score(labels, predictions, multioutput='variance_weighted')
bvjveswy

bvjveswy5#

实际上在rhs上应该是相反的。无法解释的方差除以总方差

mqkwyuun

mqkwyuun6#

我觉得应该是这样的:

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))

相关问题