将增强树模型文本转储解析为 data.table
结构。
参数
- model
xgb.Booster
类对象。如果包含特征名称(可以通过setinfo()
设置),它们将用于此函数的输出。如果模型包含分类特征,将会抛出错误。
- trees
一个整数向量,表示应使用的(从 1 开始索引的)树索引。默认值(
NULL
)使用所有树。例如,在多分类中很有用,可以仅获取一个类别的树。- use_int_id
一个逻辑标志,指示在 "Yes", "No", 和 "Missing" 列中的节点应表示为整数(当
TRUE
时)或表示为 "Tree-Node" 字符字符串(当FALSE
时,默认值)。- ...
未使用。
在之前 XGBoost 版本中属于此函数的一些参数当前已被弃用或已重命名。如果传递了弃用或重命名的参数,将会(默认)抛出警告并使用其当前等效项。如果使用 '严格模式' 选项,此警告将变为错误。
如果传递了其他附加参数,该参数既不是当前函数参数,也不是已弃用或重命名的参数,将会根据 '严格模式' 选项抛出警告或错误。
重要提示:
...
将在未来版本中移除,所有当前的弃用警告将变为错误。请仅使用属于函数签名的参数。
返回值
一个 data.table
,包含树节点详细信息。它包含以下列:
Tree
: 模型中树的整数 ID(从 0 开始索引)。Node
: 树中节点的整数 ID(从 0 开始索引)。ID
: 模型中节点的字符标识符(仅当use_int_id = FALSE
时)。Feature
: 对于分支节点,是特征 ID 或名称(可用时);对于叶节点,它简单地将其标记为"Leaf"
。Split
: 分支节点的分裂位置(分裂条件始终是“小于”)。Yes
: 当分裂条件满足时,下一个节点的 ID。No
: 当分裂条件不满足时,下一个节点的 ID。Missing
: 当分支值缺失时,下一个节点的 ID。Gain
: 分裂增益(损失变化)或叶节点值。Cover
: 与在训练期间由分裂看到的或由叶节点收集的观测数量相关的度量。
当 use_int_id = FALSE
时,"Yes", "No", 和 "Missing" 列指向 "ID" 列中的模型范围内的节点标识符。当 use_int_id = TRUE
时,这些列指向 "Node" 列中相应树的节点标识符。
示例
# Basic use:
data(agaricus.train, package = "xgboost")
## Keep the number of threads to 1 for examples
nthread <- 1
data.table::setDTthreads(nthread)
bst <- xgb.train(
data = xgb.DMatrix(agaricus.train$data, label = agaricus.train$label, nthread = 1),
nrounds = 2,
params = xgb.params(
max_depth = 2,
nthread = nthread,
objective = "binary:logistic"
)
)
# This bst model already has feature_names stored with it, so those would be used when
# feature_names is not set:
dt <- xgb.model.dt.tree(bst)
# How to match feature names of splits that are following a current 'Yes' branch:
merge(
dt,
dt[, .(ID, Y.Feature = Feature)], by.x = "Yes", by.y = "ID", all.x = TRUE
)[
order(Tree, Node)
]