【问题标题】:xgboost CV and number of treesxgboost CV 和树的数量
【发布时间】:2018-02-04 03:24:44
【问题描述】:

我正在阅读文章here,但对函数CV和xgboost中的“树数”参数的详细信息并不完全了解。

假设我们从一个包含特征和目标值的数据框开始。 CV 在每一轮中做了什么?如果 CV 结果有 500 行(即有 500 棵决策树),每棵树是如何构造的?以及如何将 500 棵树组合成一个对数损失数?

如果我们可以从 CV 函数中获得单个预测,为什么我们需要 XGBClassifier.fit 来生成模型(从而产生损失数)?

谢谢。

【问题讨论】:

    标签: python machine-learning xgboost


    【解决方案1】:

    Python xgb.cv 或 xgb.evals_result_ 在训练和验证迭代期间返回所有指标的字典。您可以使用它们来绘制它们并查看它们何时过度拟合。

    【讨论】:

      【解决方案2】:

      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 学习 api 的一部分)。

      最后一点:您不需要 xgboost.cv 来找到最佳的树数。您还可以运行 xgboost.train 并设置“early_stopping_rounds”。

      如果您有任何问题,请在 cmets 中告诉我。

      【讨论】:

      • 我还是很困惑xgb.cv 是干什么用的?只是为了列出历史?
      猜你喜欢
      • 2016-10-20
      • 2017-03-22
      • 2016-03-31
      • 2015-12-11
      • 2017-09-18
      • 2018-10-29
      • 2017-08-17
      • 2021-08-22
      • 2020-02-15
      相关资源
      最近更新 更多