【问题标题】:how does xgboost enforce monotonicity constraintsxgboost 如何强制执行单调性约束
【发布时间】:2017-05-29 06:42:16
【问题描述】:

我想知道 xgboost 在构建树模型时如何强制执行单调约束。到目前为止,通过阅读代码,我了解到它与每个节点的权重有关,但无法理解为什么这种方法有效。 提前感谢您的回答

【问题讨论】:

    标签: machine-learning xgboost gradient-descent ensemble-learning


    【解决方案1】:

    这是 LightGBM 中相同功能的简单伪代码:

    min_value = node.min_value
    max_value = node.max_value
    
    check(min_value <= split.left_output) 
    check(min_value <= split.right_output)
    check(max_value >= split.left_otput)
    check(max_value >= split.right_output)
    mid = (split.left_output + split.right_output) / 2;
    
    if (split.feature is monotonic increasing) {
      check(split.left_output <= split.right_output)
      node.left_child.set_max_value(mid)
      node.right_child.set_min_value(mid)
    }
    if (split.feature is monotonic decreasing ) {
      check(split.left_output >= split.right_output)
      node.left_child.set_min_value(mid)
      node.right_child.set_max_value(mid)
    }
    

    参考:https://github.com/Microsoft/LightGBM/issues/14#issuecomment-359752223

    我相信它与 XGBoost 中实现的算法基本相同。

    对于每个拆分候选:

    1. 对照从前任传播的单调性约束检查两个叶子的值。
    2. 检查两片叶子之间的单调性。
    3. 如果单调性被破坏,则拒绝拆分。

    【讨论】:

    • 如果你能定义/描述变量对读者会有帮助
    • 你也可以评论单调约束的多类问题
    猜你喜欢
    • 2017-08-21
    • 2012-12-05
    • 2011-09-07
    • 2015-07-13
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多