如何在预测后对数据进行反归一化处理?

3

我有一个数据集,包含2个特征(价格和成交量)和1个预测变量(价格),并使用LTSM模型根据先前的价格数据来预测下一个价格。

首先,我对数据集进行缩放处理:

#Scale the data
scaler = MinMaxScaler(feature_range=(0,1))
scaled_data = scaler.fit_transform(dataset)

最后我想将其还原为原始状态:

#Get the models predicted price values
predictions = model.predict(x_test)
predictions = scaler.inverse_transform(predictions)

但是这样做不起作用,我得到了这个错误:
ValueError: non-broadcastable output operand with shape (400,1) doesn't match the broadcast shape (400,2)
3个回答

1
这个错误的意思是:你已经对两个特征进行了缩放,即价格和数量,它们的形状为(400,2),但是在取消缩放时,你只提供了形状为(400,1)的预测价格。
一个简单的解决方案是使用两个单独的缩放器——一个用于取消缩放响应变量,即价格(以及相关的输入特征,即价格),另一个用于其余特征。

0

我决定向预测数据集添加零列,对其进行反缩放,然后删除未使用的列。虽然有点愚蠢但是这对我很有效 )


它“工作”(即不会产生任何编码错误)并不意味着它是正确的。请参阅其他答案,了解您实际需要做什么(您不应该使用特征缩放器的反转来取消缩放预测)。 - desertnaut
1
在 LSTM 时间序列预测中,输出与输入处于相同的空间。旧的价格变成了新的价格。 - Dmitry Isakov
@DmitryIsakov 的观察与我相同。我不确定缩放器是否适用于跨列,但通过将用于使 LSTM 预测价格的其他特征列清零,您可以将预测的价格还原为可提供实际入场/出场点的内容。 - j03m

0

你试过这个吗:

predictions = scaler.inverse_transform(predictions.reshape(-1,1)).reshape(-1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接