使用xgb.train在R中提供验证集调整xgboost

使用xgb.train在R中提供验证集调整xgboost,r,machine-learning,cross-validation,xgboost,R,Machine Learning,Cross Validation,Xgboost,相关问题和建议。调整xgboost(即nrounds)的常用方法是使用执行k倍交叉验证的xgb.cv,例如: require(xgboost) data(iris) set.seed(1) index = sample(1:150) X = as.matrix(iris[index, 1:4]) y = as.matrix(as.numeric(iris[index, "Species"])) - 1 param = list(eta=0.1, objective="multi:softprob

相关问题和建议。调整xgboost(即nrounds)的常用方法是使用执行k倍交叉验证的xgb.cv,例如:

require(xgboost)
data(iris)
set.seed(1)
index = sample(1:150)
X = as.matrix(iris[index, 1:4])
y = as.matrix(as.numeric(iris[index, "Species"])) - 1
param = list(eta=0.1, objective="multi:softprob")
xgb.cv(params=param, data=X, nrounds=50, nfold=5, label=y, num_class=3)
> train.merror.mean train.merror.std test.merror.mean test.merror.std
> 1:          0.021667         0.009501         0.040000        0.043461
> 2:          0.018333         0.006972         0.033333        0.047141
> 3:          0.018333         0.006972         0.033333        0.047141
> 4:          0.018333         0.006972         0.033333        0.047141
无论如何,我想调优xgboost,提供一个验证集。这不可能使用
xgb.cv
。这似乎可以通过使用
xgb.train
实现:

require(xgboost)
data(iris)
set.seed(1)
index = sample(1:150)
indexTrain = index[1:100]
indexValid = index[101:150]
Xtrain = as.matrix(iris[indexTrain, 1:4])
Xvalid = as.matrix(iris[indexValid, 1:4])
yTrain = as.numeric(iris[indexTrain, "Species"]) - 1
yValid = as.numeric(iris[indexValid, "Species"]) - 1
train = xgb.DMatrix(Xtrain, label=yTrain)
valid = xgb.DMatrix(Xvalid, label=yValid)
param = list(eta=0.1, objective="multi:softprob")
watchlist = list(eval=valid, train=train)
model = xgb.train(params=param, data=train, nround=40, watchlist=watchlist,
                  num_class=3)
>[0]    eval-merror:0.060000    train-merror:0.020000
>[1]    eval-merror:0.060000    train-merror:0.030000
>[2]    eval-merror:0.060000    train-merror:0.020000
>[3]    eval-merror:0.060000    train-merror:0.020000
事实上,在使用xgb.traing进行培训时,可以观察控制台中打印的评估错误。无论如何,由于
model
的唯一属性是
handle
raw
,因此该信息似乎丢失了

问题1:如何检索控制台中打印的验证错误向量

问题2:如何检索单个验证错误(如
xgb.cv
产生的一次)的标准错误向量

EDIT1:在第58行和第59行中,作者似乎能够提取验证错误。无论如何,我不能适应对iris数据集做同样的事情

编辑2:另一个(未回答的)严格相关的问题