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

含正负值数据集归一化至0-1后预测不佳,求保留正负值的优化方案

问题背景

我手头的数据集包含正负值,用MinMaxScaler归一化到0-1区间后预测效果很差;但把负值转成绝对值后再归一化,效果有明显提升。我希望在保留原始数据正负属性的前提下,让模型获得同样好的预测表现。

当前模型最后一层用Sigmoid激活,结构如下:

model = Sequential()
model.add(LSTM(64, activation='relu', return_sequences=False, input_shape=(50,89)))
model.add(Dense(32, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='mse', optimizer=Adam(learning_rate=0.002), metrics=['mse'])
model.summary()

两种归一化方式的代码

用abs()处理负值的归一化代码

df = pd.read_csv('1113_Rwalk40s1.csv', low_memory=False)
columns = ['Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz']
selected_df = df[columns]
FCDatas = selected_df[:2050]
FCDatas = abs(FCDatas)

SmartInsole = np.array(SIData[:2050])
FCData = np.array(FCDatas)
Dataset = np.concatenate((SmartInsole, FCData), axis=1)

scaler_in = MinMaxScaler(feature_range=(0, 1))
scaler_out = MinMaxScaler(feature_range=(0, 1))
data_scaled_in = scaler_in.fit_transform(Dataset[:,0:89])
data_scaled_out = scaler_out.fit_transform(Dataset[:,89:90])

注:该方式下模型预测效果更优

未用abs()的原始归一化代码

df = pd.read_csv('1113_Rwalk40s1.csv', low_memory=False)
columns = ['Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz']
selected_df = df[columns]
FCDatas = selected_df[:2050]

SmartInsole = np.array(SIData[:2050])
FCData = np.array(FCDatas)
Dataset = np.concatenate((SmartInsole, FCData), axis=1)

scaler_in = MinMaxScaler(feature_range=(0, 1))
scaler_out = MinMaxScaler(feature_range=(0, 1))
data_scaled_in = scaler_in.fit_transform(Dataset[:,0:89])
data_scaled_out = scaler_out.fit_transform(Dataset[:,89:90])

注:该方式下模型预测效果较差

针对性解决建议
  • 替换归一化策略:MinMaxScaler(0,1)会把正负值压缩到0-1区间,丢失了原本的正负分布信息。可以试试:

    1. StandardScaler:将数据标准化为均值0、方差1,完整保留正负分布,适合带正负值的序列数据;
    2. MinMaxScaler(feature_range=(-1,1)):直接把数据归一化到-1到1区间,既做了缩放,又保留正负属性。
  • 调整激活函数:

    1. 最后一层用Sigmoid会限制输出在0-1,但如果目标变量本身有正负,换成Tanh(输出-1到1)或Linear(无限制输出)更匹配,MSE损失同样适用;
    2. 前面的ReLU激活会直接丢弃负值梯度,换成LeakyReLU或ELU,保留部分负向信息,帮助模型学习正负差异。
  • 优化特征处理:

    1. 对带正负值的特征单独做归一化/标准化,再和其他特征拼接,避免其他特征的分布干扰正负特征的表达;
    2. 新增二分类特征:给每个样本加一列标记(1为正,0为负),和原始特征一起输入,强化模型对正负属性的感知。
  • 微调模型结构:

    1. 把LSTM的return_sequences=True,叠加一层LSTM,让模型捕捉更长序列中的正负变化规律;
    2. 加入Dropout层(如model.add(Dropout(0.2)))抑制过拟合,提升模型泛化能力。

内容的提问来源于stack exchange,提问作者lead step

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:20:35