我用XGBoost来处理时间序列回归问题.
在开发过程中,我在最后的%10 %的数据上选择验证集。使用timeseries拆分交叉验证和网格搜索,我得到了相应的xgb超参数的最佳模型。
我的问题是,如何在我的生产环境中选择验证集(用于早期停止)?
1)我选择了数据的最后%10 %作为验证集,但此集也包含在培训数据中。所以太合适了。对噪音数据非常敏感。
2)我的预测数据(假设Y)随时间而变化,当我在去年选择随机行(%10 %)而不包括在训练集中时,它给了我比第一种选择更糟糕的生产效果。
3)当我选择上周的数据作为验证数据(不包括在训练集中)时,它在2.选项上给出了更好的结果。但我不包括上周的数据训练程序。
4)或者我是否需要对我的生产环境进行验证?我应该从开发阶段的实验中设置迭代计数吗?(例如,我在第10k次迭代中得到了最好的结果,所以我应该将我的生产设置迭代计数限制为10k,而根本不使用验证集?)
--
那么,如何为我的生产环境选择验证集呢?最好的实践,或者有什么窍门吗?
发布于 2017-06-13 13:45:48
如果您只是定期对XGBoost模型进行重新培训,以便考虑数据的变化性质,最好的选择是保存最近的一组数据进行测试(选项3的一些变化)。
正如您所提到的,选项1- -即对整个可用集的培训和对最近10 %的数据进行验证--很可能过于适合(因此高估了它在未来数据上的性能)。
选项2的失败在于,你试图预测那些你有事后(事后)信息的信息--也就是说,你知道后来的观测值是什么,这与时间序列预测非常相关。例如,如果您试图预测明天的值,并且已经知道后天的值是什么,那么您可以更好地预测明天。不幸的是,你不可能在后天开始之前就知道这一点。
因此,选项3是确定模型准确预测未来观测的可能性的最有价值的实践--您只使用从预测点(过去相对于预测周期)提供的数据,并将这些数据保留在模型的培训集之外。
在这种情况下,最好的做法是让自己对“不作弊”负责--也就是说,尽你最大的努力为你的模型的预测提供一个公正和诚实的实验,它没有看到并且在未来的使用情况下也是可用的。
https://datascience.stackexchange.com/questions/19671
复制相似问题