XGBoost在Python中使用包含时间步长的三维输入?

XGBoost在Python中使用包含时间步长的三维输入?,python,machine-learning,time-series,regression,xgboost,Python,Machine Learning,Time Series,Regression,Xgboost,我正在尝试对时间序列数据进行XGBRegressor训练,使其具有时间步长,因此如果有12345个样本、10个特征和5个时间步长,xu-train的结果形状可能类似于(12345,5,10) 但是,当我们尝试使用这样的训练数据来训练XGBRegressor时 import xgboost as xgb xgb = xgb.XGBRegressor() xgbr.fit(X_train, y_train) 我们得到了错误 ValueError:('Expecting 2D numpy.ndarr

我正在尝试对时间序列数据进行
XGBRegressor
训练,使其具有时间步长,因此如果有12345个样本、10个特征和5个时间步长,
xu-train
的结果形状可能类似于
(12345,5,10)

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

import xgboost as xgb
xgb = xgb.XGBRegressor()
xgbr.fit(X_train, y_train)
我们得到了错误

ValueError:('Expecting 2D numpy.ndarray,Get:',(12345,5,10))


对于包含时间步长的训练数据,正确的训练方法是什么?

从错误中可以清楚地看出,您不能直接使用3D形状的数组进行拟合和训练。对于时间序列问题,重复使用ML是很常见的,尽管您必须确保输入了regressor有意义的特性,这些特性捕获了样本之间的时间依赖关系


因此,对于您的特定问题,您可以从创建一个新特性开始,该特性指示样本所属的时间步。通过这种方式,决策树还将了解时间相关变量对目标变量的影响。虽然更有意义的特征可以添加得更好,因此你也可以考虑包括捕捉其他可能的时间依赖统计的特征。

可怕的是,除了指示样本的时间步长的新特征之外,你还会建议在那个时间步长中添加指示样本位置的第二个新特征吗?按照您的建议,我们将把数据从
(12345,5,10)
转换为
(12345*5,10+1)
,这是正确的吗?是的,这正是@Nyxynyx的想法,因此每个时间戳都有一个新行加上额外的时间戳功能。是的,如果时间中的位置可以是一个相关的预测器,那么在将训练数据从
(12345,5,10)
转换为
(12345*5,10+1)
后,将其作为一个特征进行广告是有意义的,我们现在拥有的训练样本(以及预测)是标签的5倍。我们应该如何处理标签短缺的问题?您是否使用XGBoost来尝试具体预测时间序列?或者您正试图在数据恰好是时间序列的情况下进行分类/回归?IIUC所有新样本应共享与原始数组对应的标签。也就是说,如果保留原始顺序,则标签应为
np。重复(y,5)
@Nyxynyx