机器学习入门 12-1 什么是决策树?

2020-11-05 10:32:55 浏览数 (1)

什么是决策树?

决策树的思想在我们的日常生活中非常常见,甚至在很多时候我们会不自觉的使用这种思路来进行一些判断。

举一个简单的例子。假设有一个公司想要招聘一个机器学习的算法工程师,公司在招聘的时候很有可能会采用下面的流程:

  • 首先看看应聘者是否在机器学习领域发表过顶会论文?
    • Yes,看看应聘者是否有机器学习相关的项目经验?
    • No,看看应聘者在本科阶段的成绩是否为年级前 10?
    • Yes,直接录用!
    • No,继续考察。
    • Yes,直接录用!
    • No,继续考察。
    • Yes,直接录用!
    • No,看看应聘者是否为研究生?

根据上面的层次关系我们可以绘制出一个树形结构。

在这棵树中,所有叶子节点的位置其实都是最终的决策,这个决策可以理解成对输入的受聘者信息进行了一个分类,将这名受聘者分成"录用"或者"留作后续考察"两个类,这样的树形结构就叫做决策树。

这样一棵决策树有树结构(计算机领域)的所有性质,比如:

  • 决策树也有根节点和叶子结点;
  • 决策树也有深度的概念。比如上面例子中所绘制的决策树深度为 3,也就是说最多通过三次判断就能够对输入的受聘者信息进行决策分类;

sklearn 实现决策树

直接使用sklearn为我们封装好的决策树进行具体的分类,然后通过分类结果的决策边界来更加深入的认识决策树。

本小节使用非常经典的鸢尾花数据集 iris,由于我们要对数据进行可视化,所以只保留鸢尾花样本特征中的两个特征,这里选择后两个特征(iris.data[:, 2:])。

使用 sklearn 封装的决策树对鸢尾花数据集进行分类只需要从 sklearn.tree 包中导入 DecisionTreeClassifier 类即可。

构造决策树时传入两个参数:

  • max_depth,决策树的最高深度,此时我们指定 max_depth 为 2;
  • criterion,不纯度的计算方法,此时我们指定 criterion = "entropy",使用信息熵的方式来计算不纯度;

通过 fit 函数拟合训练模型。接下来使用前面一直使用的 plot_decision_boundary 函数绘制使用决策树来解决分类问题的决策边界,与此同时使用 scatter 函数将三个类别的训练样本也绘制出来。

分析决策树的决策边界

下面简单的通过绘制的决策边界来分析得到的大概是个什么样子的决策树。此时的鸢尾花数据集中的特征全是数字特征,也就是说每一个特征都是一个实数。此时每个样本有两个特征x,y(暂时命名为x和y),用横轴表示 x 特征,用纵轴表示 y 特征。

为了方便,将决策边界中蓝色样本点所处的类别称为类别 A(红色区域),将决策边界中橙色样本点所处的类别称为类别 B(黄色区域),将决策边界中绿色样本点所处的类别称为类别 C(蓝色区域)。根据绘制的决策边界可以分析出:

  • 首先来看看样本的特征 x 是不是小于 2.4(2.4 这个值就是决策边界的横坐标轴中红色区域和黄色区域(或蓝色区域)的分界位置)?
    • Yes,样本划分为类别 B。
    • No,样本划分为类别 C。
    • Yes,样本划分为类别 A。
    • No,样本的特征 y 是否小于 1.8(1.8 这个值就是决策边界的纵坐标轴中黄色区域和蓝色区域的分界位置)?

根据绘制的决策边界我们可以得到上面的层次关系,同样的我们可以根据上面的层次关系绘制对应的树形结构。

「这就是决策树在面对属性是这种数值特征时是怎样处理的,在每一个节点上选择某一个维度以及和这个维度相应的一个阈值。」 比如在根节点上选择 x 这个维度和 2.4 的阈值,判断样本点在 x 这个维度上是否小于 2.4,当判断为否后的节点选择了 y 这个维度和 1.8 的阈值,判断样本点在 y 这个维度上是否小于 1.8。

决策树的小结

简单总结一下关于决策树的一些特征:

  • 决策树是一个非参数学习的算法;
  • 决策树可以非常容易的解决分类问题;
  • 决策树可以天然的解决多分类问题。对于多分类问题,决策树算法和 kNN 算法是一样的,而不像逻辑回归算法或 SVM 算法那样需要通过 OVR 或 OVO 这样的手段来解决多分类问题;
  • 决策树也可以解决回归问题。前面介绍使用决策树解决分类问题,将我们的样本点划分为 A,B,C 三个类。如果我们要使用决策树解决回归问题的话,依然需要创建这样一棵树,根据这棵树中每一个节点的判断原则,最终会落到一个叶子节点。当预测样本时,预测样本最终会落到一个叶子节点中,用落在这个叶子节点中的所有训练样本点真实值的平均值来作为预测样本点的预测值;
  • 决策树有非常好的可解释性。对于上面的决策树,我们可以很容易的分析出:只要样本的特征 x 小于 2.4,并且特征 y 小于 1.8 的话,就将这个样本点分类为类别 B。根据决策树中节点的规则,可以非常容易的描述出样本点划分为某一个类别的依据;

了解了什么是决策树,剩下的问题就是如何构建决策树。首先决策树中每一个节点都是找到一个维度,其次找到这个维度中的一个阈值,然后以这个维度的这个阈值作为依据判断是否继续划分,因此构建决策树的核心问题:

  • 每个节点在哪个维度上做划分?
  • 某个维度在哪个值上做划分?

上面的例子非常简单只有两个特征维度。如果数据集比较复杂的话,可能有成百上千个维度,具体要在那个维度上进行划分?如果选好了某个维度,相应的到底要在这个维度上的那个值上进行划分?因此每个节点上在哪个维度上做划分和某个维度上的哪个值做划分是构建决策树的关键问题。

0 人点赞