我正面临一个我无法解决的问题。实际上,我尝试用keras创建一个模型LSTM,但是我不明白输入数据格式应该是什么。我的数据培训和数据测试如下所示:
date/value/value/value/value/value_i_want_to_predict
我见过一些人这样做
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)
但是,如果我这样做,我如何预测我的特性而不修改测试数据集?
我很难理解我们为什么要这么做。此外,我希望在最后一栏中使用这些值来预测目标。使用这种方法,我觉得我必须改变数据测试的格式,而且重要的是,我可以在不同的测试数据上测试模型,并且不需要更改。
有人能帮我吗?
编辑
scaler.fit(df_train_x)
X_train = scaler.fit_transform(df_train_x)
X_test = scaler.transform(df_test_x)
y_train = np.array(df_train_y)
y_train = np.insert(y_train, 0, 0)
y_train = np.delete(y_train, -1)
数据的形状是:(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:检查目标时出错:期望dense_10具有三维,但得到形状为(1,1)的数组
我真的不明白
发布于 2020-11-25 01:09:27
我不能完全理解你的问题,但我会尽力的。我认为您提供的代码是特定问题的,这意味着它可能不适合您的开发。
对于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_train表示培训数据,y_train代表培训数据的标签。(与测试数据类似)我在这里使用的是StandardScaler而不是MinMaxScaler。标准标量器减去特征的平均值,然后除以标准差。
https://stackoverflow.com/questions/65000544
复制