在ID3实现中,此时算法中的递归应该停止

时间:2010-09-19 21:43:01

标签: machine-learning classification decision-tree

在ID3实现中,此时算法中的递归应该停止。

2 个答案:

答案 0 :(得分:2)

如果没有要分类的示例或者没有要归类的属性,分支就会停止。 algorithm description on Wikipedia非常容易理解,并且还有很多关于示例和讨论的链接。

答案 1 :(得分:0)

只要符合分割标准,你就会继续分裂(从现存的节点中形成两个新节点)。

分裂标准通常是父节点信息增益之间差异的负值,也就是,(或方差,如果变量是离散的而不是分类的,并且假定的子节点的加权平均IG加权平均信息增益

if weighted_mean(IG_child1, IG_child2) < IG_parent :
    createNodes(IG_child1, IG_child2)
else :
    continue 

所以这是一个微不足道的答案,但是你的问题背后可能有一个更复杂的意图,如果你不介意的话,我会稍微重新说一下 你应该继续创建节点吗?只要满足分裂标准?

正如您可能刚刚发现的那样,如果您正在编写ID3算法,那么应用不受约束的分割标准通常会导致过度拟合(即,您从培训中构建的树)数据并不能很好地概括,因为它没有将噪声与真正的模式区分开来。)

所以这更有可能是你的问题的答案:'约束'节点分裂(因此处理过度拟合问题)的技术都属于两个类别之一 - 自上而下自下而上。自上而下的一个例子:设置一些阈值(例如,如果子节点的加权平均值低于5%,那么不要拆分)?

自下而上的示例: pruning 。修剪意味着只要满足分裂标准就分割算法然后在它停止之后,从底层节点开始并且“未分离”任何节点,其中子节点和父节点之间的IG差异小于某些节点阈值。

这两种方法没有相同的效果,实际上修剪是一种优越的技术。原因是:如果你自上而下强制执行分裂阈值,那么当然会阻止一些分裂;但是,如果允许发生,则下一次拆分(两个子节点中的一个或两个进入孙子节点)可能是有效的分割(即,高于阈值)但是该分割将永远不会发生。修剪当然是为了这个。