没有训练和测试拆分的第二天预测

Forecast next day without train and test split

通常,当我们有一个数据框时,我们会将其拆分为训练和测试。例如,假设我的数据框是这样的:

> df.head()

          Date           y  wind temperature           
1   2019-10-03 00:00:00 33   12    15
2   2019-10-03 01:00:00 10   5     6
3   2019-10-03 02:00:00 39   6     5
4   2019-10-03 03:00:00 60   13    4
5   2019-10-03 04:00:00 21   3     7

我想根据风和温度预测 y。然后我们做这样的拆分:

df_train = df.loc[df.index <= split_date].copy()
df_test = df.loc[df.index > split_date].copy()
X1=df_train[['wind','temperature']]
y1=df_train['y']
X2=df_test[['wind','temperature']]
y2=df_test['y']
from sklearn.model_selection import train_test_split
X_train, y_train =X1, y1
X_test, y_test = X2,y2
model.fit(X_train,y_train)

然后我们预测我们的测试数据。但是,这使用了测试数据框中的风和温度特征。如果我想在不知道明天的每小时温度和风的情况下预测(未知)明天,该方法是否不再有效? (以 LSTM 或 XGBoost 为例)

根据您训练模型的方式,每一行都被视为一个独立样本,无论顺序如何,即较早或较晚观察到的值。如果您有理由相信时间顺序与根据风速和温度预测 y 相关,您将需要更改模型。

你可以试试,例如添加另一列,其中包含一小时前的风速和温度值(将其移动一行),或者,如果您认为 y 可能取决于工作日,请从日期计算工作日并添加作为输入特征。