Python 对LSTM模型输入数据的不理解

Python 对LSTM模型输入数据的不理解,python,keras,lstm,Python,Keras,Lstm,我面临着一个我无法解决的问题。事实上,我试图用keras创建一个模型LSTM,但我不明白输入数据的格式应该是什么。 我的数据列和数据测试如下所示: 日期/价值/价值/价值/价值/价值/我想预测的价值 我见过一些人这样做: from sklearn.preprocessing import MinMaxScaler sc = MinMaxScaler(feature_range = (0, 1)) training_set_scaled = sc.fit_transform(training_se

我面临着一个我无法解决的问题。事实上,我试图用keras创建一个模型LSTM,但我不明白输入数据的格式应该是什么。 我的数据列和数据测试如下所示:

日期/价值/价值/价值/价值/价值/我想预测的价值

我见过一些人这样做:

from sklearn.preprocessing import MinMaxScaler
sc = MinMaxScaler(feature_range = (0, 1))
training_set_scaled = sc.fit_transform(training_set)X_train = []
y_train = []
for i in range(60, len(training_set_scaled)):
    X_train.append(training_set_scaled[i-60: i, 0])
    y_train.append(training_set_scaled[i, 0])
    X_train, y_train = np.array(X_train), np.array(y_train)
但是如果我这样做了,我如何在不修改测试数据集的情况下预测我的特性呢

我很难理解我们为什么要这样做。此外,我想使用上一列中的值来预测目标。使用这种方法,我觉得我必须改变数据测试的格式,并且我可以在不同的测试数据上测试模型,这一点很重要,我不需要改变

有人能帮我吗

编辑 数据的形状是:(2420,7)

我就是这么做的。但形状仍然是二维的。所以我用了:

generator = TimeseriesGenerator(X_train, y_train, length=n_input, batch_size=32)
第一层的输入形状为:

model.add(LSTM(150, activation='relu',  return_sequences=True,input_shape=(2419, 7)))
但当我将发电机安装到模型上时:

ValueError:检查目标时出错:预期密集_10有3个维度,但得到了形状为(1,1)的数组


我真的不明白

我不确定是否能完全理解你的问题,但我会尽力的。 我认为您提供的代码是针对具体问题的,这意味着它可能不适合您的实现

对于LSTM(以及几乎所有的神经网络),您总是希望在将数据输入模型之前缩放数据。这有助于避免在您的功能中具有完全不同的数据范围。MinMaxScaler将您的功能缩放到提供的范围。对于为什么需要缩放的解释,您可以看看这篇文章

通常,您希望首先使用sklearn的train_test_split函数将数据集拆分为训练集和测试集,然后缩放功能

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
X = data.drop("feature_I_want_to_predict",axis=1)
y = data["feature_I_want_to_predict"]

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2)

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)   
这样,X_列表示您的培训数据,y_列表示您的培训数据标签。(与试验数据类似)
我在这里使用了StandardScaler而不是MinMaxScaler。标准定标器减去特征的平均值,然后除以标准偏差。

感谢robinood。我编辑了这篇文章。我已经照你说的做了,我很高兴这似乎是个好办法。我更详细。你能提供完整型号的代码吗?误差似乎与e密集层有关,而与LSTM层无关。
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
X = data.drop("feature_I_want_to_predict",axis=1)
y = data["feature_I_want_to_predict"]

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2)

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)