2016-11-09 90 views
3

我使用XGBoost cv來查找我的模型的最佳回合數。我將不勝感激,如果有人可以證實(或否定),兩輪的最佳數量是:XGBoost CV和最佳迭代

estop = 40 
    res = xgb.cv(params, dvisibletrain, num_boost_round=1000000000, nfold=5, early_stopping_rounds=estop, seed=SEED, stratified=True) 

    best_nrounds = res.shape[0] - estop 
    best_nrounds = int(best_nrounds/0.8) 

即:完成了兩輪的總數量是res.shape [0],所以得到最優回合數,我們減去早期回合數。

然後,我們根據用於驗證的分數放大輪次數。 這是正確的嗎?

回答

0

是的,這聽起來是正確的,如果你做best_nrounds = int(best_nrounds/0.8)你認爲你的驗證集是你整個培訓數據的20%(另一種說法是你進行了5倍交叉驗證)。

那麼規則可以概括爲:

n_folds = 5 
best_nrounds = int((res.shape[0] - estop)/(1 - 1/n_folds)) 

或者,如果你不執行CV但單一的驗證:

validation_slice = 0.2 
best_nrounds = int((res.shape[0] - estop)/(1 - validation_slice)) 

你可以看到被應用here on Kaggle這個規則的一個例子(見評論)。

+0

感謝您的答案有最好的迭代次數,並根據您的解決方案是不是意味着我們使用CV調整PARAMS並獲得最佳增強迭代和計算最佳迭代我們的訓練數據符合cv的摺疊和迭代?然後我們直接在整列火車上訓練模型,並計算出輪數? – LancelotHolmes

+1

我相信best_nrounds = res.shape [0]。 n_fold和estop如何影響最佳迭代次數?我相信res只會報告低於最佳迭代點的值。 – notilas

-1

您可以通過「res.best_iteration」

+0

但是這是cv的最佳效果,我們如何才能獲得訓練集的最佳迭代輪次? – LancelotHolmes

+0

這是正確的。這是CV的最佳迭代,這正是我們感興趣的內容。對訓練集的最佳迭代可能將是您運行的最後一次迭代。但如果驗證集在你開始過度適應數據本身之前就停止了改進 - 你不想做的事情。 – Yaron

+0

謝謝,但是如果我將訓練num_round設置爲一個非常大的數字,我會最終得到一個overfitting模型嗎?或者當我訓練模型時,我是否應該拆分火車組,並在早期停車的情況下對已拆分的評估組進行評估? – LancelotHolmes

相關問題