XGBoost 目前支持两种输入数据的文本格式:LIBSVM 和 CSV。
数据格式示例
对于训练或预测,XGBoost 采用如下格式的实例文件:
train.txt
1 101:1.2 102:0.03 0 1:2.1 10001:300 10002:400 0 0:1.3 1:0.3 1 0:0.01 1:0.3 0 0:0.2 1:0.3
每一行代表一个样本实例,第一列代表标签,如上示例 1 和 0,如 1 代表点击,0 代表未点击;第一行的 101 和 102 表示特征索引,对应冒号后的 1.2 和 0.03 表示特征值。
在二元分类情况下,'1' 表示正样本,'0' 表示负样本。此外,还支持 [0,1] 中的概率值作为标签,以表示实例为正的概率。
单机辅助文件
以下信息仅适用于包的单节点版本。
组输入文件
对于排序任务,XGBoost 支持分组输入格式,pairwise 和 listwise 必须的组数据。XGBoost 提供了扩展名为 group 的组信息文件,例如,如果实例文件为 train.txt,则组文件应命名 train.txt.group 并采用以下格式:
train.txt.group
2 3
如上示例表示数据集包含 5 个实例,前2个实例在一个组中,其他3个在另一个组中。组文件中的数字实际上是按顺序指示实例文件中每个组中的实例数。配置的时候不需要指明组文件的路径。如果实例文件名为 xxx,XGBoost 会检查 xxx.group 是否在同目录下。
样本带权重文件
可以为训练数据中的样本分配权重以区分它们之间的相对重要性。例如,如果我们为示例中的文件提供一个样本权重文件。
train.txt.weight
1 0.5 0.5 1 0.5
如上示例意味着 XGBoost 在训练时会更加强调第 1 个和第 4 个实例(即正实例)。配置与配置组信息类似。如果实例文件名为 xxx,XGBoost 将 xxx.weight 在同一目录中查找命名的文件。如果文件存在,实例权重将被提取并在训练时使用。
二进制缓冲区格式和实例权重:
如果选择将训练数据保存为二进制缓冲区(使用 save_binary() ),请记住生成的二进制缓冲区文件将包含实例权重。要更新权重,请使用该 set_weight() 函数。
边际收益文件
XGBoost 支持为每个实例提供初始边际预测。例如,如果我们对 train.txt 文件使用逻辑回归进行初始预测,我们可以创建以下文件:
train.txt.base_margin
-0.4 1.0 3.4
XGBoost 将这些值作为初始边际收益预测并从中提升。base_margin 一个重要的注意事项是它应该是转换前的 margin 预测,所以如果你在做 logistic loss,你需要在 logistic 转换之前放入 value。如果您使用 XGBoost 预测器,请用于 pred_margin=1 输出边际值。
支持分布式的辅助文件
如果辅助文件要支持分布式部署,可以如下形式。
Query ID 列
可以在 LIBSVM 文件中为每个实例样本嵌入查询组 ID,方法是 qid:xx 在每一行中添加一个表单标记:
train.txt
1 qid:1 101:1.2 102:0.03 0 qid:1 1:2.1 10001:300 10002:400 0 qid:2 0:1.3 1:0.3 1 qid:2 0:0.01 1:0.3 0 qid:3 0:0.2 1:0.3 1 qid:3 3:-0.1 10:-0.3 0 qid:3 6:0.2 10:0.15
不能为某些实例指定查询 ID,而不为其他实例指定查询 ID。要么为每一行分配查询 ID,要么根本没有。
行必须按查询 ID 升序排序。
样本权重
可以在 LIBSVM 文件中指定样本权重,方法是在每个实例标签后附加相应的权重,形式 [label]:[weight],如以下示例所示:
train.txt
1:1.0 101:1.2 102:0.03 0:0.5 1:2.1 10001:300 10002:400 0:0.5 0:1.3 1:0.3 1:1.0 0:0.01 1:0.3 0:0.5 0:0.2 1:0.3
其中,与正例相比,负例被分配了一半的权重。