在决策树中查找非单调区域

Posted

技术标签:

【中文标题】在决策树中查找非单调区域【英文标题】:Finding non-monotonic regions in decision trees 【发布时间】:2013-05-15 07:00:36 【问题描述】:

我有一个二叉决策树 T,它采用 n 个实数的向量 V,并通过遵循 V 上的每个坐标二进制拆分来输出一个数字 S。我想找到树的非单调区域。也就是说,如果我在 V 中再减少一个输入以形成 V',然后树为 V' 分配比 V 更大的输出,那么我发现了一个非单调区域。

如何找到这些地区?

【问题讨论】:

【参考方案1】:

我假设“每个坐标二进制拆分”意味着一次在单个坐标上做出决策。对于 L1 的值低于 L2 的所有叶 L1 和 L2 对,确定 L1 和 L2 的轴对齐边界框。如果对于某些 L1 和 L2,L1 的最大角超过 L2 的最小角,则树是非单调的。相反,如果不存在这样的对,则树是单调的。

【讨论】:

不错。与一位同事一起,我们也提出了枚举所有叶对的解决方案。有比 O(leaves^2) 更好的解决方案吗? @rrenaud 渐近地说?无疑。问题是你真正关心的 n 和 #leaves 的范围。 @rrenaud 为了稍微扩展该评论​​,我认为这可以通过 O(log n) 调用(甚至可能是 O(1))到确定一组点的子例程来完成在 n 维中具有空的支配关系,这比 n 维最大值问题更容易,对于 n 维最大值问题,存在固定 n 的子二次算法。问题是后者遭受了维度的诅咒。 n 很小,现在 ~=10,可以想象它可以达到 50(这些对应于手工设计的特征)。我不确定叶子的数量,现在它不到 25k(训练点的数量),但可以变得更容易。 @rrenaud 粗略计算表明理论上最好的最大值算法对您没有用处。在枚举候选叶子对的方式上可能会有一些改进(例如,存储子树的最小值/最大值;遍历所有叶子,并在枚举另一个叶子的可能性时,修剪明显没有有趣可能性的子树)。【参考方案2】:

我没有提供细节,只是提供大体方向。如果您需要更多详细信息,请告诉我。

假设您有一棵考虑单个特征(即一个实数)并输出一个单个数字或一个范围的树。现在,很容易找到该树的非单调区域(在任何节点,如果左子树的范围与右子树的范围重叠,则树的该部分存在非单调区域)。

您可以将您的通用 DT 转换为仅适用于一个功能的 DT 并应用上述方法。

一般而言,您可以在每个节点上维护每个特征的范围,并使用我上面提到的相同标准来查找此类区域。

【讨论】:

我没有看到一般的 DT -> 单功能 DT 构造。从根本上说,即使是 2D DT 也具有无法比较的区域(在 OP 的 V、V' 意义上两者都不相互支配),而 1 特征 DT 中的所有区域都是可比较的。

以上是关于在决策树中查找非单调区域的主要内容,如果未能解决你的问题,请参考以下文章

如何使用决策树中的 feature_importances_ 删除所有非零重要特征?

决策树中的特征重要性、离散化和标准

决策树中的特征重要性、离散化和标准

为啥我们不能在决策树中随机启动根节点?

scikit学习决策树导出graphviz - 决策树中的错误类名

机器学习系列-决策树