Настройка xgboost с xgb.train, обеспечивающей набор проверки в R
Связанные вопросы здесь и здесь. Обычный способ настройки xgboost (то есть nrounds) - это использование xgb.cv, который выполняет перекрестную проверку в k-кратном порядке, например:
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 здесь кажется, что автор может извлечь ошибку проверки. Во всяком случае, я не могу адаптироваться, чтобы сделать то же самое с набором данных радужной оболочки.
EDIT2: еще один (без ответа) строго связанный вопрос здесь