XGBoost 基础教程

XGBoost 笔记

XGBoost 数据输入格式


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

每一行代表一个样本实例,第一列代表标签,如上示例 10,如 1 代表点击,0 代表未点击;第一行的 101102 表示特征索引,对应冒号后的 1.20.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

其中,与正例相比,负例被分配了一半的权重。