决策树如何计算拆分属性?

时间:2011-06-09 08:29:33

标签: machine-learning data-mining decision-tree

当我们使用任何决策树算法时,我们的数据集由数值组成。

我发现程序提供的结果会将节点拆分为数据集中甚至不存在的值

例:
分类结果

  1. attrib2< = 3.761791861252009:groupA
  2. attrib2> 3.761791861252009:groupB
  3. 在我的数据集中,attrib2没有像3.76179那样的值。 为什么会这样?

3 个答案:

答案 0 :(得分:16)

大多数决策树构建算法(J48,C4.5,CART,ID3)的工作原理如下:

  • 对可以拆分的属性进行排序。
  • 查找所有“断点”所在的位置 与之关联的类标签 变化。
  • 考虑标签更改的分割点。选择最小化纯度测量的那个。信息增益仅取决于排序,而不取决于值。

一旦找到了最佳分割点,算法就如何表示它们意见不一致。示例:假设您有-4(是), - 3(是), - 3(是), - 2(否), - 1(否)。 -3和-2之间的任何值都具有相同的纯度。一些算法(C4.5)将说val <= -3。其他人,例如Weka,将选择平均值并给出val <= -2.5。

答案 1 :(得分:8)

有多种方法可以选择属性。并非所有人都在数据集中选择值。

一个常见的(虽然有点简单)是采取平均值。 3.76179 ...可能是您数据集的所有attrib2的平均值。

例如,如果您的数据集是1维的,并且由值-10, -9, .. -2, -1, 1, 2, ..9, 10组成,则好的分割值将为0,即使它不在您的数据集中。

另一种可能性,特别是当你处理随机森林(几个决策树)时,分裂值是随机选择的,概率分布以中值为中心。有些算法决定按照以均值/中值为中心的高斯分割,偏差等于数据集的标准偏差。

答案 2 :(得分:1)

首先,您可以查看如何对数值进行离散化。这些算法将数值范围分成几个区间,每个区间都有很大的信息。例如,您在每次拆分后使用步骤0.1检查其infogain并选择最佳位置,然后继续吐出的间隔。