使用随机森林预测未来事件
Forecasting future occurrences with Random Forest
我目前正在探索使用随机森林来预测事件的未来值(我的 ARIMA 模型给了我非常糟糕的预测,所以我正在尝试评估其他选项)。我完全意识到糟糕的结果可能是因为我没有很多数据而且质量不是最好的。我的初始数据仅包括每个日期的发生次数。然后我添加了代表日、月、年、星期几的单独列(后来进行了单热编码),然后我还添加了两列具有滞后值(其中一列具有前一天观察到的值,另一列具有滞后值)与两天前观察到的值)。最终数据是这样的:
Count Year Month Day Count-1 Count-2 Friday Monday Saturday Sunday Thursday Tuesday Wednesday
196.0 2017.0 7.0 10.0 196.0 196.0 0 1 0 0 0 0 0
264.0 2017.0 7.0 11.0 196.0 196.0 0 0 0 0 0 1 0
274.0 2017.0 7.0 12.0 264.0 196.0 0 0 0 0 0 0 1
286.0 2017.0 7.0 13.0 274.0 264.0 0 0 0 0 1 0 0
502.0 2017.0 7.0 14.0 286.0 274.0 1 0 0 0 0 0 0
... ... ... ... ... ... ... ... ... ... ... ... ...
然后我训练了一个随机森林,将计数作为标签(我试图预测的),并将所有其他特征作为特征。我还进行了 70/30 train/test 拆分。在训练数据上对其进行训练,然后使用测试集评估模型(代码如下):
rf = RandomForestRegressor(n_estimators = 1000, random_state = 42)
rf.fit(train_features, train_labels)
predictions = rf.predict(test_features)
我得到的结果还不错:MAE=1.71,准确率89.84%。
第一个问题:我是否有可能过度拟合数据?我只是想确保我没有犯一些大错误,这会给我带来比我应该得到的更好的结果。
第二个问题:模型训练好后,如何使用RF预测未来值?我的目标是每周预测发生的次数,但我有点不知道该怎么做。
如果在这方面比我更好、更有经验的人可以提供帮助,我将不胜感激!谢谢
关于您的第一个问题,随机森林可能会过度拟合,但在比较测试集的 MAE、MSE、RMSE 时应检查这一点。准确度是什么意思?你的 R 方块?然而,使用模型的方法通常是首先使它们过度拟合,所以你有一个体面的 accuracy/mse/rmse 然后执行正则化技术通过设置高 min_child_weight
或低 max_depth
,高n_estimators
也不错
其次,要使用您的模型预测未来值,您需要使用您训练过的完全相同的模型,以及您要对其进行预测的数据集。当然,train 中给出的特征必须与进行预测时给出的输入相匹配。此外,请记住,随着时间的推移,通过将这些新信息添加到您的 train
数据集,这些新信息对于改进您的模型将非常有价值。
forecasting = rf.predict(dataset_to_be_forecasted)
我目前正在探索使用随机森林来预测事件的未来值(我的 ARIMA 模型给了我非常糟糕的预测,所以我正在尝试评估其他选项)。我完全意识到糟糕的结果可能是因为我没有很多数据而且质量不是最好的。我的初始数据仅包括每个日期的发生次数。然后我添加了代表日、月、年、星期几的单独列(后来进行了单热编码),然后我还添加了两列具有滞后值(其中一列具有前一天观察到的值,另一列具有滞后值)与两天前观察到的值)。最终数据是这样的:
Count Year Month Day Count-1 Count-2 Friday Monday Saturday Sunday Thursday Tuesday Wednesday
196.0 2017.0 7.0 10.0 196.0 196.0 0 1 0 0 0 0 0
264.0 2017.0 7.0 11.0 196.0 196.0 0 0 0 0 0 1 0
274.0 2017.0 7.0 12.0 264.0 196.0 0 0 0 0 0 0 1
286.0 2017.0 7.0 13.0 274.0 264.0 0 0 0 0 1 0 0
502.0 2017.0 7.0 14.0 286.0 274.0 1 0 0 0 0 0 0
... ... ... ... ... ... ... ... ... ... ... ... ...
然后我训练了一个随机森林,将计数作为标签(我试图预测的),并将所有其他特征作为特征。我还进行了 70/30 train/test 拆分。在训练数据上对其进行训练,然后使用测试集评估模型(代码如下):
rf = RandomForestRegressor(n_estimators = 1000, random_state = 42)
rf.fit(train_features, train_labels)
predictions = rf.predict(test_features)
我得到的结果还不错:MAE=1.71,准确率89.84%。
第一个问题:我是否有可能过度拟合数据?我只是想确保我没有犯一些大错误,这会给我带来比我应该得到的更好的结果。
第二个问题:模型训练好后,如何使用RF预测未来值?我的目标是每周预测发生的次数,但我有点不知道该怎么做。
如果在这方面比我更好、更有经验的人可以提供帮助,我将不胜感激!谢谢
关于您的第一个问题,随机森林可能会过度拟合,但在比较测试集的 MAE、MSE、RMSE 时应检查这一点。准确度是什么意思?你的 R 方块?然而,使用模型的方法通常是首先使它们过度拟合,所以你有一个体面的 accuracy/mse/rmse 然后执行正则化技术通过设置高 min_child_weight
或低 max_depth
,高n_estimators
也不错
其次,要使用您的模型预测未来值,您需要使用您训练过的完全相同的模型,以及您要对其进行预测的数据集。当然,train 中给出的特征必须与进行预测时给出的输入相匹配。此外,请记住,随着时间的推移,通过将这些新信息添加到您的 train
数据集,这些新信息对于改进您的模型将非常有价值。
forecasting = rf.predict(dataset_to_be_forecasted)