开发者指南:核心库参数
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.params
和 xgboost
的文档中。两个函数中目标的文档最初都是从核心库的同一个 .rst 文件复制的,但对于 xgboost
,它会进行额外的修改,以列出支持和不支持的内容,并且只引用 xgboost
接受的参数别名。
还要记住,彼此之间是变体但预测模式不同的目标,不应在 xgboost
中允许,因为它们会破坏其预期的接口——因此,此类目标在 xgboost
的文档中未描述(但在文档末尾有一个它不支持的列表),并且在函数 prescreen.objective
中进行检查。