Keras双特征回归预测异常:输出仅单个值且数值偏差过大
问题原因及解决方案
核心问题根因
- 输出层配置错误:你的任务是预测2个特征值,但当前输出层设置为
Dense(1),仅能输出1个数值,这是直接导致输出只有1个参数的核心原因。你实际得到的21.77恰好是两个特征量级的中间值,就是模型在错误配置下,试图同时拟合两个不同量级输出得到的异常结果。 - 数据集构造错误:直接对字典
raw做切片raw[:-1]无法生成符合时序预测要求的样本,且raw中存储的特征值为字符串格式,没有转换为数值类型,模型输入不符合训练要求。 - 特征量级差异大未做归一化:两个特征一个处于40+量级、一个处于2+量级,量级差距过大,会导致ReLU激活函数训练不稳定,进一步加剧输出数值异常的问题。
代码调整方案
调整核心逻辑为:首先完成数据集清洗和时序样本构造,再修改模型输出层神经元数量匹配预测目标,可选添加归一化步骤提升训练精度。修改后可运行的代码如下:
# 导入依赖 from keras.models import Sequential from keras.layers import Dense import numpy as np # 原始数据处理:字符串转数值,合并为二维特征矩阵 raw = {'one': ['41.392953', '41.392889', '41.392825','41.392761', '41.392697'], 'two': ['2.163917','2.163995','2.164072','2.164150','2.164229' ]} data = np.column_stack([ np.array(raw['one'], dtype=np.float32), np.array(raw['two'], dtype=np.float32) ]) # 构造时序预测样本:用前一时刻的2个特征,预测后一时刻的2个特征 X = data[:-1] # 输入为前n-1个时刻的特征 y = data[1:] # 输出为后n-1个时刻的特征 # 模型定义:输出层设置为2个神经元,对应2个预测特征 model = Sequential() model.add(Dense(4, input_dim=2, activation='relu')) model.add(Dense(4, activation='relu')) model.add(Dense(2, activation='linear')) model.compile(loss='mse', optimizer='adam') # 训练模型 model.fit(X[:-1], y[:-1], epochs=1000, verbose=0) # 执行预测 Xnew = X[-1:] ynew = model.predict(Xnew) # 打印结果 print(f"输入X={Xnew}, 预测结果={ynew}")
如果需要进一步提升预测精度,可以在训练前对特征做Min-Max归一化或者标准化,预测完成后再反归一化得到原始量级的结果。
内容的提问来源于stack exchange,提问作者Poyita de troya
相关产品推荐
相关产品推荐

