【发布时间】:2012-03-18 23:28:16
【问题描述】:
基本上,我的决策树无法使用普通算法对值进行分类。
我到达一个节点,有两个选项(例如,晴天和有风),但在这个节点我的值不同(例如,下雨)。
有什么方法可以解决这个问题,例如更改树还是仅根据其他数据进行估计?
我正在考虑在该节点上分配最常见的值,但这只是一个猜测。
【问题讨论】:
标签: decision-tree
基本上,我的决策树无法使用普通算法对值进行分类。
我到达一个节点,有两个选项(例如,晴天和有风),但在这个节点我的值不同(例如,下雨)。
有什么方法可以解决这个问题,例如更改树还是仅根据其他数据进行估计?
我正在考虑在该节点上分配最常见的值,但这只是一个猜测。
【问题讨论】:
标签: decision-tree
您在谈论“普通算法”,这是一个相当模糊的说法。我假设您使用的是严格二进制根决策树,其中每个内部节点都会对数据进行二进制拆分。因此,每个内部节点的条件评估输出一个布尔变量,它将数据分成左节点(真)和右节点(假)。在您的情况下,您可以在训练数据中有一个具有两个可能值的分类变量weather,这使得只有两个可能的节点:weather==sunny 或weather==windy。因此,rainy 样本将始终位于正确的节点上,因为它不是sunny 也不是windy。
在下图中,rainy 样本将被分类为不晴,不刮风。
【讨论】:
这里的问题是,当您用于分类时,您已经从不同的数据中学到了一个决策。更具体地说,您的决策树只知道属性 Weather 的两个值(即,晴天和有风)。但是您用于分类的数据也允许值 rainy。 由于您的决策树在下雨时没有观察结果,因此该值变得无用。换句话说,你必须从你的分类中消除这个值。
唯一的解决方案是在使用决策树作为分类器之前进行数据清理。 你有两个选择: 1. 从您的数据集中删除所有带有 Weather="rainy" 的观察/实例,因为您无法对它们进行分类。缺点是没有对 Weather="rainy" 的所有实例进行分类。 2. 对于 Weather="rainy" 的所有观测/实例,删除该值,或者将其设置为未知/空。如果您的决策树可以处理空值,它可以对您的所有数据集进行分类。如果没有,你仍然有问题。在这种情况下,您应该选择选项 3。 3. 用 Weather={sunny, windy, rainy} 重新学习你的决策树 (4)。在您的情况下,以下不是一种选择。将“rainy”替换为“sunny”或“rainy”。对此有不同的启发式方法。
【讨论】:
决策树的重点是选项是完整的并且(希望)是互斥的。
如果不是这样,你就会遇到麻烦。重新定义穷人和富人以涵盖一切。 (所有的收入,所有的心态……)
但老实说,将这些天气示例解释为它们的本质:只是一个概念的示例,而不是气象学的圣杯。
【讨论】:
您是否考虑过fuzzy logic 代表富人/穷人的连续体?至于不能用连续体来表达的事情,我想不出有什么办法可以做到。例如,在我们对雨天的体验和反应方面,雨天与晴天和多风的天气有着根本的不同,我不确定您期望计算机(或您正在编写决策树的任何东西)如何计算出来做什么。 (除了简单的“我不知道该怎么做”输出状态之外,我假设你想要一些比这更有意义的东西。)
【讨论】: