Mat*_*amp 7 python regression tensorflow
我试图在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)))
Run Code Online (Sandbox Code Playgroud)
你在计算"R ^ 2"是什么
![R ^ 2 _ {\ text {wrong}} =\operatorname {mean} _i\left(\ frac {(y_i-\hat y_i)^ 2} {(y_i-\mu)^ 2} - 1\right)[1 ]](https://i.stack.imgur.com/FgWsa.png)
与给定的表达式相比,您在错误的位置计算平均值.在进行除法之前,您应该在计算错误时采用均值.
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)
我强烈建议不要使用食谱来计算这个!我发现的示例并不能产生一致的结果,尤其是只有一个目标变量时。这让我非常头疼!
正确的做法是使用tensorflow_addons.metrics.RQsquare(). Tensorflow Add Ons在 PyPi 上(此处),文档是Tensorflow 的一部分(此处)。您所要做的就是设置y_shape输出的形状,通常是(1,)针对单个输出变量。
此外...我完全推荐使用 R 平方。它不应该与深度网络一起使用。
R2 倾向于乐观地估计线性回归的拟合度。它总是随着模型中包含的效应数量而增加。调整后的 R2 试图纠正这种高估。如果特定效应不能改善模型,则调整后的 R2 可能会降低。
IBM Cognos Analytics 调整后的 R 平方
该函数在这里给出:
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)
这里解释了这个概念。
| 归档时间: |
|
| 查看次数: |
5368 次 |
| 最近记录: |