决策树学习
决策树学习(Decision Tree Learning)是一种非常常见的分类方法,通过构造树模型来对未知类别样本进行分类,以一种离散化的方法得到数据的类别。决策树一般有以下特点:
叶子结点对应着不同的决策类别信息
内部结点对应着属性的判断,通过判断的结果将待测样本划分到该结点的子结点中
从根结点出发到叶子结点的路径对应着一条决策的规则
决策树采取的是递归的方法,生成的步骤如下:
选取最好的属性作为树的根结点;
对根结点的取值进行属性判断,将样本划分到不同的子结点中;
对每一个子结点重复1,2步骤,直到所有的子节点都是叶子节点。
通过其生成步骤可以发现决策树的生成需要解决以下问题:
(1)选择最好属性的度量标准
根据决策树的生成步骤,我们可以知道选择作为根结点的属性,需要满足经过该属性划分后的子结点之间差异性越大越好,即子结点包括的样本集合纯度越来越高,这就要求选择的属性在样本划分前后不纯度降低程度越大越好。
这里我们引入了不纯度这个概念,我们将不纯度的降低程度记为,则有下列公式:
其中是父结点的不纯度,为第j个子结点的不纯度,k为属性的取值个数,N为父结点的样本数,N(j)为第j个子结点的样本数。
我们引入熵的概念来代表任意结点的不纯度,熵的计算公式如下:
其中为结点t中第i类样本占该结点样本总数的比例。
所以可以得到熵减最大的公式:
直接使用熵减作为度量标准可能会碰到一个问题,就是这种策略会尽可能选取那种属性值取值比较多的属性,因为选取这种属性经过划分后熵减会非常大,比如上面的打网球例子,根结点大概率会选取属性date,而显然选择属性date并没有什么意义。
为了避免出现这种情况,我们将这种有较多属性值的属性添加一个惩罚,除上属性的分裂信息,得到新的度量信息熵减率:
同时我们也可以直接将分母换为样本数k,得到度量标准平均熵减:
按熵减的大小对天气属性进行决策树的构建,得到以下决策树:
(2)样本属性值缺失
实际任务中常常会碰到样本缺失某些属性值,面对这些缺失属性值的样本,往往有两种解决办法:
①如果样本总数比较大的话,并且缺失属性值的样本数不多时,可以直接舍弃缺失属性值的样本;
②根据其他属性值已知的样本来估计缺失属性值的样本。
(3)样本属性为连续值
在实际任务中,难免会遇到有些属性值是连续的,而决策树在进行结点的属性判断时要将样本分为不同的子结点,将连续属性值离散化就成了一个必须的步骤,主要的离散方法包括:无监督离散化和有监督离散化
无监督离散化常用的有等深分箱法和等宽分箱法,等深分箱法即每个箱子中样本的个数相同,等宽分箱法即每个箱子的取值范围大小相同。
有监督离散化常用的方法是二分法,即将按照属性值连续的属性值将样本进行排列,找出类别不同的相邻样本,那么离散的边界阈值一定在这些相邻样本间,然后计算每个相邻样本之间阈值的熵减,选择熵减最大的阈值对该属性进行离散化
(4)叶结点的判定
决策树的生成是一个递归的过程,既然是递归,那么就涉及到递归什么时候返回,通俗一点就是划分到什么时候会认为当前的结点就是叶结点,当出现以下三种情况的时候我们就认为当前结点为叶子结点:
当前结点中的样本集合为空
当前结点中的样本集合都属于同一类
当前结点中的所有样本在所有属性上取值都相同,即属性已经被划分完
(5)过拟合
过拟合是机器学习算法的通病,如何避免将训练集的一些特点当作所有数据的共同特点是研究的热点。
在决策树问题中,往往通过剪枝的策略来避免过拟合问题,剪枝分为”预剪枝“和”后剪枝“:
”预剪枝“:在生成完整的决策树之前就强制让决策树停止生长,避免分类器学习到一些训练集的”特性“;
”后剪枝“:在决策树生长完成之后,通过策略对树进行剪枝,剪去学习到的”特性“。
(6)待测样本的分类问题
当构建好决策树后,将如何对待测样本进行分类呢?
我们通常的做法是从决策树的根结点开始,按照结点的属性将样本分到对应的子结点中,然后一直分到叶结点,最后根据叶结点集合中的样本类别计算待测样本最大概率属于哪个类别,最后将该类别输出。