【发布时间】:2017-05-29 06:42:16
【问题描述】:
我想知道 xgboost 在构建树模型时如何强制执行单调约束。到目前为止,通过阅读代码,我了解到它与每个节点的权重有关,但无法理解为什么这种方法有效。 提前感谢您的回答
【问题讨论】:
标签: machine-learning xgboost gradient-descent ensemble-learning
我想知道 xgboost 在构建树模型时如何强制执行单调约束。到目前为止,通过阅读代码,我了解到它与每个节点的权重有关,但无法理解为什么这种方法有效。 提前感谢您的回答
【问题讨论】:
标签: machine-learning xgboost gradient-descent ensemble-learning
这是 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 中实现的算法基本相同。
对于每个拆分候选:
【讨论】: