【问题标题】:How to know the number of tree created in XGBoost如何知道在 XGBoost 中创建的树的数量
【发布时间】:2018-10-29 18:37:53
【问题描述】:

我有一个关于 XGBoost 的问题。

你知道如何知道 XGBoost 中创建的树的数量吗? 与由模型制造商决定制作多少棵树的 RandomForest 不同,XGBoost 基本上会继续创建树,直到损失函数达到某个数字。所以我想知道这个。

谢谢。

【问题讨论】:

    标签: python random-forest xgboost


    【解决方案1】:

    有点歪,但我目前正在做的是dump-ing 模型(XGBoost 生成一个列表,其中每个元素都是单个树的字符串表示),然后计算有多少元素在列表:

    # clf is a XGBoost model fitted using the sklearn API
    dump_list = clf.get_booster().get_dump()
    num_trees = len(dump_list)
    

    【讨论】:

      【解决方案2】:

      在 java 中,似乎没有直接的方法来做到这一点。但是,您可以使用模型转储的结果来获取实际的树数。使用训练有素的Booster

      int numberOfTrees = booster.getModelDump("", false, "text").length;
      

      【讨论】:

        【解决方案3】:

        这由您作为用户控制。您是否使用本机训练 API,那么这是由 num_boost_round 控制的(默认为 10)请参阅文档 here

        num_boost_round (int) - 提升迭代次数。

        如果您使用 sklearn API,则这由 n_estimators 控制(默认为 100)请参阅文档 here

        n_estimators : int 要适应的增强树的数量。

        唯一需要注意的是,如果您设置了提前停止标准,这是要拟合的最大树数,拟合可以停止。我不确定你是否使用它。

        【讨论】:

        • 我想知道为什么这个答案被否决了?我是不是答错了问题或答案?
        • @Mykhalio OP 想知道为给定的拟合 XGBoost 对象生成的树的实际数量。就像你写的那样,这可能小于用户定义的参数,所以不能使用。
        • @OmerB 可以是对原始问题的一种解释。但是,该问题没有提到提前停止程序并且含糊不清。如果配置中没有实现提前停止,那么我的回答是正确的。
        • @Mykhalio - 还有其他效果。例如,在多类问题中,XGBoost 为每个类创建单独的树,因此使用 3 个类和 10 轮提升,您可能会得到 30 棵树。总之,该参数既不能用作上限,也不能用作下限。
        猜你喜欢
        • 1970-01-01
        • 2018-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-24
        • 1970-01-01
        • 2015-07-31
        • 2022-12-21
        相关资源
        最近更新 更多