[英]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
拆分数据时,它也会给数据带来一些随机性,所以我对我的虚拟测试数据应用了随机性,但结果仍然是一样的。
我的问题:如何应用不同的 dataframe 来测试 model? 我如何获得准确的结果?
程序:
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()
不准确的原因可能是:
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
Linear Regression
,但数据看起来不像线性。 尝试Polynomial Regression
、 Decision Tree
、 Random Forest
或 model,这对非线性数据很有用。cs
v 文件中创建虚拟数据集,然后在 python 中分离训练和测试数据集。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.