我们如何从 Keras 线性回归模型中获取回归系数?

How can we get regression coefficients from a Keras linear regression model?

具有 k 个预测变量 X1、X2、...、Xk 的多元线性回归模型 和响应 Y ,可以写成 y = β0 + β1X1 + β2X2 + ··· βkXk + ".

我按照此处的教程使用 tf.keras 进行基本回归。 https://www.tensorflow.org/tutorials/keras/regression。是否可以输出 β 变量以便我检查它们对响应的贡献?

顺便说一句,教程让您构建的模型如下所示:

def build_model():
  model = keras.Sequential([
    layers.Dense(64, activation='relu', input_shape=[len(train_dataset.keys())]),
    layers.Dense(64, activation='relu'),
    layers.Dense(1)
  ])

  optimizer = tf.keras.optimizers.RMSprop(0.001)

  model.compile(loss='mse',
                optimizer=optimizer,
                metrics=['mae', 'mse'])
  return model

其中 len(train_dataset.keys()) 为 9。

权重存储在:

model.layers[n].weights

使用 layers 列表和 n 模型中的图层索引。

在你的例子中,因为输入形状是 (9,)

>>> len(model.layers[0].weights)
2
>>> model.layers[0].weights[0].shape
TensorShape([9, 64])
>>> model.layers[0].weights[1].shape
TensorShape([64])

为了解释这些,假设第一层是用 x 计算 h = ReLU(Ax+b) 一个 (9,) 的向量然后 A 是一个形状矩阵 (9,64)b 形状为 (64,) 的向量,并且 h 也是形状为 (64,) 的向量。因此,model.layers[0].weights 是两个权重张量的列表 [A, b]

它是不是线性回归。如果你想要它,你需要做一个更简单的模型:

def build_model():
  model = keras.Sequential([
    layers.Dense(1, input_shape=[len(train_dataset.keys())])
  ])

  optimizer = tf.keras.optimizers.RMSprop(0.001)

  model.compile(loss='mse',
                optimizer=optimizer,
                metrics=['mae', 'mse'])
  return model

然后,经过数据训练后,model.layers[0].weights[0] 将具有 (9,1) 的形状,即你的 β1, β2, ..., βk; model.layers[0].weights[1] 的形状为 (1,),也就是你的 β0