可以将整个数据框用作预测变量吗?

数据挖掘 r xgboost 数据框
2022-03-10 06:48:39

我正在尝试在 R 中使用 XGBoost 来训练一个模型,该模型使用以前日期的所有数据以及当前日期的两个分类变量 (Cat1Cat2) 作为预测变量来预测固定数量的目标变量。原始数据采用以下格式:

╔═════════╦═════════╦══════════╦══════╦══════╦══════╦══════╗
║ Target1 ║ Target2 ║ Date     ║ Cat1 ║ Cat2 ║ Var1 ║ Var2 ║
╠═════════╬═════════╬══════════╬══════╬══════╬══════╬══════╣
║ 1       ║ 2       ║ 01/01/20 ║ A    ║ B    ║ 3    ║ 4    ║
║ 5       ║ 6       ║ 02/01/20 ║ C    ║ D    ║ 7    ║ 8    ║
║ 8       ║ 7       ║ 03/01/20 ║ A    ║ D    ║ 6    ║ 5    ║
║ 4       ║ 3       ║ 04/01/20 ║ C    ║ B    ║ 2    ║ 1    ║
║         ║         ║          ║      ║      ║      ║      ║
╚═════════╩═════════╩══════════╩══════╩══════╩══════╩══════╝

对于数据框的每一行,我将训练数据概念化为如下所示,其中该Train_DataFrame列包含以前日期的所有数据:

╔═════════╦═════════╦══════╦══════╦═════════════════╦═════════╦══════╦══════╦══════╦══════╗
║ Target1 ║ Target2 ║ Cat1 ║ Cat2 ║ Train_DataFrame ║         ║      ║      ║      ║      ║
╠═════════╬═════════╬══════╬══════╬═════════════════╬═════════╬══════╬══════╬══════╬══════╣
║       4 ║       3 ║ C    ║ B    ║ Target1         ║ Target2 ║ Cat1 ║ Cat2 ║ Var1 ║ Var2 ║
║         ║         ║      ║      ║ 1               ║ 2       ║ A    ║ B    ║ 3    ║ 4    ║
║         ║         ║      ║      ║ 5               ║ 6       ║ C    ║ D    ║ 7    ║ 8    ║
║         ║         ║      ║      ║ 8               ║ 7       ║ A    ║ D    ║ 6    ║ 5    ║
║         ║         ║      ║      ║                 ║         ║      ║      ║      ║      ║
╚═════════╩═════════╩══════╩══════╩═════════════════╩═════════╩══════╩══════╩══════╩══════╝

第一个问题;是否可以将整个数据框作为变量传递给模型?

如果是这样,那么如何以内存有效的方式完成,以避免数据重复?我知道我可以让Train_DataFrame列包含每个“过去”数据的列表,但是,这会导致数据重复和内存使用效率低下。例如,有没有办法让这个列包含一个子设置函数来传递给原始数据框?

还是有更好的方法来解决我可能遗漏的问题?

提前致谢。

2个回答

第一个问题;是否可以将整个数据框作为变量传递给模型?

不,每个特征都必须是一个值。换句话说,您可以将数据框提供为包含所有值的向量,假设大小是固定的:每列将对应于原始数据框中的特定单元格。

但我认为在您的情况下,一个更好的选择是研究考虑(按时间顺序)序列的方法。假设您需要预测整个序列的目标变量,条件随机场可能是一个不错的选择?

让我们将您的问题分解为子部分。Q1:你的意思是预测器需要预测2个目标值?(目标 1 和目标 2)

答:模型总是只能预测一个目标值。该目标值可以是分类的或数字的。

Q2。一列(train_dataframe)包含以前日期的所有数据。为什么?

答:我们不需要这样做。我们也可以简单地在单独的列中使用以前日期的整个数据。

Q3:将整个数据框作为 1 个变量传递?答:不需要。照原样通过。

Q4:每个过去的数据列表是否重复?答:没关系。你的问题有点不清楚。数据是按原样导入还是使用外部引擎?像mysql/mongodb?然后您可以进行查询以仅获取唯一值。

Q5:有没有更好的方法?Ans:看起来你有一个大数据集。尝试使用 mongodb。将您的数据加载到 mongodb 并将其导入到 R。R 有一个很棒的功能,可以在其右侧窗口中显示所有变量的值。检查它会很有帮助。

我希望这有帮助!