我需要在自定义评估函数上优化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")]
任何人都知道我是否可以通过索引或将我可能需要的其他信息添加到矩阵中?
我认为没有一种简单的方法来定义
也许尝试设置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)