【问题标题】:num_leaves selection in LightGBM?LightGBM中的num_leaves选择?
【发布时间】:2019-07-30 08:38:36
【问题描述】:

是否有任何经验法则来初始化lightgbm 中的num_leaves 参数。例如1000 的特征数据集,我们知道tree-depth10 可以覆盖整个数据集,因此我们可以相应地选择它,并且调整的搜索空间也受到限制。

但是在lightgbm中,我们怎么能粗略的猜到这个参数呢,不然用grid-search的方式搜索空间会很大。

选择此参数的任何直觉都会有所帮助。

【问题讨论】:

    标签: machine-learning hyperparameters lightgbm


    【解决方案1】:

    我遇到的最佳推荐是 lightgbm github 上的 this awesome summary by Laurae。与往常一样,这在很大程度上取决于您的数据。

    基于有限的 kaggle 经验,我个人的经验法则是从尝试 [10,100] 范围内的值开始。但是,如果您有可靠的启发式方法来选择树深度,您可以随时使用它并将num_leaves 设置为2^tree_depth - 1

    【讨论】:

    • 为什么是-1,为什么不只是2^tree_depth
    • 深度一的树有 1 个叶子/节点,深度二 - (1+2) 叶子,深度三 - (1+2+4)。其余的你通过归纳得到
    • 我认为叶子应该表示终端节点,因此深度为 n 的树可能有 2^n 个叶子/终端节点,以及 2^n - 1 个非终端节点。 lightgbm.readthedocs.io/en/latest/Parameters-Tuning.html 证实了我的理解。但我不确定 2^n - 1 num_leaves 背后的直觉。
    • 我看不到页面在哪里确认叶子是终端节点的假设。一棵树的第n层叶子的数量是2^(n-1),但这与num_leaves无关
    • 啊,我认为他们在该声明中没有明确表示。您可以在该段的末尾看到,他们实际上引用了 2**7-1 的值作为他们给出的示例。在整个文档中,您会看到最大值是奇数而不是偶数。另一个示例是 Laurae 的参数文档:sites.google.com/view/lauraepp/parameters -> Maximum leaves:“在 LightGBM 上,最大叶子必须与最大深度一起调整。要获得 xgboost 行为,请将最大叶子设置为 2^depth - 1 。”您可以通过构建深度为 1 的树并绘制它来验证您的假设
    猜你喜欢
    • 2020-05-20
    • 2019-06-24
    • 2018-03-09
    • 2018-07-01
    • 2018-11-30
    • 1970-01-01
    • 2020-06-28
    • 2021-10-10
    • 2018-01-27
    相关资源
    最近更新 更多