как понять nfold и nrounds в пакете R xgboost - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь использовать пакет 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-кратных подвыборок, используемых ровно один раз в качестве данных проверки»?Может ли кто-нибудь объяснить это мне?

1 Ответ

0 голосов
/ 07 февраля 2019

Это означает и стандартные отклонения оценок nfold процедур проверки соответствия, проводимых в каждом раунде в окрестностях ,Процесс перекрестной проверки XGBoost происходит следующим образом:

  1. Набор данных X разбивается на nfold подвыборок, X 1 , X 2 ... X nfold .
  2. Алгоритм XGBoost устанавливает расширенное дерево в обучающий набор данных, содержащий X 1 , X 2 , ..., X nfold-1 , в то время как последний подвыбор (сгиб) X nfold удерживается как проверочный набор данных 1 (вне выборки).Выбранные метрики оценки (RMSE, AUC и т. Д.) Рассчитываются как для обучающего, так и для проверочного набора данных и сохраняются.
  3. Одна подвыборка (сгиб) в обучающем наборе данных теперь заменяется проверочной подвыборкой (сгиб),поэтому учебный набор данных теперь включает в себя X 1 , X 2 , ..., X nfold-2 , X nfold и проверку(вне выборки) набор данных: X nfold-1 .Еще раз, алгоритм подгоняет расширенное дерево к обучающим данным, вычисляет оценочные баллы (для каждой выбранной метрики) и т. Д.
  4. Этот процесс повторяется nfold раз до каждой подвыборки (fold).) служил как часть обучающего набора и как набор проверки.
  5. Теперь добавлено еще одно увеличенное дерево, и процесс, описанный в шагах 2-4, повторяется.Это продолжается до тех пор, пока общее число повышенных деревьев, подгоняемых к обучающим данным, не станет равным nrounds .
  6. . В настоящее время nfold рассчитаны оценочные баллы (умноженные на числовыбраны различные метрики) для каждого раунда в nrounds как для тренировочных наборов, так и для проверочных наборов (баллы по проверочным наборам, естественно, имеют тенденцию быть хуже).Средние значения и стандартные отклонения баллов nfold рассчитываются как для обучающих, так и для проверочных наборов (умноженных на число выбранных отдельных метрик) для каждого раунда в nrounds и возвращаются в кадре данных с nrounds строк.

1 Обратите внимание, что то, что я бы назвал набором проверки, идентифицируется XGBoost как набор тестов в журнале оценки.

...