python - xgboost CV和树数

标签 python machine-learning xgboost

我正在浏览这篇文章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/

相关文章:

python - 安装 pip 包时出现 "Failed building wheel for regex"

python - CPython 和 GCC

python - 如何在 python 中将点更改为轴上的逗号

python - 关于kivy中事件调度行为的问题

python - XGBoost - 我应该如何设置 nthread 参数?

tensorflow - Keras/Tensorflow 中一组矩阵之间的成对距离

python - GridSearch 用于 OneVsRestClassifier 中的估计器

python - 创建和测试分类器

python - 如何在 XGBoost 库的 plot_tree 函数中包含特征名称?

python - xgboost 文档有误吗? (早期停止轮次以及最佳和最后一次迭代)