逆变换在 LSTM 预测中抛出错误

inverse transform throws error in LSTM prediction

我有一个 LSTM,它将预测下一个时间步长的值。所以我的输入被缩放到 LSTM 中,如下所示:

test_X = reframed.values
test_X = test_X[:test_X.shape[0], :]
scaler = PowerTransformer()
test_X = scaler.fit_transform(test_X)
test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))
print(test_X.shape) 

(1, 1, 17)

然后我预测如下:

yhat = model.predict(test_X)

我对此很有价值。

现在我想反向缩放它所以我应用

inv_yhat = scaler.inverse_transform(yhat)

但这会引发如下错误:

ValueError: Input data has a different number of features than fitting data. Should have 17, data has 1

不确定为什么当模型已经预测值但只剩下反向缩放时会抛出此错误。

编辑:

我在训练中使用这样的定标器

scaler_x = PowerTransformer()
scaler_y = PowerTransformer()
train_X = scaler_x.fit_transform(train_X)
train_y = scaler_y.fit_transform(train_y.reshape(-1,1))
test_X = scaler_x.fit_transform(test_X)
test_y = scaler_y.fit_transform(test_y.reshape(-1,1))
print(train_X.shape, train_y.shape, test_X.shape, test_y.shape) 



import joblib
joblib.dump(scaler_x, 'scaler_x.gz')
joblib.dump(scaler_y, 'scaler_y.gz')

然后我按如下方式扩展我的新功能:

scaler = joblib.load('scaler.gz')
test_X =scaler.transform(test_X)

仍然抛出同样的错误。

感谢任何帮助。

当您仅将变换应用于 x 数据时,您正在尝试对 y 数据进行逆变换。特征数量的差异(x 为 17;y 为 1)是您得到该错误的原因

编辑:

您需要为 x 和 y 数据创建单独的缩放器,例如

scaler_x = PowerTransformer().fit(test_x)
scaler_y = PowerTransformer().fit(test_y) # can be any transformer
scaled_test_x = scaler_x.transform(test_x)
scaled_test_y = scaler_y.transform(test_y)

然后,当您想根据拟合模型进行预测时:

yhat = model.predict(test_x)
inv_yhat = scaler_y.inverse_transform(yhat)