一个有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。
权重存储在
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