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