XGBoost CV和最佳迭代

时间:2016-11-09 05:33:47

标签: python machine-learning statistics xgboost

我正在使用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],因此要获得最佳轮数,我们会减去早期轮次的数量。

然后,我们根据用于验证的分数来扩大轮次数。 这是正确的吗?

2 个答案:

答案 0 :(得分:1)

是的,如果您best_nrounds = int(best_nrounds / 0.8)时认为您的验证集是整个训练数据的20%(另一种说法是您进行了5次交叉验证),这听起来是正确的。

然后可以将规则概括为:

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

或者,如果您不执行简历而只进行一次验证:

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

您可以看到正在应用此规则的示例here on Kaggle(请参阅评论)。

答案 1 :(得分:0)

您可以通过'res.best_iteration'获得最佳的迭代次数