跳到内容

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

用法

xgb.attr(object, name)

xgb.attr(object, name) <- value

xgb.attributes(object)

xgb.attributes(object) <- value

参数

对象

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

名称

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

value

对于 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<- setter 会更新现有属性或添加一个或多个属性,但它不会删除其他现有属性。

重要提示:由于这会修改 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))