为什么当我使用不同的数据集测试机器学习中的模型时结果不准确?

Why results are inaccurate when I am using different dataset for testing a model in Machine Learning?

我正在尝试根据时间序列进行预测。我正在使用过去三年的每小时数据进行温度预测。 我没有使用 train_test_split 方法中的 X_test,而是使用我自己的测试数据集,因为我需要提前 7 天进行预测。

问题:当我使用虚拟测试数据集进行预测时,它给出了不正确的值。但是当我使用 train_test_split 方法中的测试数据集时,它会给出准确的值。我不明白为什么会这样。

我试图解决这个问题的方法:首先,我认为这是因为我没有应用特征缩放,但在实现特征缩放后结果是一样的。然后我想,当 train_test_split 拆分数据时,它也会给数据带来一些随机性,所以我对虚拟测试数据应用了随机性,但结果仍然相同。

我的问题:如何应用不同的数据框来测试模型?我如何获得准确的结果?

节目:

df = pd.read_csv("Timeseries_47.999_7.850_SA_0deg_0deg_2013_2016.csv", sep=",")

time_mod = []
for i in range(0,len(df['time'])):
    ss=pd.to_datetime(df['time'][i], format= "%Y%m%d:%H%M")
    time_mod.append(ss)
df['datetime'] = time_mod

df["Hour"] = pd.to_datetime(df["datetime"]).dt.hour
df["Month"] = pd.to_datetime(df["datetime"]).dt.month
df["Day_of_year"] = pd.to_datetime(df["datetime"]).dt.dayofyear
df["Day_of_month"] = pd.to_datetime(df["datetime"]).dt.day
df["week_of_year"] = pd.to_datetime(df["datetime"]).dt.week

X = df[{"Hour", "Day_of_year", "Day_of_month", 'week_of_year', 'Month'}].values
y = df[{"T2m"}].values

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

## Creating dummy datetime for Test data
df.set_index('datetime',inplace=True)
future_dates = [df.index[-1]+DateOffset(hours=x) for x in range(0,168)]
future_dates_df = pd.DataFrame({'Data':future_dates})

future_dates_df["Hour"] = pd.to_datetime(future_dates_df["Data"]).dt.hour
future_dates_df["Month"] = pd.to_datetime(future_dates_df["Data"]).dt.month
future_dates_df["Day_of_year"] = future_dates_df["Data"].dt.dayofyear
future_dates_df["Day_of_month"] = pd.to_datetime(future_dates_df["Data"]).dt.day
future_dates_df["Date"] = pd.to_datetime(future_dates_df["Data"]).dt.date
future_dates_df["week_of_year"] = future_dates_df["Data"].dt.week

X_test_dum = future_dates_df[["Hour",'Month','Day_of_year','week_of_year','Day_of_month']].values

#Model
regressor = LinearRegression()
regressor.fit(X_train, y_train)

y_pred = regressor.predict(X_test_dum)

plt.plot(y_test, color="r", label="actual")
plt.plot(y_pred, label="forecasted")
sns.set(rc={'figure.figsize':(20,10)})
plt.legend()
plt.show()

不准确的原因可能是:

  1. 虚拟数据集变量的排列方式与实际数据集不同。
X = df[{"Hour", "Day_of_year", "Day_of_month", 'week_of_year', 'Month'}].values
X_test_dum = future_dates_df[["Hour",'Month','Day_of_year','week_of_year','Day_of_month']].values
  1. 我还注意到您正在应用 Linear Regression,但数据看起来不是线性的。尝试 Polynomial RegressionDecision TreeRandom Forest 或适用于非线性数据的模型。
  2. 我觉得去掉一些非本质的自变量也能提高你的结果。 只考虑:小时和Day_of_year
  3. 最后,尝试直接在 csv 文件中创建虚拟数据集,然后在 python.
  4. 中分离训练和测试数据集