Я пытаюсь использовать пакет R xgboost.Но есть кое-что, что я чувствую смущениеВ руководстве xgboost под функцией xgb.cv говорится:
Исходный образец случайным образом разбивается на nfold равных по размеру подвыборок.
Из nfold подвыборок одна подвыборка сохраняется в качестве проверкиданные для тестирования модели и оставшиеся nfold - 1 подвыборки используются в качестве обучающих данных.
Затем процесс перекрестной проверки повторяется nrounds раз, причем каждый из nfold подвыборок используется ровно один раз в качестве данных проверки.
И это код в руководстве:
data(agaricus.train, package='xgboost')
dtrain <- xgb.DMatrix(agaricus.train$data, label = agaricus.train$label)
cv <- xgb.cv(data = dtrain, nrounds = 3, nthread = 2, nfold = 5, metrics =
list("rmse","auc"),
max_depth = 3, eta = 1, objective = "binary:logistic")
print(cv)
print(cv, verbose=TRUE)
И результат:
##### xgb.cv 5-folds
call:
xgb.cv(data = dtrain, nrounds = 3, nfold = 5, metrics = list("rmse",
"auc"), nthread = 2, max_depth = 3, eta = 1, objective = "binary:logistic")
params (as set within xgb.cv):
nthread = "2", max_depth = "3", eta = "1", objective = "binary:logistic",
eval_metric = "rmse", eval_metric = "auc", silent = "1"
callbacks:
cb.print.evaluation(period = print_every_n, showsd = showsd)
cb.evaluation.log()
niter: 3
evaluation_log:
iter train_rmse_mean train_rmse_std train_auc_mean train_auc_std test_rmse_mean test_rmse_std test_auc_mean test_auc_std
1 0.1623756 0.002693092 0.9871108 1.123550e-03 0.1625222 0.009134128 0.9870954 0.0045008818
2 0.0784902 0.002413883 0.9998370 1.317346e-04 0.0791366 0.004566554 0.9997756 0.0003538184
3 0.0464588 0.005172930 0.9998942 7.315846e-05 0.0478028 0.007763252 0.9998902 0.0001347032
Скажем, nfold = 5 и nrounds = 2.Это означает, что данные разбиты на 5 частей с одинаковым размером.И алгоритм будет генерировать 2 дерева.
Насколько я понимаю, каждая подвыборка должна пройти валидацию один раз.Когда один подвыбор проверяется, генерируется 2 дерева.Итак, у нас будет 5 наборов деревьев (один набор имеет 2 дерева, потому что nrounds = 2).Затем мы проверяем, сильно ли меняется метрика оценки или нет.
Но результат не говорит о том же.одно значение nround имеет одну строку метрики оценки, которая выглядит так, как будто уже включает в себя часть «перекрестной проверки».Итак, если «процесс перекрестной проверки затем повторяется несколько раз», то как получается «с каждым из n-кратных подвыборок, используемых ровно один раз в качестве данных проверки»?Может ли кто-нибудь объяснить это мне?