【问题标题】:R-squared negative for a linear regression model - Tensorflow线性回归模型的 R 平方负数 - Tensorflow
【发布时间】:2020-10-23 09:16:49
【问题描述】:

我构建了一个没有激活函数的神经网络,因此它是一个线性回归模型:

def build_model():
  model = tf.keras.models.Sequential([
  tf.keras.layers.Input(shape=(1,)),
  tf.keras.layers.Dense(1)
  ])

  model.compile(optimizer='adam', loss='mse',metrics=['mae','mse','mape',coeff_determination]) 

  return model

我的 coeff_dermination 确定如下:

from keras import backend as K

def coeff_determination(y_true, y_pred):
    SS_res =  K.sum(K.square( y_true-y_pred )) 
    SS_tot = K.sum(K.square( y_true - K.mean(y_true) ) ) 
    return ( 1 - SS_res/(SS_tot + K.epsilon()) )

从数学上讲,线性回归模型的 R 平方不能低于 0,因为: 解释方差 + 误差方差 = 总方差。

但是当我训练上面的模型时,R-squared 有时可能是负数。

为什么?感谢您的想法/灯光

【问题讨论】:

    标签: tensorflow linear-regression activation-function


    【解决方案1】:

    如果您的模型拟合数据比简单地返回您预测的数据集的平均值更差,则 R Squared 可能为负数。

    查看What Is R Squared And Negative R Squared了解更多信息。

    一件事可能会有所帮助 - 我会避免使用配方来计算这个!我发现的例子并没有产生一致的结果,尤其是只有一个目标变量。这让我非常头疼!

    正确的做法是使用tensorflow_addons.metrics.RQsquare()。 Tensorflow Add Ons 是 on PyPi here,文档是 part of Tensorflow here。您所要做的就是将y_shape 设置为输出的形状,通常是(1,) 用于单个输出变量。

    【讨论】:

      猜你喜欢
      • 2018-03-16
      • 2017-11-13
      • 2020-09-20
      • 2020-12-14
      • 2018-04-28
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 2016-12-26
      相关资源
      最近更新 更多