开发者指南:核心库参数

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

对于 R,这些参数作为 R list 对象传递给函数 xgb.train,但 R 接口旨在通过提供带有完整包内文档的参数构造函数来提供更好、更符合习惯的用户体验。这要求除了 XGBoost 的通用在线文档之外,还需要在 **R 包中** 保持参数列表及其文档是最新的。

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

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

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

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

  • 如果需要,对 R 接口进行最小修改——例如,由于参数只列出一次,如果它们只适用于一种助推器类型,则应在开头添加一个关于它们适用于哪种助推器类型的注释,或者如果默认值不同,则按助推器类型列出默认值。

将参数添加到 xgb.params 后,如果函数 xgboost 可以使用它,也需要将其添加到函数 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 中进行检查。