开发者指南:核心库参数

XGBoost 核心库接受很长的输入参数列表(例如决策树的max_depth,正则化,计算发生的device等)。随着 XGBoost 的进一步开发,新参数不断添加,其语言绑定应该允许将核心库接受的一切都传递给它。

对于 R,这些参数作为 R list 对象传递给函数 xgb.train,但 R 接口旨在通过提供一个带有完整包内文档的参数构造函数来提供更好、更地道的用户体验。这需要在R 包中保持参数列表及其文档的最新,同时也要维护 XGBoost 的通用在线文档。

更详细地说,有一个函数 xgb.params,它允许用户构造这样一个 list 对象,然后传递给 xgb.train,同时获得完整的 IDE 自动补全。这个函数应该接受所有可能的 XGBoost 参数作为参数,并按照它们在在线文档中出现的顺序进行列出。

为了将核心库中的新参数添加到 xgb.params

  • 按照参数在列出核心库参数的 .rst 文件中出现的顺序,在正确的位置添加参数。如果参数出现多次(例如,因为它适用于多种 booster 类型),则根据第一次出现的位置添加。

  • 将 .rst 文件中的文档复制粘贴作为 xgb.train 的另一个 @param 条目。可能需要一些简单的替换,例如将双反引号更改为单反引号,将需要作为字符串传递的变量用引号括起来,以及将 :math: 调用替换为其 roxygen 等效项 \eqn{} 等。

  • 如果需要,对 R 接口进行少量修改 - 例如,由于参数只列出一次,如果参数仅适用于一种 booster 类型,则应在开头添加一个关于其适用 booster 类型的说明;如果不同,则按 booster 类型列出默认值。

将参数添加到 xgb.params 后,如果函数 xgboost 可以使用它,则还需要将其添加到该函数中。函数 xgboost 并非旨在支持核心库提供的所有功能 - 例如,目前与排序学习相关的参数未在此处列出,因为它们对于该函数不可用(但可用于 xgb.train)。

为了将参数添加到 xgboost

  • 将其添加到函数签名中。然而,此处的位置有所不同:有少数选定的参数,其位置已移至签名的更靠前位置。新参数不应放置在这些“靠前”位置中 - 而是将其放置在参数 tree_method 之后,在剩余参数中根据其在 xgb.params 中的插入方式,选择最相似的位置。请注意,tree_method 之后的所有其他参数仍应遵循与在 xgb.params 中相同的相对顺序。

  • 如果参数与在 xgb.train 中的应用方式完全相同,则无需为 xgboost 添加额外的文档,因为它默认继承了 xgb.params 中的参数。然而,某些参数可能需要少量修改 - 例如,并非所有目标都受 xgboost 支持,因此需要对该参数进行修改。

  • 如果参数允许别名,则只使用一个别名,并优先选择最具描述性的命名(例如,“learning_rate” 而非 “eta”)。这些参数在 xgboost 中也需要一个 @param 文档条目,因为 xgb.params 中的条目将包含不受支持的别名。

添加新目标和评估指标时,请注意需要将它们添加到 xgb.paramsxgboost 的文档中。这两个函数中目标的文档最初是从核心库的同一个 .rst 文件复制而来,但对于 xgboost,需要进行额外的修改以列出支持和不支持的内容,并且只引用 xgboost 接受的参数别名。

还要记住,互为变体但预测模式不同的目标,不应在 xgboost 中被允许,因为它们会破坏其预期的接口 - 因此,此类目标在 xgboost 的文档中未作描述(但在文档末尾有一个不支持列表),并在函数 prescreen.objective 中进行检查。