跳到内容

将增强树模型文本转储解析为 data.table 结构。

用法

xgb.model.dt.tree(model, trees = NULL, use_int_id = FALSE, ...)

参数

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" 列中相应树的节点标识符。

详情

请注意,此函数不适用于拟合了分类数据的模型,并且仅适用于基于树的提升器(不包括 gblinear)。

示例

# 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)
]