使用tf.keras时如何打印多元线性回归模型的预测方程?
提取模型线性预测方程的实操方法
当前搭建的模型为「输入特征→归一化预处理→单神经元全连接输出」的结构,想要得到对应原始输入特征的预测方程,需要分别提取两层的计算参数,合并展开后得到最终表达式。注意不能直接只取全连接层的权重——这部分权重是匹配归一化后特征的,直接套用会和原始输入维度对不上,导致方程结果偏差。
具体操作步骤
- 提取归一化层的固定参数:调用
normalizer.get_weights()可以拿到adapt阶段存储的两个值——每个原始特征的均值、每个原始特征的方差,归一化层对每个特征的转换规则为归一化特征值 = (原始特征值 - 对应均值) / 对应方差的平方根 - 提取全连接层的可训练参数:取模型第二层(即设置为
units=1的Dense层)的权重,这层的计算规则为预测值 = 所有(归一化特征值 × 对应权重) + 层偏置值 - 将归一化规则代入全连接的计算公式,合并同类项后,就能得到以原始2个特征为自变量的最终预测方程
可直接复用的代码
# 提取归一化层参数 norm_params = normalizer.get_weights() feat_means, feat_vars = norm_params[0], norm_params[1] # 提取Dense层参数 dense_params = model.layers[1].get_weights() dense_w, dense_b = dense_params[0], dense_params[1][0] # 展开合并为原始特征空间的方程 total_bias = dense_b feat_coefs = [] for idx in range(len(feat_means)): # 计算原始特征对应的实际权重 orig_coef = dense_w[idx][0] / (feat_vars[idx] ** 0.5) feat_coefs.append(orig_coef) # 合并归一化带来的常数项到截距里 total_bias -= feat_means[idx] * orig_coef # 打印格式化的方程 feat_names = fundingTrainSet.columns.tolist() equation_str = "标签预测值 = " for i, (name, coef) in enumerate(zip(feat_names, feat_coefs)): equation_str += f"{coef:.4f} × {name}" if i != len(feat_names) - 1: equation_str += " + " equation_str += f" + {total_bias:.4f}" print(equation_str)
注意事项
- 按上述方法展开的方程,计算结果和模型直接调用
model.predict()的输出完全一致,不存在参数偏差 - 如果后续模型调整了预处理逻辑(比如加了离散特征编码、多层网络),只要顺着数据流向,把每一层的数学运算逐步展开、合并同类项,就能得到最终的表达式
内容的提问来源于stack exchange,提问作者010000010101001101001000010
相关产品推荐
相关产品推荐

