决策树(ID3、C4.5、CART)与随机森林

1. 什么是决策树? 

决策树(ID3、C4.5、CART)与随机森林

 根据一系列特征,最终决定结果的树,叫做决策树。

2. 如何构建决策树?

方案一:ID3算法

首先,说明一些重要公式:

  1. 信息量:决策树(ID3、C4.5、CART)与随机森林
  2. 信息熵:决策树(ID3、C4.5、CART)与随机森林
  3. 信息熵期望:决策树(ID3、C4.5、CART)与随机森林;s是未分裂前的节点,sj是按照属性 V 分裂后属于各属性值 j 的节点

信息熵是事物不确定性的度量标准。信息熵越大,不确定性越大,混乱程度越大。 

 算法流程:

(1)给定样本,先将特征离散化

比如:(这里年龄、性别叫做属性,青年、中年、老年、男、女叫做属性值)

年龄:青年(0)、中年(1)、老年(2)

性别:男(0)、女(1)

Label:买(1)、不买(0)

(2)从根节点开始分裂,选择哪个属性来分裂呢?

假设总体1000人,买:800,不买:200

按年龄分:青年:200,中年:400,老年:400

按性别分:男:600,女:400

1. 计算分裂前“总体”的信息熵期望

决策树(ID3、C4.5、CART)与随机森林

决策树(ID3、C4.5、CART)与随机森林

 2. 分别计算按年龄、性别分之后的信息熵期望:

a. 按年龄:

青年:200 ---》买:120,不买:80

中年:400 ---》买:320,不买:80

老年:400 ---》买:360,不买:40

 

决策树(ID3、C4.5、CART)与随机森林

决策树(ID3、C4.5、CART)与随机森林

决策树(ID3、C4.5、CART)与随机森林

决策树(ID3、C4.5、CART)与随机森林

 b. 按性别算,同理。

3. 计算信息增益:

决策树(ID3、C4.5、CART)与随机森林

s:分裂前的总体 ,A:属性

 选择信息增益大的属性,且已经选择的属性不能再作为分裂的标准

4. 假设选择了“年龄”,则现在是:

 

决策树(ID3、C4.5、CART)与随机森林

有3个小总体和1个候选属性

这时计算出 Es1(s1)、 Es2(s2)、Es3(s3) 以及 Es1(性别)、Es2(性别)、Es3(性别) ,比较 【Es1(s1) - Es1(性别)】、【Es2(s2) - Es2(性别)】、【Es3(s3) - Es3(性别)】的大小,取最大的来分裂。

5. 假设【Es1(s1) - Es1(性别)】最大,则 “青年” 继续以 “性别” 分裂,最后得:

决策树(ID3、C4.5、CART)与随机森林

买 / 不买:按少数服从多数原则 

(3)小结:

每次迭代都是计算出全局的小总统的 Esn(sn) 以及 Esn(An) ,哪个信息增益大,就选哪个小总体sn按An分裂。

(4)缺点:

  1. 贪婪性:倾向于选择属性值多的属性分裂
  2. 奥卡姆剃刀原理:尽量用较少的东西来完成较多的事情(已经选择的属性不再作为分裂标准)
  3. 对于连续值的特征,人为划分的不同,对结果影响很大

方案二:C4.5

算法与ID3只有一点不同

ID3:以信息增益Gain为判断依据

C4.5:以信息增益率GainRatio为判断依据

决策树(ID3、C4.5、CART)与随机森林

决策树(ID3、C4.5、CART)与随机森林

 


方案三:CART

CART:分类和回归数,且是二叉树,每个属性只有两个属性值

与ID3和C4.5不同的是,CART用过的属性可以继续使用,且CART可以用于分类和回归,ID3和C4.5仅用于分类。

 首先,说明一些重要公式:

  1. 基尼系数:决策树(ID3、C4.5、CART)与随机森林
  2. 基尼系数期望:决策树(ID3、C4.5、CART)与随机森林;A:属性,j:属性值,s:分裂前的总体

 一、CART做分类

算法步骤:

不断迭代计算各个“小总体”sn按照属性An分裂的Gini_Index,选择最小的属性分裂。

不同类型的属性如何计算:

1. 二值性属性

  s=10
属性:有无房 t1有房 t2无房
3 4
不买 0 3

决策树(ID3、C4.5、CART)与随机森林

决策树(ID3、C4.5、CART)与随机森林

决策树(ID3、C4.5、CART)与随机森林

 

 2. 多值型属性

婚姻状况
单身 已婚 离异

因为CART是二叉树,因此只能有两个属性值,于是有:

  s=10
  t1单身或已婚 t2离异
6 1
不买 2 1
  s=10
  t1单身或离异 t2已婚
3 4
不买 3 0
  s=10
  t1离异或已婚 t2单身
5 2
不买 1 2

每种分法得到一个Gini_Index,选择最小的Gini_Index的分法。 

3. 连续值型属性

类似于多值型属性,把属性值分成两个,只不过因为是连续值,因此不是采用组合的方式。

 以“收入”为例,将“收入”由小到大排序,对相邻的两个值取平均作为“分水岭”,得:

收入 60 70 75 85 90 95 100 120 125 220
分水岭 65 72 80 87 92 97 110 122 172

 按照不同的分水岭划分:

s=10
<=65 >65
...............

选择这其中最小的Gini_Index的划分情况。

二、CART做回归

 算法步骤:

不断迭代计算各个“小总体”sn按照属性An分裂的∑MSE(误差平方和),选择最小的属性分裂。

 不同类型的属性如何计算:

1. 二值型属性

s=10
R1在郊区 R2不在郊区
y1...yk y(k+1)...ym

计算R内的均值:

决策树(ID3、C4.5、CART)与随机森林

计算误差平方和∑MSE:

决策树(ID3、C4.5、CART)与随机森林

2. 多值型属性

像上面【CART做分类】的例子那样分情况,最后选取最小∑MSE的那个来划分。

3. 连续值型属性

像上面【CART做分类】的例子那样分情况,最后选取最小∑MSE的那个来划分。

最后结果:

决策树(ID3、C4.5、CART)与随机森林

结果为所属样本的平均值。

最后几层叶子节点肯定会有很多的连续值型属性,这样才能使结果分得更加细,有更多的 “y的均值” 出现,这样测试的时候,MSE才会更小。(最后几层类似于神经网络里的全连接层)


3. 决策树的停止条件

  1. Gain或者GainRatio的增长低于阈值,但这样就要调节阈值
  2. 测试集错误率或者误差平方和上升

4. 过拟合

决策树本身的问题就是容易过拟合,因为它会不断生长,寻找最大Gain或GainRatio 和 最小Gini_Index或∑MSE,特别是CART。

为了解决过拟合,有两种方案

方案一:剪枝

  1.  相邻的叶子结点,如果合并后的不纯度增加在允许范围,则合并
  2. 合并后,测试集错误率或误差平方和下降,则合并

缺点:反复尝试,较耗时间


方案二:随机森林

最后结果采取投票制度,少数服从多数。

1. bagging方法(有放回采样)

 

决策树(ID3、C4.5、CART)与随机森林

随机抽取训练集中的60%建一棵树,每个样本在每一次建树时被抽到的概率都一样,这也说明允许并行建树,共建N课树。最后用测试集验证。

2. boosting方法

10000个样本,将其分为训练集和测试集。

记每个样本从训练集中被抽为“训练”的概率为β(刚开始时,各个β相等)

(1)按照β抽出80%为训练,20%为预测试

(2)建一棵树,然后用预测试集测试,对于被分错的样本,加大它的β,目的是加大错误样本被抽为训练的概率

(3)重复(1)(2)建N棵树

(可选)【直到错误样本被预测正确为止,表现为全局β的和不变】

5. 总结 

ID3、C4.5仅用于分类,用过的属性不能再用

CART用于分类和回归,用过的属性还可以再用

 

欢迎转载,转载请标明出处。