XGBoost 验证树的数量

数据挖掘 分类 xgboost 交叉验证 助推
2021-09-30 23:27:28

我有一个简单的问题:

我正在使用 XGBoost 对一些数据进行分类: 1.)使用 100 个估计器,我有以下分数(roc_score):train_data:98.5 validation_data:97.2

2.) 使用 500 个估计器,我有以下分数(roc_score): train_data:99.4 validation_data:97.7

雅高。到上面我们可以说具有 500 个估计器的模型效果更好。或者我应该几次更改验证数据,然后通过从 100 个估计量转移到 500 个估计量,看看是否会发生类似的增量。

2个回答

乍一看,您的结论似乎是正确的,但有一些重要的注意事项需要牢记。

首先,您的训练和验证集的大小是多少?如果您的验证集太小,则观察到的差异可能在统计上不显着。

其次,您应该验证您的验证集是一个有代表性的样本。(即它应该来自与训练集相同的分布)。如果它不具有代表性,那么它可能会给出较差的性能估计。

第三,在调整超参数时,最好将数据集分成三个分片——训练、验证和测试。您可以使用训练集和验证集来找到最佳超参数(如您所做的那样),然后使用测试集为调整后的模型生成性能估计。如果您信任在超参数调整期间获得的验证准确性,那么您可能会出现一种微妙的过度拟合形式,其中超参数专门用于验证集。

最后,如果您有计算资源,那么使用交叉验证而不是训练测试拆分来评估准确性总是一个好主意。这将为您提供更可靠的准确性估计。

如果您已选中所有这些框,那么您有充分的理由相信 500 个估算器比 100 个估算器好!

[S]我是否应该多次更改验证数据,看看是否会通过将估计量从 100 个转移到 500 个来发生类似的增量?

是的,尝试许多不同的超参数配置总是一个好主意。您可以使用 scikit-learnGridSearchCVRandomizedSearchCV轻松地在超参数空间上运行搜索。

只是为其他答案添加一些一般性想法。通过增加树的数量,梯度提升对过度拟合相当稳健。如果学习率很小,增加树的数量有望提高性能。因此,通常认为最好通过提前停止来设置树的数量,而不是像其他超参数一样对待它们。

你会设置一个小的学习率(东西 η<0.1) 并将树的数量设置为较大的值,一旦在单独的验证集上看不到任何改进,就停止添加树。

作为最后一个可选步骤,由于添加越来越多的树会导致性能增益越来越小,因此一旦您找到了满意的模型并希望将其投入生产,您可以分析在不显着的情况下可以减少多少树的数量降低性能。如果速度是一个问题,您可以修剪树的数量以加快生产中的计算。这个想法通常也用于随机森林,因为在这里添加更多的树永远不会降低性能。