我正在浏览这篇文章here但不完全理解关于xgboost中的函数CV和参数“树数”的细节。
假设我们从特征和目标值的数据帧开始。 CV在每一轮中做什么?如果CV结果有500行(即有500棵决策树),每棵树是如何构建的? 500 棵树如何组合起来产生一个对数损失数?
如果我们可以从 CV 函数获得单个预测,为什么我们需要 XGBClassifier.fit 来生成模型(因此是损失数)?
谢谢。
最佳答案
Xgboost是一种梯度提升方法,因此它在每次迭代中添加树以提高预测精度。请参阅本文中的介绍,了解梯度提升的工作原理:https://www.analyticsvidhya.com/blog/2016/02/complete-guide-parameter-tuning-gradient-boosting-gbm-python/ 。这应该可以解释这些树是如何构建的。
当您添加越来越多的树时,预测精度会提高,直到开始过度拟合,此时预测精度会降低。所以你需要找到最佳的树木数量。
从一开始就猜出这个数字基本上是不可能的。这就是 xgboost.cv 的用途。它将您的训练数据划分为两个子集。第一个子集用于训练 xgboost,第二个子集用作验证集。每次迭代(添加额外的树)之后,xgboost 都会计算新的验证误差。这样,xgboost 就能够检测到何时开始过度拟合(当验证错误开始增加时)。这将为您提供给定超参数集的最佳树数。
请注意,xgboost.cv 返回评估历史记录(列表),而 xgboost.train 返回助推器。
另请注意,xgboost.fit 是 sklearn 包装器的一部分(因此最好不要将它与 xgboost.cv 进行比较,xgboost.cv 是 xgboost 学习 API 的一部分)。
最后一点:您不需要 xgboost.cv 来找到最佳树数。您还可以运行 xgboost.train 设置“early_stopping_rounds”。
如果您有任何疑问,请在评论中告诉我。
关于python - xgboost CV和树数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45892211/