决策树完整性和未分类数据

时间:2016-03-16 09:53:22

标签: machine-learning classification decision-tree

我制作了一个程序,使用信息增益函数( Shanon entropy )训练基于 ID3 算法构建的决策树,以进行特征选择(分裂)。 一旦我训练了决策树,我就对其进行了测试以对看不见的数据进行分类,并且我意识到某些数据实例无法分类:树上没有对实例进行分类的路径

一个例子(这是一个插图示例,但我遇到了更大,更复杂的数据集的相同问题):

  • f1 f2 预测变量(要素)和 y 分类变量,值范围为:
    • f1 :[a1; a2; a3]
    • f2 :[b1; b2; b3]
    • y :[y1; y2; y3]
  • 培训数据:

    ("a1", "b1", "y1");
    ("a1", "b2", "y2");
    ("a2", "b3", "y3");
    ("a3", "b3", "y1");
    
  • 受过训练的树:

         [f2] 
        / |  \ 
      b1  b2  b3 
      /    |   \ 
     y1   y2   [f1] 
               /  \ 
              a2   a3 
             /      \ 
            y3       y1 
    

无法使用给定树对实例("a1", "b3")进行分类。 有几个问题出现在我面前:

  1. 这种情况有名吗? 树不完整或类似的东西?
  2. 有没有办法知道决策树是否涵盖所有未知实例的组合(所有特征值组合)?
  3. "不完整性" 的原因在于数据集的拓扑结构或用于训练决策树的算法( ID3 在这种情况下)(或其他)?
  4. 是否有方法使用给定的决策树对这些无法分类的实例进行分类?或者必须使用其他工具(随机森林,神经网络......)?

1 个答案:

答案 0 :(得分:2)

ID3决策树学习者不会发生这种情况---无论是使用信息增益还是其他启发式进行分割选择。 (例如,请参阅维基百科上的ID3 algorithm。)

上面示例中的“训练树”无法通过ID3决策树学习算法返回。

这是因为当算法选择一个d - 值的属性(即具有d个可能值的属性)来分割给定的叶子时,它将创建d个新孩子(每个属性值一个)。特别是,在上面的示例中,节点[f1]将有三个子节点,对应于属性值a1a2a3

从上一段(以及一般来说,从ID3算法的工作方式)开始,任何格式良好的矢量---形式为(v1, v2, ..., vn, y),其中vi是一个值i - 属性和y是类值---应该可以通过算法在给定列车集上学习的决策树进行分类。

您是否介意提供用于学习“不完整”树的软件的链接?

回答你的问题:

  1. 不是我所知道的。学习这种“不完整的树木”是没有意义的。如果我们知道某些属性值永远不会发生,那么我们就不会将它们包含在规范(列出属性及其值的文件)中。

  2. 使用ID3算法,您可以证明 - 正如我在答案中所描绘的那样 - 算法返回的每棵树都将涵盖所有可能的组合。

  3. 您使用的是错误的算法。数据与它无关。

  4. 在决策树学习中没有不可分类的实例。人们通常如下定义决策树学习问题。给定S格式x1,x2,...,xn xi=(v1i,v2i,...,vni,yi)格式vji j yi xi属性f: X -> Y属性值X示例Y中的类值,学习一个函数(由决策树表示)f,其中ftp是所有可能格式良好的向量的空间(即所有可能的属性组合)值)和scp是所有可能类值的空间,它最小化了错误函数(例如错误分类的例子的数量)。从这个定义中,您可以看到,要求函数UPDATE xtable set xvalue = N'Â?thisisatest' 能够将任何组合映射到类值;因此,根据定义,每个可能的实例都是可分类的。