如何从Keras线性回归模型中得到回归系数?

问题描述 投票:0回答:1

一个有k个预测因子X1,X2,...,Xk和一个响应Y的多元线性回归模型,可以写成y = β0 + β1X1 + β2X2 + --- βkXk + "。

我按照这里的教程用tf.keras做了基本的回归。https:/www.tensorflow.orgtutorialskerasregression. 是否有可能输出β变量,这样我就可以检查它们对响应的贡献?

顺便说一下,教程中让你建立的模型是这样的。

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。

python keras linear-regression tf.keras
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.