【问题标题】:XGBoost use 3-Dimensional Input Containing Time Steps in Python?XGBoost 在 Python 中使用包含时间步长的 3 维输入?
【发布时间】:2020-08-16 09:29:18
【问题描述】:

我正在尝试在时间序列数据上训练 XGBRegressor 重新整形以具有时间步长,因此如果有 12345 个样本、10 个特征和时间步长,则 X_train 的结果形状可能类似于 (12345, 5, 10) 5.

但是,当我们尝试使用这样的训练数据训练 XGBRegressor 时,

import xgboost as xgb
xgb = xgb.XGBRegressor()
xgbr.fit(X_train, y_train)

我们得到错误

ValueError: ('Expecting 2 dimensional numpy.ndarray, got: ', (12345, 5, 10))

在包含时间步长的训练数据上训练XGBRegressor 的正确方法是什么?

【问题讨论】:

    标签: python machine-learning time-series regression xgboost


    【解决方案1】:

    从错误中可以清楚地看出,您不能直接将 XGBRegressor 与 3D 形状的数组配合使用。时间序列问题重复使用 ML 很常见,尽管您必须确保为回归器提供有意义的特征,以捕获样本之间的时间依赖性。

    因此,对于您的特定问题,您可以从创建一个新特征开始,以指示样本属于哪个时间步长。这样,决策树还将学习时间相关变量对目标变量的影响。虽然您可以添加的特征越多越好,因此您也可以考虑包括捕获其他可能的时间相关统计数据的特征。

    【讨论】:

    • 太棒了,除了指示样本时间步长的新特征之外,您是否建议添加第二个新特征指示样本在该时间步长中的位置?按照您的建议,我们将把数据从(12345, 5, 10) 转换为(12345 * 5, 10+1) 是否正确?
    • 是的,这正是@Nyxynyx 的想法,所以每个时间戳都有一个新行加上额外的时间戳功能。是的,如果时间中的位置可以成为相关的预测指标,那么将其作为特征进行广告确实是有意义的
    • 在将训练数据从 (12345, 5, 10) 转换为 (12345 * 5, 10+1) 之后,我们现在的训练样本(以及预测)是标签的 5 倍。标签短缺我们应该如何处理?
    • 您是否正在使用 XGBoost 专门尝试和预测时间序列?或者您是否尝试在数据恰好是时间序列的情况下进行分类/回归?
    • IIUC 所有新样本都应共享与原始数组对应的标签。也就是说,如果保留原始顺序,则标签应为np.repeat(y,5)@Nyxynyx
    猜你喜欢
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2018-09-16
    相关资源
    最近更新 更多