如何创建完美的决策树

译文
人工智能 机器学习
决策树在分类和回归等机器学习领域,以及现实生活中有着许多实用的场景。本文通过简单例子,向您阐述了决策树,及其属性选择的基本原理。

【51CTO.com快译】众所周知,决策树在现实生活中有着许多实用的场景,它深刻地影响着包括分类和回归在内的、非常广泛的机器学习领域。可以说,在各种决策分析中,决策树能够起到直观且明确的决策辅助性作用。

什么是决策树?

决策树是一系列相关选择所产生的可能性结果的“展示图”。它允许个人或组织根据其成本、概率和效益,来对各种可能采取的行动进行权衡。

顾名思义,决策树使用的是树状的决策模型。它既可以被用于推进各种非正式的讨论,又可以被用来通过“绘制”算法,以预测那些在数学上的***选择。

决策树通常是从单个节点开始的。该节点可以分支出各种可能性的结果。同时,这些结果都会导致新的节点产生,而这些节点则会继续分枝出另一些其他类型的可能性。因此,这些最终形成一个树状的结构。

在决策树中一般有三种不同类型的节点:机会节点、决策节点和末端节点(end node)。我们用圆形来表示的机会节点,代表某些结果的概率;用正方形来表示的决策节点,代表要做出的各种决策;结束节点表示某个决策路径的最终结果。

决策树的优缺点

优势

  • 决策树能够生成各种可理解的规则。
  • 无需大量计算,决策树即可执行分类。
  • 决策树能够处理连续变量和分类变量。
  • 决策树能够清楚地表明哪些字段对于预测或分类是最为重要的。

缺点

  • 决策树不太适合于那些目标为预测连续属性值的估算类任务。
  • 在面对有着多个类、和相对较少的训练样本的分类问题时,决策树容易出现错误。
  • 在训练的过程中,决策树在计算成本上的开销比较高。在每个节点上,我们必须先对每个候选字段进行排序,然后才能找到其***的拆分方式。某些算法会使用字段的组合,以对***组合的权重进行搜索。另外,由于必须形成和比较各种候选子树,因此修剪算法(Pruning algorithms,https://www.edureka.co/blog/implementation-of-decision-tree/)的开销会更大。

创建决策树

让我们考虑一个场景,有一组天文学家发现了一颗新的行星,他们感兴趣的问题是:它是否可能是下一个地球呢?

显然,在做出明智的判断之前,我们值得深入研究的决定性因素有许多,包括:该星球上是否存在着水、温度是多少、地表是否容易持续遭受暴风雨的影响、动植物是否在此类特定的气候中能生存活下来等方面。

下面,让我们通过创建一个决策树,来判定它是否人类下一个“栖息地”。

首先,我们设定宜居的温度在0到100摄氏度之间。

其次,是否存在着水?

然后,动植物是否繁茂?

组后,该星球的表面是否有风暴?

至此,我们就得到了一个完整的决策树。

分类规则

分类规则是:在考虑了所有的可能性之后,为每种方案分配一个类变量(class variable)的状况。

类变量

我们为每一个叶节点都分配一个类变量。类变量将直接影响我们判断的最终输出。

下面让我们从上面创建的决策树中,推导出如下的分类规则:

1. 如果温度不在273至373K(开尔文,热力学单位)之间,则视为:生存困难。

2. 如果温度在273至373K之间,且不存在水,则视为:生存困难。

3. 如果温度在273至373K之间,存在水,但没有动植物,则视为:生存困难。

4. 如果温度在273至373K之间,存在水,存在动植物,且无地表暴风雨,则视为:生存可能。

5. 如果温度在273至373K之间,存在水,存在动植物,但存在地表暴风雨,则视为:生存困难。

决策树

本例的决策树由如下部分组成:

  • 根节点:在上例中,“温度”因素被视为根。
  • 内部节点:具有一个传入边(incoming edge)和两到多个传出边(outgoing edge)的节点。
  • 叶子节点:不再具有传出边的末端节点。

根据上述三个部分,我们从根节点开始,逐个检查测试条件(test condition),并将判断结果(或称控制)分配给其中一个传出边,以便将其作为另一个节点的传入边,进行下一轮条件测试。当所有测试条件都遍历完毕并到达叶子节点时,该决策树完毕。而叶子节点则包含了是否认可该决策(判断)的各种类标签(class labels)。

您一定有些疑惑:为什么我们会将“温度”属性作为根,来构造决策树呢?如果选择其他属性,将有什么不同呢?的确,不同的属性特征会创建出许多不同的树。我们需要通过遵循某种算法来选择***的决策树。下面我们来讨论一种被称为“贪婪法则(Greedy Approach)”的决策树创建算法。

贪婪法则

根据维基百科,贪婪法则是基于启发式问题解决(Heuristic Problem Solving)的概念,在每个节点上做出***的局部选择。然后通过这些局部的***选择,在全局范围内找到了近似的***解。

该算法包括:

1. 在每个阶段(节点),选择出***特征作为测试条件。

2. 接着将节点拆分为各种可能性的输出(内部节点)。

3. 重复上述步骤,直到所有测试条件都在叶子节点中被遍历到。

我们回到刚才的问题:如何选择初始的测试条件呢?这里会涉及到两个概念:熵(Entropy)和信息增益(Information Gain)。

熵:在决策树中,熵表示同质性。如果数据是完全均匀的,则熵为0;否则,如果数据被分割了(如50比50%),那么熵为1。

信息增益:信息增益表示节点被拆分时,其熵值的增与减。

我们的目的是,让被选取进行拆分的属性特征具有***的信息增益。因此,根据熵和信息增益的计算值,我们需要在任何特定步骤中,选取***的属性。

我们来看下图的一组数据:

我们可以根据上图中各种维度的属性特征集合,得出一系列不同种类的决策树。下面 是两种创建试验:

树的创建试验 1:

在此,我们使用“学生”,这一属性特征作为初始化的测试条件,其决策树如下图所示。

树的创建试验 2:

同样,我们可以选择“收入”作为测试条件,如下图所示:

用贪婪法则创建***的决策树

在此,我们涉及到两个类:“Yes”表示此人会购买电脑;“No”表示不购买。为了计算熵和信息增益,我们来看看这两个类分别的概率值。

»Positive:“buys_computer=yes”的概率为:

»Negative:“buys_computer=no”的概率为:

D的熵:我们将概率值放入上面的公式,以求出熵。

在准备阶段,我们预先对熵的值进行了分类,它们分别为:

熵 = 0:数据完全是同质的 (纯)

熵 = 1:数据被分为50%比50% (不纯)

由于我们算出的熵值是0.940,可见是不纯的。

下面让我们通过深入研究,来找出合适的属性特征,以计算信息增益。

如果我们在“年龄”上进行拆分,那么就能够按照年龄的不同阶段,来区分是否购买电脑产品。

例如,对于年龄在30岁及以下的人来说,有2人购买(Yes),3人不购买(No)电脑。那么我们针对三个年龄阶段(将年龄属性特征值进行拆分)的人,计算出针对***一列(是否购买电脑)的Info(D)。

可见,信息增益便是总的Info(0.940)与以年龄为属性计算的Info(0.694)的差。

因此,这就是我们如果使用“年龄”为属性进行拆分的因子。同理,我们也可以计算出其余属性特征维度的“信息增益”,如:

信息增益 (年龄) = 0.246

信息增益 (收入) = 0.029

信息增益 (学生) = 0.151

信息增益 (信用评级) = 0.048

通过对上述值的综合比较,我们不难发现:“年龄”的“信息增益”***,因此,拆分“年龄”是一个比较好的决策。

可见,我们应该创建的***决策树应该如下图所示:

由上图可见,我们应该按照如下逻辑“绘制”出该决策树的分类规则:

如果某人的年龄小于30岁,而且他不是学生,那么他就不会买产品。

Age (<30) ^ student(no) = NO

如果某人的年龄小于30岁,并且他是学生,那么他就会购买该产品。

Age (<30) ^ student(yes) = YES

如果某人的年龄在31岁至40岁之间,那么他最有可能购买产品。

Age (31…40) = YES

如果某人的年龄超过了40岁,且信用评级非常好,那么他就不会买产品。

Age (>40) ^ credit_rating(excellent) = NO

如果某人的年龄超过了40岁,且信用评级尚可,那么他很可能会购买产品。

Age (>40) ^ credit_rating(fair) = Yes

这便是我们根据上例所实现的***决策树。

原文标题:How to Create a Perfect Decision Tree,作者:Upasana Priyadarshiny

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

责任编辑:庞桂玉 来源: 51CTO
相关推荐

2022-11-11 08:00:00

决策树机器学习监督学习

2017-11-21 13:00:20

机器学习决策树可视化

2016-09-30 16:12:47

GBDT算法决策树

2022-01-24 09:00:00

机器学习决策树算法

2018-02-02 15:50:07

决策树Apache Spar数据

2022-12-21 14:39:35

机器学习案发决策树

2020-10-23 10:36:08

Dropbox

2020-10-26 09:53:44

Dropbox攻击网络安全

2012-08-06 09:04:01

决策树建模

2021-01-12 18:40:58

基尼不纯度决策树机器学习

2017-12-12 12:24:39

Python决策树

2017-09-11 13:33:44

大数据数据可视化决策树

2017-05-10 15:41:29

机器学习算法数据

2017-07-18 16:25:31

机器学习算法决策树

2017-02-23 08:45:36

Python决策树数据集

2023-08-11 17:30:54

决策树机器学习算法

2017-09-25 16:16:49

决策树随机森林机器学习

2017-10-18 14:11:20

机器学习决策树随机森林

2020-11-02 13:54:41

Python可视化决策树

2021-11-08 07:11:49

决策树数据分类器
点赞
收藏

51CTO技术栈公众号