1、概括
顾名思义,决策树就是一棵树,一颗决策树包含一个根节点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集,从根结点到每个叶子结点的路径对应了一个判定测试序列。决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。
2、停止条件
1、当前结点包含的样本全部属于同一类,无需划分
2、当前属性集合为空,或是所有样本在所有属性上取值相同(所有条件都一样,但还是无法判断类别)
3、当前结点包含的样本集合为空,无法划分(没有对应的样本了)
决策树算法的核心:从属性集中选择最优的划分属性
3、如何选择最优的划分属性
熵是度量样本不纯度的指标,样本不纯度越大,熵越大,越无序。熵越小,样本的纯度越高,所以决策树的生长过程也是不断的将数据的不纯度降低的过程,希望最后得到的分类结果纯的很高,也就是准确性很高。
常用的决策树算法有ID3,C4.5,CART三种。ID3 使用信息增益作为选择特征的准则;C4.5 使用信息增益比作为选择特征的准则;CART 使用 Gini 指数作为选择特征的准则。
4、信息增益:ID3
熵表示的是数据中包含的信息量大小。熵越小,数据的纯度越高,也就是说数据越趋于一致,这是我们希望的划分之后每个子节点的样子。
信息增益 = 划分前熵 - 划分后熵。信息增益越大,则意味着使用属性 a 来进行划分所获得的 “纯度提升” 越大 。也就是说,用 属性 a 来划分训练集,得到的结果中纯 度比较高。ID3 仅仅适用于二分类问题。ID3 仅仅能够处理离散属性。
步骤:
1、首先是针对当前的集合,计算每个特征的信息增益
2、然后选择信息增益最大的特征作为当前节点的决策决策特征
3、根据特征不同的类别划分到不同的子节点(比如年龄特征有青年,中年,老年,则划分到3颗子树)
4、然后继续对子节点进行递归,直到所有特征都被划分
5、信息增益率:C4.5
C4.5 克服了 ID3 仅仅能够处理离散属性的问题,以及信息增益偏向选择取值较多特征的问题,使用信息增益比来选择特征。信息增益比 = 信息增益 / 划分前熵 选择信息增益比最大的作为最优特征。
C4.5 处理连续特征是先将特征取值排序,以连续两个值中间值作为划分标准。尝试每一种划分,并计算修正后的信息增益,选择信息增益最大的分裂点作为该属性的分裂点。但是,对连续属性值需要扫描排序,会使C4.5性能下降。
ID3和C4.5都是分类树,CART(Classification and regression tree)可以是分类/回归树。
步骤:
6、基尼指数:CART
a、CART 的全称是分类与回归树。从这个名字中就应该知道,CART 既可以用于分类问题,也可以用于回归问题。CART 与 ID3,C4.5 不同之处在于 CART 生成的树必须是二叉树。也就是说,无论是回归还是分类问题,无论特征是离散的还是连续的,无论属性取值有多个还是两个,内部节点只能根据属性值进行二分。
b、回归树中,使用平方误差最小化准则来选择特征并进行划分。每一个叶子节点给出的预测值,是划分到该叶子节点的所有样本目标值的均值,这样只是在给定划分的情况下最小化了平方误差。要确定最优化分,还需要遍历所有属性,以及其所有的取值来分别尝试划分并计算在此种划分情况下的最小平方误差,选取最小的作为此次划分的依据。由于回归树生成使用平方误差最小化准则,所以又叫做最小二乘回归树。
c、分类树种,使用 Gini 指数最小化准则来选择特征并进行划分;Gini 指数表示集合的不确定性,或者是不纯度。基尼指数越大,集合不确定性越高,不纯度也越大。这一点和熵类似。另一种理解基尼指数的思路是,基尼指数是为了最小化误分类的概率。
分类树:
1、首先是根据当前特征计算他们的基尼增益
2、选择基尼增益最小的特征作为划分特征
3、从该特征中查找基尼指数最小的分类类别作为最优划分点
4、将当前样本划分成两类,一类是划分特征的类别等于最优划分点,另一类就是不等于
5、针对这两类递归进行上述的划分工作,直达所有叶子指向同一样本目标或者叶子个数小于一定的阈值
7、信息增益 vs 信息增益比
之所以引入了信息增益比,是由于信息增益的一个缺点。那就是:信息增益总是偏向于选择取值较多的属性。信息增益比在此基础上增加了一个罚项,解决了这个问题。
8、Gini 指数 vs 熵
既然这两个都可以表示数据的不确定性,不纯度。那么这两个有什么区别那?
1、Gini 指数的计算不需要对数运算,更加高效;
2、Gini 指数更偏向于连续属性,熵更偏向于离散属性。
9、如何处理连续值:
因为连续属性的可取值数目不再有限,因此不能像前面处理离散属性枚举离散属性取值来对结点进行划分。因此需要连续属性离散化,常用的离散化策略是二分法,这个技术也是C4.5中采用的策略。总结:将连续值由小到大排序,取一个值作为划分点进行二分,计算增益值。
10、如何抑制单颗决策树的过拟合:
1、限制树的深度、叶子节点最少样本数量、结点分裂时的最少样本数量等
2、对训练样本进行采样、只使用部分特征来选择最优分类特征
3、目标函数添加正则化项
11、剪枝(pruning)
剪枝的目的是为了避免决策树模型的过拟合。因为决策树算法在学习的过程中为了尽可能的正确的分类训练样本,不停地对结点进行划分,因此这会导致整棵树的分支过多,也就导致了过拟合。决策树的剪枝策略最基本的有两种:预剪枝(pre-pruning)和后剪枝(post-pruning)
预剪枝(pre-pruning):预剪枝就是在构造决策树的过程中,先对每个结点在划分前进行估计,若果当前结点的划分不能带来决策树模型泛华性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点。
总结: 对比未剪枝的决策树和经过预剪枝的决策树可以看出:预剪枝使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销。但是,另一方面,因为预剪枝是基于“贪心”的,所以,虽然当前划分不能提升泛华性能,但是基于该划分的后续划分却有可能导致性能提升,因此预剪枝决策树有可能带来欠拟合的风险。
后剪枝(post-pruning):后剪枝就是先把整颗决策树构造完毕,然后自底向上的对非叶结点进行考察,若将该结点对应的子树换为叶结点能够带来泛华性能的提升,则把该子树替换为叶结点。
总结:对比预剪枝和后剪枝,能够发现,后剪枝决策树通常比预剪枝决策树保留了更多的分支,一般情形下,后剪枝决策树的欠拟合风险小,泛华性能往往也要优于预剪枝决策树。但后剪枝过程是在构建完全决策树之后进行的,并且要自底向上的对树中的所有非叶结点进行逐一考察,因此其训练时间开销要比未剪枝决策树和预剪枝决策树都大得多。
12、理想的决策树
1、叶子节点数尽量少
2、叶子节点的深度尽量小(太深可能会过拟合)
13、优点
1、计算量简单,可解释性强,比较适合处理有缺失属性值的样本,能够处理不相关的特征;
14、缺点
1、 单颗决策树分类能力弱,并且对连续值变量难以处理;
2.、容易过拟合(后续出现了随机森林,减小了过拟合现象);