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

1. 什么是决策树? 

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

2. 如何构建决策树?

方案一:ID3算法

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

  1. 信息量:
  2. 信息熵:
  3. 信息熵期望:;s是未分裂前的节点,sj是按照属性 V 分裂后属于各属性值 j 的节点

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

 算法流程:

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

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

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

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

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

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

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

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

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

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

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

a. 按年龄:

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

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

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

 

 b. 按性别算,同理。

3. 计算信息增益:

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

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

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

 

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

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

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

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

(3)小结:

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

(4)缺点:

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

方案二:C4.5

算法与ID3只有一点不同

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

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

 


方案三:CART

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

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

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

  1. 基尼系数:
  2. 基尼系数期望:;A:属性,j:属性值,s:分裂前的总体

 一、CART做分类

算法步骤:

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

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

1. 二值性属性

 s=10
属性:有无房t1有房t2无房
34
不买03

 

 2. 多值型属性

婚姻状况
单身已婚离异

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

 s=10
 t1单身或已婚t2离异
61
不买21
 s=10
 t1单身或离异t2已婚
34
不买30
 s=10
 t1离异或已婚t2单身
52
不买12

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

3. 连续值型属性

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

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

收入607075859095100120125220
分水岭657280879297110122172

 按照不同的分水岭划分:

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

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

二、CART做回归

 算法步骤:

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

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

1. 二值型属性

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

计算R内的均值:

计算误差平方和∑MSE:

2. 多值型属性

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

3. 连续值型属性

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

最后结果:

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

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


3. 决策树的停止条件

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

4. 过拟合

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

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

方案一:剪枝

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

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


方案二:随机森林

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

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

 

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

2. boosting方法

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

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

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

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

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

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

5. 总结 

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

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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值