跳到内容

将增强树模型文本转储解析为 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(从零开始的索引)。

  • Node:树中节点的整数 ID(从零开始的索引)。

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