我目前正在处理一个包含 46 行的时间序列数据集,该数据集在一周内每天大约每 3 小时进行一次气象测量。我的解释变量 (X) 由 26 个变量组成,一些变量具有不同的测量单位(度、米、g/m3 等)。我要解释的变量(y)仅由一个变量温度组成。
我的目标是使用变量 (X) 的集合来预测 12h-24h 时隙上的温度 (y)
为此,我使用了 Keras Tensorflow 和 Python,以及 MLP 回归模型:
X = df_forcast_cap.loc[:, ~df_forcast_cap.columns.str.startswith('l')]
X = X.drop(['temperature_Y'],axis=1)
y = df_forcast_cap['temperature_Y']
y = pd.DataFrame(data=y)
# normalize the dataset X
scaler = MinMaxScaler(feature_range=(0, 1))
scaler.fit_transform(X)
normalized = scaler.transform(X)
# normalize the dataset y
scaler = MinMaxScaler(feature_range=(0, 1))
scaler.fit_transform(y)
normalized = scaler.transform(y)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# define base model
def norm_model():
# create model
model = Sequential()
model.add(Dense(26, input_dim=26, kernel_initializer='normal', activation='relu'))# 30 is then number of neurons
#model.add(Dense(6, kernel_initializer='normal', activation='relu'))
model.add(Dense(1, kernel_initializer='normal'))
# Compile model
model.compile(loss='mean_squared_error', optimizer='adam')
return model
# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# evaluate model with standardized dataset
estimator = KerasRegressor(build_fn=norm_model, epochs=(100), batch_size=5, verbose=1)
kfold = KFold(n_splits=10, random_state=seed)
results = cross_val_score(estimator, X, y, cv=kfold)
print(results)
[-0.00454741 -0.00323181 -0.00345096 -0.00847261 -0.00390925 -0.00334816
-0.00239754 -0.00681044 -0.02098541 -0.00140129]
# invert predictions
X_train = scaler.inverse_transform(X_train)
y_train = scaler.inverse_transform(y_train)
X_test = scaler.inverse_transform(X_test)
y_test = scaler.inverse_transform(y_test)
results = scaler.inverse_transform(results)
print("Results: %.2f (%.2f) MSE" % (results.mean(), results.std()))
Results: -0.01 (0.01) MSE
(1) 我读到交叉验证不适用于时间序列预测。所以,我想知道还有哪些其他技术存在,哪一种更适合时间序列。
(2) 其次,我决定对我的数据进行规范化,因为我的 X 数据集由不同的指标(度数、最小值、g/m3 等)组成,而我用来解释 y 的变量是以度数为单位的。通过这种方式,我知道必须处理对 MSE 的更复杂的解释,因为它的结果不会与我的 y 变量具有相同的统一性。但是对于我研究的下一步,我需要保存 y 预测的结果(由 MLP 模型生成),并且我需要这些值是度数。因此,我尝试反转归一化,但没有成功,当我打印结果时,预测值仍然是归一化格式(参见我上面的代码)。有人看到我的错误吗?