当我们使用任何决策树算法并且我们的数据集由数值组成时。
我发现程序提供的结果将节点拆分为数据集中甚至不存在的值
示例:
分类结果
- 属性2 <= 3.761791861252009:组A
- 属性 2 > 3.761791861252009:组 B
在我的数据集中,attrib2 没有像 3.76179 这样的值。为什么会这样?
当我们使用任何决策树算法并且我们的数据集由数值组成时。
我发现程序提供的结果将节点拆分为数据集中甚至不存在的值
示例:
分类结果
在我的数据集中,attrib2 没有像 3.76179 这样的值。为什么会这样?
大多数决策树构建算法(J48、C4.5、CART、ID3)的工作方式如下:
一旦你找到了最好的分割点,算法就会在如何表示它上产生分歧。示例:假设您有 -4(是)、-3(是)、-3(是)、-2(否)、-1(否)。-3 和 -2 之间的任何值都将具有相同的纯度。一些算法(C4.5)会说 val <= -3。其他人,例如 Weka,将选择平均值并给出 val <= -2.5。
有几种方法可以选择属性。并非所有人都选择数据集中的值。
一个常见的(虽然有点简单)是取平均值。3.76179... 可能是数据集所有属性的平均值。
例如,如果您的数据集是一维的,并且由值组成,-10, -9, .. -2, -1, 1, 2, ..9, 10
那么一个好的分割值将是0
,即使它不在您的数据集中。
另一种可能性,尤其是在您处理随机森林(几棵决策树)时,分裂值是随机选择的,概率分布以中值为中心。一些算法决定根据以均值/中值为中心的高斯进行分割,并且偏差等于数据集的标准偏差。
首先,您可以检查如何离散数值。这些算法将数值范围分成几个区间,每个区间都有很大的信息增益。例如,您在每次拆分后执行步骤 0.1,检查其信息增益并选择最佳位置,然后继续使用恶意间隔。