目录
决策树是如何工作的?
假设你经营一家猫收养中心,希望训练一个分类器来快速判断动物是否是猫。为此,我们收集了10个训练样本,每个样本都有以下特征:耳朵形状(尖或软)、脸型(圆或不圆)、是否有胡须(是或否),并标注了目标标签(1表示猫,0表示非猫)。在这个数据集中,有5只猫和5只狗。输入特征为前三列(X),输出标签为最后一列(Y)。这些特征都是离散的,例如耳朵形状只有"尖"或"软"两种可能,脸型只有"圆"或"不圆"两种可能,胡须只有"有"或"无"两种可能。这是一个二分类任务,因为标签只有1或0两种可能。
什么是决策树?
决策树是一种基于树形结构的分类模型,通过一系列的决策节点来对数据进行分类。以下是决策树的基本组成部分:
-
根节点(Root Node) :树的最顶部节点,是决策的起点。例如,根节点可能询问"耳朵形状是什么?"
-
决策节点(Decision Nodes) :椭圆形的节点,表示一个特征的判断条件。根据特征的值,决策树会沿着不同的分支向下进行判断。
-
叶节点(Leaf Nodes) :矩形的节点,表示最终的分类结果。例如,叶节点可能标注为"猫"或"非猫"。
决策树的工作过程
假设有一个新的测试样本:耳朵尖、脸圆、有胡须。决策树的工作方式如下:
-
从根节点开始,查看耳朵形状。如果耳朵形状是"尖",则沿着左边的分支向下。
-
到达下一个节点,查看脸型。如果脸型是"圆",则继续沿着指定的分支向下。
-
最终到达叶节点,决策树会输出分类结果,例如"猫"。
不同的决策树模型
不同的决策树可能会有不同的结构和判断逻辑。例如,另一个决策树可能会首先根据耳朵形状进行分类,如果耳朵形状是"尖",则进一步检查是否有胡须,最后判断是否为猫。以下是几个不同的决策树示例:
-
决策树1:先判断耳朵形状,再判断脸型,最后得出结论。
-
决策树2:先判断耳朵形状,再判断是否有胡须,最后得出结论。
-
决策树3:可能先判断脸型,再判断其他特征。
这些决策树在训练数据上的表现可能不同,有些可能表现更好,有些可能表现更差。决策树学习算法的目标是在所有可能的决策树中选择一个在训练数据上表现良好,并且能够较好地推广到新的数据(如交叉验证集和测试集)的模型。
总结
-
决策树是一种基于树形结构的分类模型,通过一系列的决策节点来对数据进行分类。
-
根节点 是决策的起点,决策节点 用于判断特征,叶节点表示最终的分类结果。
-
决策树学习算法的目标是选择一个在训练数据上表现良好,并且能够较好地推广到新数据的模型。
图片解释:

这张图片展示了一棵决策树,用于判断一个动物是否是猫。决策树是一种常见的机器学习算法,用于分类和回归任务。在这棵树中,每个节点代表一个特征的判断,而叶节点则给出最终的分类结果。
以下是这棵决策树的结构和工作流程:
-
根节点(Root Node):
-
判断耳朵形状(Ear shape)。
-
如果耳朵是尖的(Pointy),则沿着左边的分支继续判断。
-
如果耳朵是软的(Floppy),则沿着右边的分支继续判断。
-
-
决策节点(Decision Nodes):
-
如果耳朵是尖的(Pointy),则判断脸型(Face shape):
-
如果脸型是圆的(Round),则分类为猫(Cat)。
-
如果脸型不是圆的(Not round),则分类为非猫(Not cat)。
-
-
如果耳朵是软的(Floppy),则判断是否有胡须(Whiskers):
-
如果有胡须(Present),则分类为猫(Cat)。
-
如果没有胡须(Absent),则分类为非猫(Not cat)。
-
-
-
叶节点(Leaf Nodes):
- 叶节点给出最终的分类结果,即"猫"(Cat)或"非猫"(Not cat)。
-
新测试样本(New Test Example):
-
图片右侧展示了一个新测试样本的特征:耳朵形状为尖的(Pointy),脸型为圆的(Round),有胡须(Present)。
-
根据这棵树的规则,这个样本将被分类为"猫"(Cat)。
-
总结来说,这棵决策树通过一系列的特征判断(耳朵形状、脸型、胡须),最终给出一个动物是否是猫的分类结果。

这张图片展示了四个不同的决策树,每个决策树都用于分类一个动物是否为猫。这些决策树的结构和决策路径各不相同,但都基于相同的特征:耳朵形状(Ear shape)、脸型(Face shape)和胡须(Whiskers)。以下是每个决策树的详细解释:
决策树 1:
-
根节点:耳朵形状(Ear shape)
-
如果耳朵是尖的(Pointy):
-
决策节点:胡须(Whiskers)
-
如果胡须存在(Present),分类为猫(Cat)。
-
如果胡须不存在(Absent),分类为非猫(Not cat)。
-
-
-
如果耳朵是软的(Floppy),直接分类为非猫(Not cat)。
-
决策树 2:
-
根节点:耳朵形状(Ear shape)
-
如果耳朵是尖的(Pointy):
- 直接分类为非猫(Not cat)。
-
如果耳朵是软的(Floppy):
-
决策节点:脸型(Face shape)
-
如果脸型是圆的(Round),分类为猫(Cat)。
-
如果脸型不是圆的(Not round),分类为非猫(Not cat)。
-
-
-
决策树 3:
-
根节点:脸型(Face shape)
-
如果脸型是圆的(Round),分类为猫(Cat)。
-
如果脸型不是圆的(Not round),分类为非猫(Not cat)。
-
决策树 4:
-
根节点:脸型(Face shape)
-
如果脸型是圆的(Round):
-
决策节点:耳朵形状(Ear shape)
-
如果耳朵是尖的(Pointy),分类为猫(Cat)。
-
如果耳朵是软的(Floppy),分类为非猫(Not cat)。
-
-
-
如果脸型不是圆的(Not round),分类为非猫(Not cat)。
-
这些决策树展示了不同的决策路径和逻辑,用于根据动物的耳朵形状、脸型和胡须来判断它是否为猫。每个决策树的结构和决策逻辑都可能影响其在实际应用中的准确性和效率。
构建决策树的步骤
给定一组由十个猫和狗的例子组成的训练集,构建决策树的过程可以分为几个关键步骤:
第一步:选择根节点特性
-
决策树学习的第一步是决定在根节点使用什么特性。根节点是决策树顶部的第一个节点。
-
通过一个算法,我们假设决定选择耳朵形状作为根节点的特性。这意味着我们将查看所有的训练例子,并根据耳朵形状特征的值将它们分开。
-
例如,我们可以将五个尖耳朵的例子移到左边,剩下五个松软耳朵的例子移到右边。
第二步:选择左分支节点特性
-
第二步是查看左边的分支,并决定在什么特征上分类,或者我们下一步想使用什么特征。
-
假设决定使用脸型特征,所以现在把左边的五个例子根据他们的脸型值分成两个子集,分别是圆脸和不是圆脸。
-
例如,有四个例子都是圆脸那么把它移到左边,剩下一个移到右边。
第三步:创建叶节点
-
最后,我们看到这四个圆脸的例子都是猫,所以与其进一步分类,不如创建一个叶节点来进行预测。
-
在不是圆脸这里创建一个叶节点,预测不是猫。
第四步:重复右分支过程
-
在决策树左分支的左部分完成此操作后,现在在这个决策树右部分或右分支上重复一个类似的过程。
-
把注意力集中在这五个例子中,里面有一只猫和四只狗,我们必须在这里选择一些特性来进一步分解这五个例子。
-
最后选择胡须作为分类依据,然后根据胡须是否存在来给这五个例子进行分类。
-
只有一个是小猫,这些节点都是纯粹的,意思是要么是猫要么都不是猫,不再有猫和狗的混合,所以可以创建这些叶节点,在左边做一个猫预测,右边是一个不是猫的预测。
关键决策
决策一:如何选择特性
-
第一个关键决定是如何选择在每个节点上使用什么特性进行拆分。
-
在根节点以及决策树的左分支和右分支,我们必须决定在分支上是否有几个例子,包括猫和狗的混合体。
-
决策树会选择在哪个特性上拆分,为了最大限度地提高纯度,需要知道如何划分子集,尽可能接近所有的猫和狗。
-
例如,如果我们有一个特写说这种动物有猫的DNA么,我们实际上没有这个功能,但如果做了,我们可以在根节点上拆分这个特性,会导致五只猫中有五只在左边的树枝上,右边的五只猫中没有一只,这些数据的左子集和右子集都是完全纯的,不管是不是猫,都在左支和右支,所有猫的DNA特征。
-
如果我们有这个功能,这将是一个很好的功能,但有了我们实际拥有的特征,我们将这些样本按耳朵形状、脸型、是否有胡须做成不同的决策树模型,因此决策树学习算法必须在耳朵形状、脸型、胡须之间做出选择,这些特征哪个导致最大的纯度,如果能得到一个高纯的子集,然后进行对猫的预测,得到的结果大部分都是正确的。
决策二:决定何时停止分类
-
在构建决策树时,你需要做出的第二个关键决策是决定什么时候停止分类。
-
我们使用的标准,对于上一个例子来说,直到百分之百所有的猫,或者百分之百所有的狗都不是猫,因为在这一点上,构建一个叶节点来进行分类预测似乎是很自然的。
-
进一步拆分子集将导致树超过最大深度,允许树生长到的最大深度是一个可以在决策树中决定的参数。
-
节点的深度定义为获取所需的跳数,即位于特定节点顶部的节点,所以根节点取零,跳到自己身上,深度为零,它下面的节点在深度一,下边是深度二。
-
如果你决定决策树最大深度是2,然后你将决定不拆分级别以下的任何节点,所以这棵树永远到不了深度3。
-
你可能想要限制决策树深度的一个原因是确保,首先,树不会变得太大,第二,通过保持树的小,使它不太容易过度拟合。
-
你可能用来决定停止的另一个标准,如果纯度分数的提高,将会低于一定的阈值,但如果收益太小,可能你就不会在费心让树变小了,并降低过装风险。
-
最后,如果节点上的示例数低于某个阈值,然后你也可能决定停止分裂,例如,如果在根节点上,在脸型特征上有分类,然后右边的分支就只有3个训练例子,一只猫两只狗,而不是把它分成更小的子集,如果你决定不使用3个或几个示例来拆分更多的示例集,然后你只需创建一个决策节点,而且因为主要是狗,这里有两三只狗,这将是一张预测不是猫的纸条。