我们如何从 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
具有 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