导言

我们在做决断的时候往往不是一蹴而就的,而是一步一步综合各方面因素来做出最后决策,比如三叔要决定周二晚上是否去打羽毛球,会首先考虑最近身体状况,然后考虑当天的天气是否下雨,是否有朋友同去,是否有场地等因素再决定是否去打羽毛球,如果把这些因素及判定用下面竖直方向的流程图画出来正如一颗倒立的树,决策树因此得名。

欠佳
无雨
是否去打羽毛球
身体
天气
不去
朋友
不去
场地
不去
不去

决策树的结构

决策树(上篇)_决策树
我们知道树是一种数据结构,它是由一些结点(Node)和一些边(Edge)组成一个具有层次关系的集合, 就如同自然界的一棵树,有树根,树干和叶子,一个结点的上一层称为其父级,下一层称为其子级,对应父结点和子结点,边连接父结点和子结点,决策树就是一种树形结构。

  • 根结点
    没有父结点的结点称为根结点,表示要判断的最终决策,如上图棕色填充的矩形。

  • 分支结点
    既有父结点,也有子结点的节点称为分支结点,表示要进行某种判断的对象,对象进行判定得到的不同结果形成2个或者多个分支,进入到下一层级的子结点,如上图中蓝色填充的圆形都是用来判断的分支结点。

  • 叶结点
    叶结点是没有子结点的结点,也叫末端结点,表示判断出来的结果,如图中黄色填充的菱形,根结点到每个叶结点均形成一条路径规则。

  • 结点的度
    一个结点能够分出多少分支,分支的数目称为该结点的度,如果分支数最大不超过2,那么就是二叉树结构,叶结点的度为0。

  • 树的深度(高度)
    从根结点到叶结点的所有路径规则中,其中经过最多层级的那条路径的层级数称为树的深度。

决策树的构建

有了决策树的结构后,关键是构建决策树,让其成为一个自上而下,分而治之的有机整体。假设给定的数据集为
D = ( [ X 1 , y 1 ] , [ X 2 , y 2 ] , ⋯   , [ X n , y n ] ) T D=([X_1,y_1],[X_2,y_2],\cdots,[X_n,y_n])^T D=([X1,y1],[X2,y2],,[Xn,yn])T
其中 X i = ( x i 1 , x i 2 , ⋯   , x i p ) X_i=(x_{i1},x_{i2},\cdots,x_{ip}) Xi=(xi1,xi2,,xip) 表示第 i i i 个实例的 p p p 个特征 f 1 , ⋯   , f p f_1,\cdots,f_p f1,,fp的取值, y i y_i yi 表示第 i i i个实例的标签, n n n 为实例的个数。

  1. 根据分裂规则,选择最优的特征 f j ( 1 ≤ j ≤ p ) f_j(1\leq j \leq p) fj(1jp)作为第一个分支结点。
  2. 对分裂后的结果再选择最优的特征 f k ( k ≠ j ) f_k( k \neq j) fk(k=j)作为下一个分支结点。
  3. 递归调用第2步,直到 p p p个特征全被分裂完或者所有划分路径都清楚了,跳出循环。

画个流程图也许看的更清楚

Created with Raphaël 2.2.0 开始 选择最优特征 作为分裂对象 选择次优特征 作为分裂对象 …… 所以层级划分清楚? 结束 yes no

适用场景

决策树属于有监督的算法,常用来提炼有用的规则,某种知识的探测,探索特征与标签的映射关系,探索各特征对标签影响相对大小等。

后话

机智的你也许会问“我如何才能找到最优的特征作为分支结点呢? 如果特征足够多,我也不能让这棵树无限的生长”,于是就有了下期的分裂规则算法和剪枝。

下一篇 决策树(中篇)

决策树(上篇)_决策树_02