深度学习笔记: 最详尽解释决策树 Decision Trees

发布于:2024-06-24 ⋅ 阅读:(133) ⋅ 点赞:(0)

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家!

决策树

概述

通常,决策树会提出一个陈述,然后根据该陈述是真还是假来做出决定。当决策树将事物分类到不同类别时,称为分类树。当决策树预测数值时,称为回归树


在这里插入图片描述

根节点

树的最顶端称为根节点或直接称为

内部节点

这些称为内部节点,或分支。分支有指向它们和从它们指向的箭头。

叶节点

最后,这些称为叶节点或直接称为叶子。叶子有指向它们的箭头,但没有离开它们的箭头。

示例:构建决策树

现在让我们学习如何从原始数据构建决策树。这个数据集包括关于某人是否喜欢爆米花、是否喜欢苏打水、他们的年龄以及是否喜欢《Cool as Ice》的信息。我们的目标是构建一个分类树,以预测某人是否喜欢《Cool as Ice》。

步骤1:找到根节点

第一步是决定哪个特征(喜欢爆米花、喜欢苏打水或年龄)应该是我们在树的最顶端提出的问题。为此,我们首先检查每个特征预测某人是否喜欢《Cool as Ice》的效果。

为了评估这一点,我们从检查喜欢爆米花如何预测某人是否喜欢《Cool as Ice》开始。我们将创建一个只问某人是否喜欢爆米花的简单树。例如,如果数据集中的第一个人喜欢爆米花,他们将进入左边的叶子。同样,我们创建一个只问某人是否喜欢苏打水的简单树。然后我们通过树运行数据,看看它预测结果的效果如何。


在这里插入图片描述

不纯度:由于这三个叶子都包含喜欢和不喜欢《Cool as Ice》的人,因此它们被称为不纯

基尼不纯度:有几种方法可以量化叶子的不纯度。一种流行的方法称为基尼不纯度。其他方法包括信息增益。数值上,这些方法相似,因此我们将重点放在基尼不纯度上,因为它很流行且直观。

1. 计算“喜欢爆米花”的基尼不纯度

为了计算“喜欢爆米花”的基尼不纯度,我们从计算个别叶子的基尼不纯度开始。

左叶子的基尼不纯度:

左叶子的基尼不纯度 = 1 − ( "yes"的概率 ) 2 − ( "no"的概率 ) 2 = 1 − ( 1 1 + 3 ) 2 − ( 3 1 + 3 ) 2 = 0.375 \text{左叶子的基尼不纯度} = 1 - (\text{"yes"的概率})^2 - (\text{"no"的概率})^2 \\ = 1 - \left(\frac{1}{1+3}\right)^2 - \left(\frac{3}{1+3}\right)^2 \\ = 0.375 左叶子的基尼不纯度=1("yes"的概率)2("no"的概率)2=1(1+31)2(1+33)2=0.375

右叶子的基尼不纯度:

右叶子的基尼不纯度 = 1 − ( "yes"的概率 ) 2 − ( "no"的概率 ) 2 = 1 − ( 2 2 + 1 ) 2 − ( 1 2 + 1 ) 2 = 0.444 \text{右叶子的基尼不纯度} = 1 - (\text{"yes"的概率})^2 - (\text{"no"的概率})^2 \\ = 1 - \left(\frac{2}{2+1}\right)^2 - \left(\frac{1}{2+1}\right)^2 \\ = 0.444 右叶子的基尼不纯度=1("yes"的概率)2("no"的概率)2=1(2+12)2(2+11)2=0.444

由于左叶子中有4个人,而右叶子中只有3个人,因此这些叶子所代表的人数不同。因此,总基尼不纯度是这些叶子基尼不纯度的加权平均值。

总基尼不纯度 = ( 4 4 + 3 ) × 0.375 + ( 3 4 + 3 ) × 0.444 = 0.405 \text{总基尼不纯度} = \left(\frac{4}{4+3}\right) \times 0.375 + \left(\frac{3}{4+3}\right) \times 0.444 \\ = 0.405 总基尼不纯度=(4+34)×0.375+(4+33)×0.444=0.405

所以,“喜欢爆米花”的基尼不纯度是0.405。

2. 计算“喜欢苏打水”的基尼不纯度

同样,"喜欢苏打水"的基尼不纯度是0.214。

3. 计算“年龄”的基尼不纯度

对于像“年龄”这样的数值数据,我们按年龄从低到高对行进行排序,然后计算相邻人之间的平均年龄。然后我们计算每个平均年龄的基尼不纯度。

例如,为了计算第一个值的基尼不纯度,我们使用年龄<9.5作为根。

左叶子的基尼不纯度:

左叶子的基尼不纯度 = 1 − ( "yes"的概率 ) 2 − ( "no"的概率 ) 2 = 1 − ( 0 0 + 1 ) 2 − ( 1 0 + 1 ) 2 = 0 \text{左叶子的基尼不纯度} = 1 - (\text{"yes"的概率})^2 - (\text{"no"的概率})^2 \\ = 1 - \left(\frac{0}{0+1}\right)^2 - \left(\frac{1}{0+1}\right)^2 \\ = 0 左叶子的基尼不纯度=1("yes"的概率)2("no"的概率)2=1(0+10)2(0+11)2=0

这很有道理,因为这个叶子中的每个人都不喜欢《Cool as Ice》,所以没有不纯度。

右叶子的基尼不纯度:

右叶子的基尼不纯度是0.5。现在我们计算两个不纯度的加权平均值以得到总基尼不纯度:

总基尼不纯度 = ( 1 1 + 6 ) × 0 + ( 6 1 + 6 ) × 0.5 = 0.429 \text{总基尼不纯度} = \left(\frac{1}{1+6}\right) \times 0 + \left(\frac{6}{1+6}\right) \times 0.5 \\ = 0.429 总基尼不纯度=(1+61)×0+(1+66)×0.5=0.429

对于其他候选值,最低的不纯度是0.343,通过阈值15和44达到。我们将在此示例中选择15。

比较年龄、“喜欢爆米花”和“喜欢苏打水”的基尼不纯度(分别为0.343、0.405和0.214),"喜欢苏打水"具有最低的基尼不纯度,因此它位于树的顶部。

步骤2:找到内部节点

现在让我们关注左边的节点。所有喜欢苏打水的4个人都在这个节点中,3个人喜欢《Cool as Ice》,1个人不喜欢,因此这个节点是不纯的。所以让我们看看是否可以通过基于“喜欢爆米花”或年龄将喜欢苏打水的人分开来减少不纯度。我们将从问喜欢苏打水的4个人是否也喜欢爆米花开始。此拆分的总基尼不纯度为0.25。

现在像之前一样测试不同的年龄阈值,这次只考虑喜欢苏打水的人的年龄,年龄<12.5给我们最低的不纯度0,因为这两个叶子都没有不纯度。

因为0小于0.25,所以我们使用年龄<12.5将此节点拆分为叶子。

箭头指向叶子,不需要进一步拆分。

步骤3:分配输出值

叶子的输出是最多票的类别。例如,如果叶子中的大多数人喜欢《Cool as Ice》,那就是输出值。

处理过拟合

最后,记住我们构建这棵树时,原始数据集中只有一个人进入了这个叶子。因为这么少的人进入了这个叶子,所以很难有信心它会在未来的数据中做出出色的预测。这表明我们可能对数据进行了过拟合。

在实践中,有两种主要方法来解决这个问题:

  1. 剪枝:这项技术涉及通过删除提供很少或没有预测能力的节点来修剪树。例如,如果我们有一个基于某个特征进行分裂的节点,但它并没有显著减少不纯度,我们可以删除这个节点并合并它的分支。这个简化有助于提高模型对新数据的泛化能力。想象一个基于某人是否喜欢很小众的电影分裂的节点,大多数人都没看过这部电影。如果这个分裂对预测结果没有帮助,我们可以剪掉这个节点以防止过拟合。
  2. 设置增长限制:我们可以限制树的增长,例如,要求每个叶子至少有3个人。这导致了一个不纯的叶子,但它更好地反映了我们预测的准确性。例如,如果叶子中的75%的人喜欢《Cool as Ice》,我们仍然需要一个输出值来进行分类。由于这个叶子中的大多数人喜欢《Cool as Ice》,那将是输出值。

此外,在构建树时,我们事先不知道每个叶子的最佳人数。因此,我们使用一种称为交叉验证的方法测试不同的值,并选择最适合的方法。

参考:


网站公告

今日签到

点亮在社区的每一天
去签到