【发布时间】:2016-12-26 04:33:42
【问题描述】:
与线性回归相关的关键参数很少,例如调整后的 R 平方、系数、P 值、R 平方、多重 R 等。在使用谷歌 Tensorflow API 实现线性回归时,这些参数是如何映射的?有什么方法可以在模型执行之后/期间获取这些参数的值
【问题讨论】:
标签: tensorflow linear-regression p-value
与线性回归相关的关键参数很少,例如调整后的 R 平方、系数、P 值、R 平方、多重 R 等。在使用谷歌 Tensorflow API 实现线性回归时,这些参数是如何映射的?有什么方法可以在模型执行之后/期间获取这些参数的值
【问题讨论】:
标签: tensorflow linear-regression p-value
根据我的经验,如果您想在模型运行时获得这些值,那么您必须使用 tensorflow 函数对它们进行手动编码。如果您在模型运行后想要它们,您可以使用 scipy 或其他实现。下面是一些关于如何编写 R^2、MAPE、RMSE 的示例......
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(tf.div(total_error, unexplained_error),1.0)
R = tf.mul(tf.sign(R_squared),tf.sqrt(tf.abs(unexplained_error)))
MAPE = tf.reduce_mean(tf.abs(tf.div(tf.sub(y, prediction), y)))
RMSE = tf.sqrt(tf.reduce_mean(tf.square(tf.sub(y, prediction))))
【讨论】:
我相信 R2 的公式应该如下。请注意,当网络非常糟糕以至于它比仅仅作为预测变量的平均值做得更差时,它会变成负数:
total_error = tf.reduce_sum(tf.square(tf.subtract(y, tf.reduce_mean(y))))
unexplained_error = tf.reduce_sum(tf.square(tf.subtract(y, pred)))
R_squared = tf.subtract(1.0, tf.divide(unexplained_error, total_error))
【讨论】:
Adjusted_R_squared = 1 - [ (1-R_squared)*(n-1)/(n-k-1) ]
而 n 是观察数,k 是特征数。
【讨论】:
您不应该对 R Squared 使用公式。这存在于 TensorFlow 插件中。您只需将其扩展到 Adjusted R Squared。
我强烈建议不要使用配方来计算 r 平方本身!我发现的例子并没有产生一致的结果,尤其是只有一个目标变量。这让我非常头疼!
正确的做法是使用tensorflow_addons.metrics.RQsquare()。 Tensorflow Add Ons 是 on PyPi here,文档是 part of Tensorflow here。您所要做的就是将y_shape 设置为输出的形状,通常是(1,) 用于单个输出变量。
然后您可以使用 RSquare() 在您自己的处理调整的指标中返回的值。
【讨论】: