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

Posted

技术标签:

【中文标题】决策树完整性和未分类数据【英文标题】:Decision tree completeness and unclassified data 【发布时间】:2016-07-02 02:57:36 【问题描述】:

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

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

作为 f1f2 预测变量(特征)和 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") 不能用给定的树分类。 我遇到了几个问题:

    这种情况有名称吗? 树不完整或类似的东西? 有没有办法知道决策树是否会覆盖未知实例的所有组合(所有特征值组合)? 这种“不完整”的原因是出在数据集的拓扑结构上还是出在用于训练决策树的算法上(本例中为ID3)(或其他)? 有没有一种方法可以用给定的决策树对这些 unclassifiable 实例进行分类?还是必须使用另一种工具(随机森林、神经网络...)?

【问题讨论】:

你用什么软件来学习?这种情况不会发生在决策树学习算法中,因为每次算法进行拆分时,它都会为它拆分叶子的属性的每个可能值创建一个新节点。 @blazs 我自己实现了(出于学习原因,在 F# 中使用)。对于每个选定的特征,我只取数据子集中的特征值,这就是为什么我只有a2a3 用于f1。如果我为每个特征取所有可能的值,我应该为空子集取什么类 (y) 值 (f1 =a1)? @polduran,这是个好问题。一种选择是采用通过父节点的示例的多数类。 (最好收集足够的数据来涵盖所有情况。但我想这不是你的选择。) @blazs 是的,这可能是一个不错的选择。我的第一个想法是我没有正确实现算法,但正如我所见(在进一步阅读之后)处理那些“边缘”情况取决于实现:创建一个“失败”终端节点,这可能类似于我的案例,即。一些看不见的实例可能无法分类;或者找到一种方法为该特征值分配一个类。 是的,机器学习涉及许多边缘情况,应根据手头的情况进行处理。决策树发生的另一个有趣的事情包括:(1)如果遇到连续属性该怎么办; (2)如果一个例子的某个属性值缺失(并且你无法对其进行分类)怎么办; (3) 信息增益高估了多值属性;等 【参考方案1】:

ID3 决策树学习器不会发生这种情况——无论它是使用信息增益还是其他启发式方法进行拆分选择。 (例如,参见***上的ID3 algorithm。)

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

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

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

您介意提供一个您用来学习“不完整”树的软件的链接吗?

回答您的问题:

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

    使用 ID3 算法,您可以证明——正如我在答案中所勾勒的——算法返回的每棵树都将涵盖所有可能的组合。

    您使用了错误的算法。数据与它无关。

    在决策树学习中没有不可分类的实例。通常如下定义决策树学习问题。给定一个训练集S 的示例x1,x2,...,xn 形式为xi=(v1i,v2i,...,vni,yi),其中vjij-th 属性的值,yi 是示例xi 中的类值,学习一个函数(由决策树表示)f: X -> Y,其中X 是所有可能的良构向量(即属性值的所有可能组合)的空间,Y 是所有可能的类值的空间,它最小化了误差函数(例如错误分类示例的数量)。从这个定义可以看出,需要f函数能够将任意组合映射到类值;因此,根据定义,每个可能的实例都是可分类的。

【讨论】:

以上是关于决策树完整性和未分类数据的主要内容,如果未能解决你的问题,请参考以下文章

机器学习分类器的主要假设(LG、SVM 和决策树)

重复行如何影响决策树?

AdaBoost元算法

决策树如果数据集不够多,会导致分类准确率低吗

Sklearn机器学习基础(day02基础入门篇)

数据挖掘——决策树分类