Python机器学习基础教程-第2章-监督学习之决策树

本系列教程基本就是摘抄《Python机器学习基础教程》中的例子内容。

为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本:

Github仓库:https://github.com/Holy-Shine/Introduciton-2-ML-with-Python-notebook

系列教程总目录
Python机器学习基础教程

引子

先导入必要的包

import numpy as np import matplotlib.pyplot as plt import pandas as pd import mglearn import os %matplotlib inline

决策树是广泛用于分类和回归任务的模型。本质上,它从一层层的 if/else 问题中进行学
习,并得出结论。

这些问题类似于你在“20 Questions”游戏中可能会问的问题。想象一下,你想要区分下面这四种动物:熊、鹰、企鹅和海豚。你的目标是通过提出尽可能少的 if/else 问题来得到正确答案。你可能首先会问:这种动物有没有羽毛,这个问题会将可能的动物减少到只有两种。如果答案是“有”,你可以问下一个问题,帮你区分鹰和企鹅。例如,你可以问这种动物会不会飞。如果这种动物没有羽毛,那么可能是海豚或熊,所以你需要问一个问题来区分这两种动物——比如问这种动物有没有鳍。

这一系列问题可以表示为一棵决策树,如图 2-22 所示。

mglearn.plots.plot_animal_tree()

Python机器学习基础教程-第2章-监督学习之决策树

图 2-22:区分几种动物的决策树

在这张图中,树的每个结点代表一个问题或一个包含答案的终结点(也叫叶结点)。树的边将问题的答案与将问的下一个问题连接起来。

用机器学习的语言来说就是,为了区分四类动物(鹰、企鹅、海豚和熊),我们利用三个特征(“有没有羽毛”“会不会飞”和“有没有鳍”)来构建一个模型。我们可以利用监督学习从数据中学习模型,而无需人为构建模型。

1. 构造决策树

我们在图 2-23 所示的二维分类数据集上构造决策树。这个数据集由 2 个半月形组成,每个类别都包含 50 个数据点。我们将这个数据集称为 two_moons 。

学习决策树,就是学习一系列 if/else 问题,使我们能够以最快的速度得到正确答案。在机器学习中,这些问题叫作测试(不要与测试集弄混,测试集是用来测试模型泛化性能的数据)。数据通常并不是像动物的例子那样具有二元特征(是 / 否)的形式,而是表示为连续特征,比如图 2-23 所示的二维数据集。用于连续数据的测试形式是:“特征 i 的值是否大于 a ?”

Python机器学习基础教程-第2章-监督学习之决策树

图 2-23:用于构造决策树的 two_moons 数据集

为了构造决策树,算法搜遍所有可能的测试,找出对目标变量来说信息量最大的那一个。图 2-24 展示了选出的第一个测试。将数据集在 x[1]=0.0596 处垂直划分可以得到最多信息,它在最大程度上将类别 0 中的点与类别 1 中的点进行区分。顶结点(也叫根结点)表示整个数据集,包含属于类别 0 的 50 个点和属于类别 1 的 50 个点。通过测试 x[1] <=0.0596 的真假来对数据集进行划分,在图中表示为一条黑线。如果测试结果为真,那么将这个点分配给左结点,左结点里包含属于类别 0 的 2 个点和属于类别 1 的 32 个点。否则将这个点分配给右结点,右结点里包含属于类别 0 的 48 个点和属于类别 1 的 18 个点。这两个结点对应于图 2-24 中的顶部区域和底部区域。尽管第一次划分已经对两个类别做了很好的区分,但底部区域仍包含属于类别 0 的点,顶部区域也仍包含属于类别 1 的点。我们可以在两个区域中重复寻找***测试的过程,从而构建出更准确的模型。图 2-25 展示了信息量最大的下一次划分,这次划分是基于 x[0] 做出的,分为左右两个区域。

Python机器学习基础教程-第2章-监督学习之决策树

图 2-24:深度为 1 的树的决策边界(左)与相应的树(右)

Python机器学习基础教程-第2章-监督学习之决策树

图 2-25:深度为 2 的树的决策边界(左)与相应的树(右)

这一递归过程生成一棵二元决策树,其中每个结点都包含一个测试。或者你可以将每个测试看成沿着一条轴对当前数据进行划分。这是一种将算法看作分层划分的观点。由于每个测试仅关注一个特征,所以划分后的区域边界始终与坐标轴平行。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgdpfd.html