簡體   English   中英

如何理解 R 包 xgboost 中的 nfold 和 nrounds

[英]How to understand nfold and nrounds in R's package xgboost

我正在嘗試使用 R 的包 xgboost。 但有一點讓我感到困惑。 在 xgboost 手冊中,在 xgb.cv 函數下,它說:

原始樣本被隨機划分為 n 倍大小相等的子樣本。

在nfold subsamples中,保留單個subsample作為測試模型的驗證數據,剩余nfold-1個subsample作為訓練數據。

然后將交叉驗證過程重復 n 次,每個 n 倍子樣本僅用作驗證數據一次。

這是手冊中的代碼:

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 次”,那么“每個 n 倍子樣本僅用作驗證數據一次”是怎么回事?

這些是在nrounds每輪運行的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和驗證(out-of -sample ) 數據集是 X nfold-1 再次,該算法將提升樹擬合到訓練數據,計算評估分數(對於每個選擇的指標)等等。
  4. 這個過程重復n次,直到每個子樣本(折疊)既作為訓練集的一部分作為驗證集。
  5. 現在,添加另一個提升樹,並重復步驟 2-4 中概述的過程。 這一直持續到適合訓練數據的提升樹的總數等於nrounds
  6. 現在有nfold計算出的評價分數(次選擇不同的度量的數目),用於nrounds每一輪對的訓練集和驗證集兩者(在驗證組自然分數往往更差)。 nfold分數的平均值和標准差是針對nrounds中每一輪的訓練和驗證集(乘以選擇的不同指標的數量)計算的,並在具有nrounds行的數據幀中返回。

1請注意,我所說的“驗證”集被 XGBoost 標識為評估日志中的“測試”集

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM