决策树
一、决策树概念
决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。
算法模型如下:
决策树是一个递归的过程,在决策树的基本算法中,三种情况导致递归返回:1)、当前节点包含的样本全属于同一类别,无需划分。2)、当前属性集为空,或是所有样本在所有属性上取值相同,无需划分。3)、当前节点包含的样本集合为空,不能划分。
二、划分选择
2.1、ID3决策树(信息增益)
ID3决策树学习算法是以信息增益为准则来选择划分属性。
信息熵是度量样本集合纯度最常用的一种指标。样本集合D的信息熵定义为:
Ent(D)的值越小,说明D的纯度越高。一个属性a对样本集D进行划分所获得的“信息增益”为:
一般而言,信息增益越大,意味着用属性a进行划分所获得的纯度提升越大,所以上述算法的第8行信息增益中最大的那个属性。
例子:西瓜数据集2.0,包含17个训练样例,为二分类问题,用以学习一棵能预测没剖开的是不是好瓜的决策树。
首先在表中可以看到,17个样本,其中正例有8个,反例有9个。所以样本集D的信息熵为
然后统计当前属性集合{色泽、根蒂、敲声、纹理、脐部、触感}中每个属性的信息增益,以属性“色泽”为例,该值可能有三个取值:青绿、乌黑、浅白。分别计算出每个属性的信息增益,比如青绿有6个,其中3个正例,3个反例。计算的结果如下:
于是可以计算出色泽的信息增益为:
类似的可以计算出其他属性五个属性的信息增益分别为:
可以看出,属性纹理的信息增益最大,于是它被划分为划分属性,基于纹理的划分结果如下,各个分支节点所包含的样例子集显示在节点中。
然后对每一个分支进行进一步划分,比如第一个分支节点,有1,2,3,4,5,6,8,10,15等9个样例,可用的属性集合为{色泽,根蒂,敲声,脐部,触感}等,用同样的方法计算出该子集的所有属性的信息增益:
可以看出根蒂、脐部、触感三个属性的信息增益一致,可任选一个作为划分属性,同理,得到的最终的树结果。
ID3算法的缺点:
- ID3算法在选择根节点和各内部节点中的分支属性时,采用信息增益作为评价标准。信息增益的缺点是倾向于选择取值较多的属性,在有些情况下这类属性可能不会提供太多有价值的信息,泛化能力较弱,无法对新样本进行有效预测。
- ID3算法只能对描述属性为离散型属性的数据集构造决策树。
2.2、C4.5决策树(增益率)
C4.5算法是利用增益率来选择最优的划分属性。克服了用信息增益来选择属性时偏向选择值多的属性的不足,增益率的定义如下:
IV(a)称为属性a的固有值,属性a的可能取值数目越多,其值就会越大。但是增益率会对可取值数目较少的属性有所偏好,所以C4.5并不是直接选取增益率最大的候选划分属性,而是使用一个启发式的方法:先从候选属性中找出信息增益高于平均水平的属性,再选择最高的。
C4.5可以处理连续型的数据。
2.3、CART决策树(基尼指数)
CART决策数使用基尼指数来选择划分属性,数据集D的纯度可用基尼值来度量,定义如下:
直观来说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率,Gini(D)的值越小,则数据集D的纯度越高。属性a的基尼指数的定义为:
一般会选取所有的属性中基尼指数最小的属性作为最优划分属性。
三、剪枝处理
为了防止过拟合,采取剪枝处理。基本策略有预剪枝和后剪枝。
3.1、预剪枝
预剪枝是指在决策树生成过程中,对每个节点在划分前先进行估计,若当前节点的划分不能带来决策树返回性能的提升,则停止划分并将当前节点标记为叶节点。
例子:对于西瓜数据集,双横线的上部为训练集,下部为验证集。
首先根据信息增益的方法进行属性划分,对于没有剪枝的情况如下图所示:
然后利用留出法,将验证集利用上述决策树进行验证,发现{4,5,8}被标记为好瓜,其余4个被标记为坏瓜。所以验证集的精度为3/7=0.429.
如果利用剪枝的方法,在用属性脐部划分之后,被分为了{1,2,3,14}、{6,7,15,17}、{10,16}的训练样例。这三个节点分别被标记为好瓜、好瓜、坏瓜。同理,验证集中有{4,5,8,11,12}五个样例分类正确,此时的精度为5/7=0.714。因为0.714>0.429,所以需要用"脐部"进行属性划分。与此类似,对节点2的色泽属性进行精度验证,此时的精度为0.571,因为0.571<0.714,所以不需要再进行划分。精度三再对根蒂进行属性划分的精度计算,发现精度为0.714, 因为0.714不大于0.714,所以也不需要再进行划分。剪枝后的图为:
3.2、后剪枝
后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上的对非叶节点进行考察,若该节点对应的子树替换为叶节点能够带来决策树泛化性能提升,则将该子树替换为也节点。
由之前的完整的决策树的验证机精度为0.429.首先对节点6纹理,替换成叶节点后,该节点的类别被标记为“好瓜”,验证集的精度变为0.571>0.429,所以需要进行剪枝,此时的纹理节点就变为好瓜(叶节点)。同理往上走,节点5色泽,变为叶节点,标记为“好瓜”,此时的验证集为0.517,并没有性能提升,所以不需要剪枝。这时候再转向其他子树,节点2色泽变为叶节点后,标记为“好瓜”,此时的验证集精度为0.714>0.571,所以需要进行剪枝。同理,对于节点3和节点1变为叶节点后,验证集的精度分别为0.714和0.429并没有带来性能的提升,于是它们被保留。故最后的精度为0.712,生成的剪枝后的决策树为: