You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:36:03