这些方法允许操作XGBoost模型的键值属性字符串。
用法
xgb.attr(object, name)
xgb.attr(object, name) <- value
xgb.attributes(object)
xgb.attributes(object) <- value详细信息
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))