跳到内容

这些方法允许操作 XGBoost 模型中的键值属性字符串。

用法

xgb.attr(object, name)

xgb.attr(object, name) <- value

xgb.attributes(object)

xgb.attributes(object) <- value

参数

对象

xgb.Booster 类的对象。赋值时将在原地修改

名称

一个非空字符串,指定要访问哪个属性。

对于 xgb.attr<-,表示属性的值;对于 xgb.attributes<-,它是一个列表(或可强制转换为列表的对象),其中包含要设置的属性名称及其对应的值。非字符串值将被转换为字符串。当属性值不是标量时,仅使用第一个索引。使用 NULL 来移除属性。

返回值

  • xgb.attr() 返回属性的字符串值,如果模型中未存储该属性,则返回 NULL

  • xgb.attributes() 返回模型中存储的所有属性的列表,如果模型没有存储任何属性,则返回 NULL

详情

XGBoost 模型属性的主要目的是存储有关模型的一些元数据。请注意,它们与 R 中的对象属性是不同的概念。具体来说,它们指的是可以附加到 XGBoost 模型、与模型的二进制表示一起存储并稍后(从 R 或任何其他接口)访问的键值字符串。相比之下,分配给 xgb.Booster 类 R 对象的任何 R 属性都不会被 xgb.save() 保存,因为 XGBoost 模型是外部内存对象,其序列化在外部处理。此外,设置一个与 XGBoost 参数之一同名的属性不会改变该参数在模型中的值。请使用 xgb.model.parameters<-() 来设置或更改模型参数。

xgb.attributes<- 设置器用于更新现有属性或添加一个或多个属性,但它不会删除其他现有属性。

重要提示:由于这会修改 booster 的 C 对象,因此这里的赋值语义将与 R 不同,因为对同一 booster 的任何对象引用都将被修改,而通过 attributes(model)$<attr> <- <value> 赋值 R 属性将遵循通常的 R 写时复制语义(请参阅 xgb.copy.Booster() 以获取这些行为的示例)。

示例

data(agaricus.train, package = "xgboost")
train <- agaricus.train

bst <- xgb.train(
  data = xgb.DMatrix(train$data, label = train$label, nthread = 1),
  nrounds = 2,
  params = xgb.params(
    max_depth = 2,
    nthread = 2,
    objective = "binary:logistic"
  )
)

xgb.attr(bst, "my_attribute") <- "my attribute value"
print(xgb.attr(bst, "my_attribute"))
xgb.attributes(bst) <- list(a = 123, b = "abc")

fname <- file.path(tempdir(), "xgb.ubj")
xgb.save(bst, fname)
bst1 <- xgb.load(fname)
print(xgb.attr(bst1, "my_attribute"))
print(xgb.attributes(bst1))

# deletion:
xgb.attr(bst1, "my_attribute") <- NULL
print(xgb.attributes(bst1))
xgb.attributes(bst1) <- list(a = NULL, b = NULL)
print(xgb.attributes(bst1))