使用xgb.train调整xgboost,在R

时间:2016-08-07 15:28:07

标签: r machine-learning cross-validation xgboost

相关问题herehere。调整xgboost(即nrounds)的常用方法是使用执行k-fold交叉验证的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的唯一属性是handleraw,似乎此信息丢失了。

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

问题2:如何检索单个验证错误的标准错误的向量,例如xgb.cv产生的错误?

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

EDIT2:另一个(未答复的)严格相关的问题here

0 个答案:

没有答案