说到决策树,大家肯定不陌生,因为其结构简单,学习成本低,且可解释性强,有着广泛的应用。

因此各类书籍、技术博客都有介绍,且深入浅出、图文并茂、生动形象。

鉴于已经有非常多带图的博客介绍决策树。这里就不上图了,主要以公式推导为主。 

本文主要分三块内容来介绍决策树:

  1. 首先会简单回想下决策树的内容,因为这部分相对简单。大家了解的也多,因此会高速过一遍。
  2. 随后本文会对决策树的数学原理做详尽的剖析和推导。这也是本文的重点,做到知其然更知其所以然。

  3. 最后是决策树在工业应用中常见的一些形态。这部分内容在本文不做具体展开,留在兴许文章中详述。
决策树的构建

        通俗来讲。决策树的构建过程就是将数据依据其特征分布划分到不同的区域。使得同一个区域的样本有尽可能一致的类别标签。在决策树构建的过程中。我们须要一个衡量标准来确定每次数据划分所带来的收益。这个标准就是信息熵,以0-1二分类问题为例,衡量一个节点的信息熵公式例如以下:

 

决策树的数学原理_数据

 

        当中p为当前节点中正样本的比例,Entropy越大,说明节点的样本越杂,因此Entropy越小越好。如果我们每次对数据划分都是将数据一分为二,分别为leftright, 分裂的收益就是分裂前节点的Entropy减去这两个节点的Entropy的加权和。即:Entropy(parent) - Prob(left) * Entropy(left) + Prob(right) * Entropy(right),这个值越大越好。这个收益。学术上我们称作“信息增益”。当中Prob(left)为左节点的样比例,Prob(right)为右节点的样本比例。

        因为单纯使用信息增益作为标准来构建决策树,easy导致过拟合的问题。因此前辈们又引入了“信息增益率”,以及对树进行剪枝等方式来优化树的创建过程。这里我们仅仅是提一下。不做更深的探讨。感兴趣的同学能够百度,Google相关内容学习。


信息熵的概率解释

        上节提到的决策树构建过程。除了一个简单的信息熵公式之外。没有不论什么数学的元素。略微有点编程经验的同学都能够高速编写一个决策树模型。

因此我们说决策树模型简单,学习成本低。

        但有些同学可能会追问。衡量数据划分收益的标准为什么是信息增益(熵的减少)而不是别的东西。或者说为什么它是靠谱的?本节。我们就来回答这个问题。过程中。我们会用到一些概率统计和微积分的基础知识。我们还是以二分类问题为例。即样本中仅仅有两类样本:正例(标记为“1”),负例(标记为“0”)。为了对二分类问题建模,我们须要一个如果,即如果第i个样本的模型结果pi的靠谱程度由例如以下公式衡量:


决策树的数学原理_数据_02

        当中yi表示第i个样本的类标签,决策树的数学原理_信息增益_03,通俗来讲就是如果样本类别推断正确的概率服从给定參数决策树的数学原理_信息增益_04的二项分布。也叫伯努利分布,每一个样本都服从同样的分布,且相互之间独立。这样,我们能够写出整个数据集的似然函数,也就是该二分类问题的目标函数:


决策树的数学原理_信息增益_05

        模型优化的目的,或者说构建一棵决策树的目的,就是使得该公式的值尽可能的大。那这个跟我们要讨论的信息增益(熵的减少)有什么关系?

 

        不急,我们先对目标函数两边分别取对数并取反得到:


决策树的数学原理_建模_06

        求原函数的最大值等价于求该函数的最小值。

        因为该函数对參数 决策树的数学原理_信息增益_07 的二阶导大于0恒成立,例如以下:


决策树的数学原理_决策树_08

        因此,这是一个有且仅有一个最小值的凸函数。为求极值相应的函数參数,仅仅需求其一阶导等于0就可以,即求 pi 使得:

决策树的数学原理_数据_09

        依据决策树模型,整个数据集会被划分到不同的区域(叶子节点),并且被划分到同一个区域的样本的预測值同样。则我们仅仅需对每一个叶子节点求解:决策树的数学原理_决策树_10就可以。当中pk为第k个节点的预測值,即该节点全部样本的预測值。

        公式展开例如以下:

决策树的数学原理_信息熵_11

化解得到:

决策树的数学原理_信息熵_12

求解得到:

决策树的数学原理_信息熵_13

当中m为该节点样本总数,分子部分为该节点正样本数,则pk即为该节点正样本的比例。

将pk带入公式得到:


决策树的数学原理_信息熵_14


进一步为了消除节点样本个数对该值的影响。使用节点样本数对该结果做归一化。得到:


决策树的数学原理_信息增益_15   

 

        没错。你没有看错!

这就是我们开头抛出的信息熵公式。可见信息熵并非什么凭空降临的上帝准则,而是从二项分布中,一步步推出来的。不知道香浓在提出信息熵的时候。是不是用了二项分布。如果是,那就是新瓶装旧酒。没什么新意。如果真是灵机一动的神来之笔,那就是英雄所见略同,尽管这两个英雄隔了好几个世纪。    


几个概念

        在工作中,我们经常听到诸如模型、目标、參数等概念。那什么是模型、什么是目标函数、什么是參数,它们之间有什么关系?

  • 关于模型

        我们讨论的决策树。是通过将数据划分到不同的互不重合区域(相应于树的生长过程)。使得每一个区域的样本有尽可能一直的类标签(相应于目标函数的最大化)的模型。

仅仅是一种建模方法。而与要优化的目标没有必定关系。

  • 关于目标函数

        而上文中我们为了解释信息熵的原理而引入的二项分布,以及基于此构造的损失函数Loss。则是我们的目标函数。我们的目标是最大化该函数的值。

  • 关于模型參数

        有了目标函数,才有模型的參数。

模型參数是在模型结构的约束下,依据给定的训练数据。使得目标函数取的最大值时的函数參数。

  • 三者关系

        一个模型能够有非常多个目标。一个目标能够通过不同的模型去优化。即模型结构与目标函数是独立的,互补依赖。互补干涉。

而參数则共同依赖于模型结构和目标函数。有什么样的目标函数,就有什么样的參数形式;而模型的结构则决定了终于的參数结果。


决策树的应用

        读到此处相信你一定对决策树有了新的理解,不幸的是如果我们单纯地依照本文所讲的内容去建一棵决策树,你会发现模型极易出现过拟合,没什么用处。因此工业上在使用决策树模型来建模数据时,往往要加上一些限制和约束。比方说限制树的深度、限制树叶子节点的个数、为模型參数加上L2或者L1的显式正则,更或者我们使用多棵而不是仅仅使用单棵树来建模数据。

        使用多棵树来建模时,树的组合方式又有不同的选择,比方:boosting,bagging。

使用Boosting来组合决策树的模型我们称之为GBDT(gradient boosting decision tree);而使用bagging方式来组合决策树的模型我们则称之为random Forest(随机森林)。这也是工业界最常使用的两种树模型,我们统称为TreebasedModel......

 

        欲知后事怎样,且听下回分解。