目录
一.属性选择
Gain: 节点复杂度。 Gain越高,说明越复杂。有两种衡量方式:
a)熵
熵描述了数据的混乱程度,熵越大,混乱程度越高,也就是纯度越低;反之,熵越小,混乱程度越低,纯度越高。 熵的计算公式如下所示:
其中Pi表示类i的数量占比。以二分类问题为例,如果两类的数量相同,此时分类节点的纯度最低,熵等于1;如果节点的数据属于同一类时,此时节点的纯度最高,熵 等于0。
b)基尼值
基尼值计算公式如下:
其中Pi表示类i的数量占比。其同样以上述熵的二分类例子为例,当两类数量相等时,基尼值等于0.5 ;当节点数据属于同一类时,基尼值等于0 。基尼值越大,数据越不纯。
决策树选择分裂属性采用3个的3个依据: 信息增益(ID3),信息增益率 (C4.5), CART(基尼)
- 信息增益
用信息增益表示分裂前后跟的数据复杂度和分裂节点数据复杂度的变化值,计算公式表示为:
简单理解:分裂前数据复杂度减去孩子节点的数据复杂度和。 信息增益越大,分裂后的复杂度减小的越多,分类效果越明显。
- 信息增益率
使用信息增益作为选择分裂的条件有一个不可避免的缺点: 倾向选择分支比较多的属性进行分裂。为了解决这个问题,引入了信息增益率这个概念。信息增益率是在信息增益的基础上除以分裂节点数据量的信息增益(听起来很拗口),其计算公式如下:
其中 Info_Gain 表示信息增益,InstrinsicInfo 表示分裂子节点数据量的信息增益,其计算公式为:
其中m表示子节点的数量, 表示第Ni个子节点的数据量,N表示父节点数据量。
简单理解:其实InstrinsicInfo是分裂节点的熵,如果节点的数据链越接近,InstrinsicInfo越大,如果子节点越大,InstrinsicInfo越大,而Info_Ratio就会越小,能够降低节点分裂时选择子节点多的分裂属性的倾向性。信息增益率越高,说明分裂的效果越好。(同一层,相当于计算一个增益率)
使用信息增益 率作为选择分裂的条件: 倾向选择分支比较少的属性进行分裂
【实战演练】
指标 | 根据属性2分裂 | 根据属性2分裂 |
信息增益 | Ent(D) = - [ (28/44)* log(28/44) + (16/44)* log(16/44)] Ent(D1) = - [ (14/18)* log(14/18) + (4/18)* log(4/18)] Ent(D2) = - [ (14/26)* log(14/26) + (12/26)* log(12/26)] Info_Gain = Ent(D) - Ent(D1) - Ent(D2) | 同理 |
增益率 | Instrinsicinfo = - [ (18/(18+26))* log(18/(18+26)) + (26/(18+26))* log(26/(18+26))] | 同理 |
二. 停止分裂的条件
(1)最小节点数. (2) 熵或者基尼值小于阈值。 (3)决策树深度达到指定条件。(4)所有的特征已经使用完毕,不能继续分裂
三.决策树的构建
步骤1:将所有的数据看成是一个节点,进入步骤2; 步骤2:从所有的数据特征中挑选一个数据特征(属性选择)对节点进行分割,进入步骤3; 步骤3:生成若干孩子节点,对每一个孩子节点进行判断,如果满足停止分裂的条件,进入步骤4;否则,进入步骤2; 步骤4:设置该节点是子节点,其输出的结果为该节点数量占比最大的类别。 |
构建算法ID3(采用增益)、C4.5(先从候选属性找出增益高于平均水平的属性,再从中选择增益率最高的)、CART(基尼值)三种,其中ID3和C4.5是分类树,CART是分类回归树。
四.优化
防止过拟合,采用剪枝: https://blog.csdn.net/am290333566/article/details/81187562
预剪枝: 在每一次实际对结点进行进一步划分之前,先采用验证集的数据来验证如果划分是否能提高划分的准确性。如果不能,就把结点标记为叶结点并退出进一步划分;如果可以就继续递归生成节点。
后剪枝: 进行剪枝判断的操作中,只对底端结点进行判断。一步一步收缩至每一个底端结点对验证集数据都有更好的分类准确率为止。 相对来讲,计算量比较大。
summary:
后剪枝决策树通常比预剪枝决策树保留了更多的分支;
后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树;
后剪枝决策树训练时间开销比未剪枝决策树和预剪枝决策树都要大的多。
五.连续值和缺失值
当属性为连续值时:二分法。
Step: 对属性值排序a1,a2,a3...... an,划分取值为 (a1+a2)/2 , (a2+a3)/2 , ....... ,(an-1+an)/2 ,计算每一个的划分点,取增益大者。
Tip:若当前节点划分属性为连续属性,该属性还能作为其后代节点的划分属性。
缺失:
处理策略:
1. 处理缺少属性值的一种策略是赋给它结点t所对应的训练实例中该属性的最常见值
2. 另外一种更复杂的策略是为Fi的每个可能值赋予一个概率。例如,给定一个布尔属性Fi,如果结点t包含6个已知Fi_v=1和4个Fi_v=0的实例,那么Fi_v=1的概率是0.6,而Fi_v=0的概率是0.4。于是,实例x的60%被分配到Fi_v=1的分支,40%被分配到另一个分支。这些片断样例(fractional examples)的目的是计算信息增益,另外,如果有第二个缺少值的属性必须被测试,这些样例可以在后继的树分支中被进一步细分。(C4.5中使用)
3. 简单处理策略就是丢弃这些样本
六.常见的树
6.1 ID3
https://www.cnblogs.com/yonghao/p/5096358.html
ID3是基本的决策树构建算法,作为决策树经典的构建算法,其具有结构简单、清晰易懂的特点。虽然ID3比较灵活方便,但是有以下几个缺点:
(1)采用信息增益进行分裂,分裂的精确度可能没有采用信息增益率进行分裂高
(2)不能处理连续型数据,只能通过离散化将连续性数据转化为离散型数据
(3)不能处理缺省值
(4)没有对决策树进行剪枝处理,很可能会出现过拟合的问题
6.2 C4.5
https://www.cnblogs.com/yonghao/p/5122703.html
https://blog.csdn.net/u014688145/article/details/53212112
C4.5算法的优点是:产生的分类规则易于理解,准确率较高。
C4.5算法的缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。
在ID3的存在的问题,基础上对上述1,2,4个方面进行了相应的改进。
- 对连续值的切割
1)切割点:按照五的方式(上述)二分法设计思路-- 一刀切。
但为了减少计算量,会做进一步优化:某个属性排序以后, 若前后两个类标签的一致,则该点不作为切割,排除前后两个类标签相同的切割点来简化计算的复杂度。
2)最优切割点:对连续型属性采用信息增益进行内部择优。选择了最优分割点之后,在计算信息增益率与其他属性进行比较。
- 对缺失值的处理
缺失值:在某些情况下,可供使用的数据可能缺少某些属性的值。例如(X, y)是样本集S中的一个训练实例,X=(F1_v,F2_v, …Fn_v)。但是其属性Fi的值Fi_v未知。
处理策略:
1. 处理缺少属性值的一种策略是赋给它结点t所对应的训练实例中该属性的最常见值
2. 另外一种更复杂的策略是为Fi的每个可能值赋予一个概率。例如,给定一个布尔属性Fi,如果结点t包含6个已知Fi_v=1和4个Fi_v=0的实例,那么Fi_v=1的概率是0.6,而Fi_v=0的概率是0.4。于是,实例x的60%被分配到Fi_v=1的分支,40%被分配到另一个分支。这些片断样例(fractional examples)的目的是计算信息增益,另外,如果有第二个缺少值的属性必须被测试,这些样例可以在后继的树分支中被进一步细分。(C4.5中使用)
3. 简单处理策略就是丢弃这些样本
- 剪枝
后剪枝,采用悲观剪枝方法(PEP)。
剪枝条件: 表示子树的误差; 表示叶子节点的误差; 子树误差的经度满足二项分布,根据二项分布的性质, 其中 , N为子树的数据量 叶子节点误差计算: |
6.3 CART
https://www.cnblogs.com/yonghao/p/5135386.html
- 属性划分
如果是分类树,CART采用GINI值衡量节点纯度;如果是回归树,采用样本方差衡量节点纯度。节点越不纯,节点分类或者预测的效果就越差。
因此,无论是分类树还是回归树,CART都要选择使子节点的GINI值或者回归方差最小的属性作为分裂的方案。
即最小化(分类树): , 其中
或者(回归树): , 其中
如果是回归树,是具体的输出值,一般选择叶子节点的中值,平均值或者众数表示。
如果是分类树, 其叶子节点的输出是一个实际的类别,选择叶子节点中数量占比最大的类别作为输出的类别。
- 分裂
TIP: CART是一颗二叉树
对连续值的操作: 通过最小化分裂后的GINI值或者样本方差寻找最优分割点,将节点一分为二,同C4.5处理,详细请看C4.5。
对离散值的操作: 将其中一个离散值独立作为一个节点,其他的离散值生成另外一个节点即可。
e.g. 如果某离散属性一个有三个离散值X,Y,Z,则该属性的分裂方法有
[{X}、{Y,Z}] , [{Y}、{X,Z}] , [{Z}、{X,Y}],分别计算每种划分方法的基尼值或者样本方差确定最优的方法。
- 剪枝
CART采用CCP(代价复杂度)剪枝方法 - 找到了所有的子树
代价复杂度选择节点表面误差率增益值最小的非叶子节点,删除该非叶子节点的左右子节点,若有多个非叶子节点的表面误差率增益值相同小,则选择非叶子节点中子节点数最多的非叶子节点进行剪枝。
令决策树的非叶子节点为。 a)计算所有非叶子节点的表面误差率增益值 b)选择表面误差率增益值最小的非叶子节点(若多个非叶子节点具有相同小的表面误差率增益值,选择节点数最多的非叶子节点)。 c)对进行剪枝 表面误差率增益值的计算公式: 其中: 表示叶子节点的误差代价, , 为节点的错误率, 为节点数据量的占比; 表示子树的误差代价: , 为子节点i的错误率, 表示节点i的数据节点占比,表示子树节点个数。 |
6.4 总结
算法 | 支持模型 | 树结构 | 特征选择 | 连续值处理 | 缺失值处理 | 剪枝 |
ID3 | 分类 | 多叉树 | 信息增益 | 不支持 | 不支持 | 不支持 |
C4.5 | 分类 | 多叉树 | 信息增益比 | 支持 | 支持 | 支持 |
CART | 分类, 回归 | 二叉树 | 基尼系数,方差 | 支持 | 支持 | 支持 |