决策树
引例
本文以一个经典的二分类西瓜问题为例
这是一个西瓜训练集D,可以看出,该数据集中共有17组数据,每组数据都有色泽、根蒂、敲声、纹理、脐部、触感6个属性,这6个属性加上其各自的分支(a1色泽:青绿、乌黑、浅白,a2根蒂:蜷缩、稍蜷、硬挺,a3…)组成了该西瓜问题的属性集A。最后,每组数据都会确定其是好瓜还是坏瓜,这就是最终的分类结果。
我们的决策树算法便是在这样一个已有的训练集上构建一个树结构,使得其能够在输入一个新的数据(包含属性集A中的6个属性值)时,能够输出一个最为准确的判断(好瓜还是坏瓜)。
算法简图
一些容易纠结的点
类/类别:就是最终的决策结果(好瓜/坏瓜)
标记为叶结点:即该结点就是最终的决策结点(判定是好瓜还是坏瓜),无法再递归了
算法解析
本质上是一个构建树结构的函数,参数为训练集D和属性集A。可以看出这是一个递归的算法(递归意味着可能有剪枝的方法,后面会讲到)。
递归出口有三个:
(1)当前结点包含的样本全属于同一类别(全是好瓜/全是坏瓜),无需划分,直接做决策;
(2)当前属性集为空(属性集已经用完了),或是所有样本在所有属性上取值相同(在剩下的属性集中,每一个属性的属性值都一样,例:假设对于某次递归的训练子集D,属性集A中只剩下了脐部和触感两个属性,但是D中的西瓜在这两个属性上取值完全一致),无法划分,这时我们以当前结点的训练子集D中最多的分类(好瓜/坏瓜)作为最后的决策结果;
(3)当前结点包含的样本集合为空(在当前递归的训练集D中,该最优划分属性a*的某一分支下无样本),不能划分,此时我们以该叶子结点的父结点的训练集D中最多的分类(好瓜/坏瓜)作为最后的决策结果。