XGBoost 基础教程

XGBoost 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/xgboost-input-format.html

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

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

本节整理了 XGBoost 开发中的一些技巧及经验之谈。 ...
XGBoost 是一个 GBDT 即梯度提升算法的开源实现软件库,是 eXtreme Gradient Boosting 的简写,表示 XG ...
Scipy.io 包提供了多种功能来解决不同格式的文件(输入和输出)。其中一些格式是 - ...
在Java中进行编码格式转换通常涉及将字符串从一种字符编码转换为另一种字符编码。你可以在项目的Maven或Gradle配置文件中添加以下依赖 ...
xgboost booster 参数表示选择哪种 boost 分类器,它总共有两大种选择(决策树与线性模型),三个具体选择。 ...