我试图在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)))
6条答案
按热度按时间gmxoilav1#
你要计算的R^2是
与给定的表达式相比,你在错误的地方计算了平均值。2你应该在计算误差时取平均值,然后再做除法。
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
kgsdhlau3#
函数为here:
这个概念被解释为here。
iovurdzv4#
所有其他解决方案都不会为多维y产生正确的R平方分数。在TensorFlow中计算R2(方差加权)的正确方法是:
这个TF片段的结果与sklearn的结果完全匹配:
bvjveswy5#
实际上在rhs上应该是相反的。无法解释的方差除以总方差
mqkwyuun6#
我觉得应该是这样的: