决策树是机器学习最基础的算法之一,基于决策树可衍生出AdaBoostTree、随机森林、GBDT等高级算法。本文重点介绍决策树的构造原理及应用。
1. 什么是决策树
举一个简单的例子,我们在挑选西瓜的时候,如何判断一个西瓜是否好西瓜,有经验的人都知道可以看西瓜的纹理、根蒂、色泽和触感等。
上图就是一棵决策树,也就是一个包含有根节点、分支节点、叶节点的树状结构,叶节点为类别标签。在挑选西瓜的时候,如果带着上面这棵决策树,挑选西瓜的流程就可以是这样:
* step1: 观察西瓜的纹理,如果纹理模糊就可以认为是坏瓜,否则进一步观察;
* step2: 如果纹理稍微模糊,则看西瓜的触感,如果触感硬滑则是好瓜,如果触感软粘则是坏瓜;如果为例清晰,则看根蒂,如果根蒂蜷缩则为好瓜,如果根蒂硬挺则为坏瓜,如果根蒂稍蜷,则再进一步观察;
* step3: 看西瓜的色泽,如果是青绿色则为好瓜,如果是浅白色则为坏瓜,如果为乌黑色则再进一步观察;
* step: 看西瓜的触感,如果触感硬滑则为好瓜,如果触感软粘则为坏瓜。
如果在买西瓜的时候能有这样一棵决策树仅根据西瓜的纹理、根蒂、色泽和触感便能准确判断西瓜的好坏,再也不用担心买到坏瓜啦!但是,这样一棵决策树是如何得来的呢?为什么首先判断西瓜的纹理而不是色泽或触感呢?为什么说纹理模糊的就是坏瓜呢?接下来将详细介绍决策树的构造原理和过程。
2. 如何构造决策树
给定数据集 D={ (x1,y1),(x2,y2),...,(xm,ym)} , yi 表示样本的类别,类似于卖西瓜例子中的“好瓜”和“坏瓜”,属性集(用于判断样本类别的维度,类似于上例中的纹理、触感等)为 A={ a1,a2,...,ad} ,决策树构造过程如下:
STEP1:如果D中样本全属于同一个类别C,则添加节点C,结束;否则进入STEP2。(此时得到的决策树仅包含一个节点,即将任何样本都判断为类别C。)
STEP2:如果属性集个数为空或在每一个属性上面都取相同的值,则将D中样本数最多的类添加到节点中,算法结束;否则进入STEP3。
STEP3:选择最优划分属性 a∗ ,对于 a∗ 的每一个取值 av∗ ,用 Dv 表示D中在 a∗ 上对应取值 a∗