如何获取xgb.DMatrix的索引以添加feval函数的信息?

我需要在自定义评估函数上优化xgboost参数。 但是,为此,我需要加入有关所选观察值的其他一些信息来衡量性能。

对我来说最好的方法是将信息直接添加到xgb.DMatrix中,例如:

dtrain <- xgb.DMatrix(data = matrix,label = OBSERVATIONS$actual,ID = OBSERVATIONS$ID)

这样,我将能够检索正在评估的观察结果,并加入一些附加信息进行评估。 像这样:

feval = function(preds,dtrain){
# getting labels
actual <- getinfo(dtrain,"label")
# Retrieving additionnal information
ID <- getinfo(dtrain,"ID")
dt <- data.table(ID = ID,actual = actual,preds = preds)
# Note that it would work also work if there is a way to know what 
# is the index of the observations in dtrain

# Joining additional information
dt = scalingFact[dt,on = c("ID")]

任何人都知道我是否可以通过索引或将我可能需要的其他信息添加到矩阵中?

jieke_mao 回答:如何获取xgb.DMatrix的索引以添加feval函数的信息?

我认为没有定义

的简便方法

也许尝试设置dtrain的属性,将ID设置为属性之一。我认为它不能与其他用途一起使用:

library(xgboost)
library(data.table)

# use iris
# fictitious id
iris$ID = 1:nrow(iris)
dtrain <- xgb.DMatrix(data=as.matrix(iris[,-5]),label = as.numeric(iris[,5])-1)
# set attributes
attr(dtrain,'ID') <- iris$ID

mdl <- xgboost(dtrain,nrounds=3,objective="multi:softmax",num_class=3)
preds = predict(mdl,newdata=dtrain)

feval = function(preds,dtrain){
# getting labels
actual <- getinfo(dtrain,"label")
# Retrieving additionnal information
ID <- attr(dtrain,"ID")
dt <- data.table(ID = ID,actual = actual,preds = preds)
dt
}
feval(preds,dtrain)
本文链接:https://www.f2er.com/3134314.html

大家都在问