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

时间:2020-06-02 05:09:33

标签: python keras linear-regression tf.keras

具有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的地方。

1 个答案:

答案 0 :(得分:1)

权重存储在:

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])

要解释这些,假设第一层是用h = ReLU(Ax+b)的向量x计算(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