决策树

介绍

决策树(DecisionTree)是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干,故称决策树。

常见的决策树算法有ID3C4.5以及CART。但在讨论这些之前,我们先了解一下的概念。

这个概念最早起源于物理学,在物理学中是用来度量热力学系统的无序程度;而在信息学里,熵则是对不确定性的度量。1948年,香农引入了信息熵,将其定义为离散随机事件出现的概率。一个系统越是有序,信息熵越低,反之一个系统越是混乱,它的信息熵就越高。

假设一个随机变量 X X X 的取值为 X = { x 1 , x 2 , . . . , x n } X = \{x_1, x_2, ..., x_n\} X={x1,x2,...,xn},每一种值取到的概率分别为 { p 1 , p 2 , . . . , p n } \{p_1, p_2, ..., p_n\} {p1,p2,...,pn},那么熵的定义为 H ( X ) = − ∑ i = 1 n p i l o g 2 p i H(X) = - \sum_{i=1}^n p_i log_2 p_i H(X)=i=1npilog2pi

对于分类模型来说,类别 C C C 是变量,它的取值为 C 1 , C 2 , . . . , C n C_1, C_2, ..., C_n C1,C2,...,Cn,而每个类别出现的概率分别为 P ( C 1 ) , P ( C 2 ) , . . . , P ( C n ) P(C_1), P(C_2), ..., P(C_n) P(C1),P(C2),...,P(Cn), 这里 n 是类别的总数,此时分类模型的熵就可以表示为 H ( C ) = − ∑ i = 1 n P ( C i ) l o g 2 P ( C n ) H(C) = -\sum_{i=1}^n P(C_i) log_2 P(C_n) H(C)=i=1nP(Ci)log2P(Cn)

这是一家高尔夫球俱乐部的历史数据,里面记录了不同天气状况用户来打高尔夫球的历史记录。我们要做的是通过构建决策树来预测用户是否会来打高尔夫球。

日期天气温度湿度风速活动
1炎热取消
2炎热取消
3炎热进行
4适中进行
5寒冷正常进行
6寒冷正常取消
7寒冷正常进行
8适中取消
9寒冷正常进行
10适中正常进行
11适中正常进行
12适中进行
13炎热正常进行
14适中取消

ID3

ID3 (Iterative Dichotomiser 3),即迭代二叉树 3代。核心思想就是以信息增益来度量属性,优先选择信息增益最大的属性进行分裂。

计算信息熵

数据集中共14个样本,活动 (Label) 包含9个正例和5个负例,当前属性的信息熵计算如下
E n t r o p y ( S ) = − 9 14 l o g 2 9 14 − 5 14 l o g 2 5 14 = 0.94 Entropy(S) = -\frac{9}{14}log_2\frac{9}{14} - \frac{5}{14}log_2\frac{5}{14} = 0.94 Entropy(S)=149log2149145log2145=0.94

天气 为例,各分支的信息熵计算如下

E n t r o p y ( 晴 ) = − 2 5 l o g 2 2 5 − 3 5 l o g 2 3 5 = 0.97 Entropy(晴) = -\frac{2}{5}log_2\frac{2}{5} - \frac{3}{5}log_2\frac{3}{5} = 0.97 Entropy()=52log25253log253=0.97
E n t r o p y ( 阴 ) = − 4 4 l o g 2 4 4 − 0 ⋅ l o g 2 ⋅ 0 = 0 Entropy(阴) = -\frac{4}{4}log_2\frac{4}{4} - 0·log_2·0 = 0 Entropy()=44log2440log20=0
E n t r o p y ( 雨 ) = − 3 5 l o g 2 3 5 − 2 5 l o g 2 2 5 = 0.97 Entropy(雨) = -\frac{3}{5}log_2\frac{3}{5} - \frac{2}{5}log_2\frac{2}{5} = 0.97 Entropy()=53log25352log252=0.97

天气 的信息熵
E n t r o p y ( 天 气 ) = 5 14 ⋅ 0.97 + 4 14 ⋅ 0 + 5 14 ⋅ 0.97 = 0.694 Entropy(天气) = \frac{5}{14}·0.97 + \frac{4}{14}·0 + \frac{5}{14}·0.97 = 0.694 Entropy()=1450.97+1440+1450.97=0.694

同理,其他几个属性的信息熵

E n t r o p y ( 温 度 ) = 0.911 Entropy(温度) = 0.911 Entropy()=0.911
E n t r o p y ( 湿 度 ) = 0.789 Entropy(湿度) = 0.789 Entropy(湿)=0.789
E n t r o p y ( 风 速 ) = 0.892 Entropy(风速) = 0.892 Entropy()=0.892

计算信息增益

信息增益的计算公式
I G ( S ∣ T ) = E n t r o p y ( S ) − ∑ v a l u e ( T ) ∣ S v ∣ S E n t r o p y ( S v ) IG(S|T) = Entropy(S) - \sum_{value(T)} \frac{|S_v|}{S} Entropy(S_v) IG(ST)=Entropy(S)value(T)SSvEntropy(Sv)

I G ( 天 气 ) = E n t r o p y ( S ) − E n t r o p y ( 天 气 ) = 0.94 − 0.694 = 0.246 IG(天气) = Entropy(S) - Entropy(天气) = 0.94 - 0.694 = 0.246 IG()=Entropy(S)Entropy()=0.940.694=0.246
I G ( 温 度 ) = E n t r o p y ( S ) − E n t r o p y ( 温 度 ) = 0.94 − 0.911 = 0.029 IG(温度) = Entropy(S) - Entropy(温度) = 0.94 - 0.911 = 0.029 IG()=Entropy(S)Entropy()=0.940.911=0.029
I G ( 湿 度 ) = E n t r o p y ( S ) − E n t r o p y ( 湿 度 ) = 0.94 − 0.789 = 0.15 IG(湿度) = Entropy(S) - Entropy(湿度) = 0.94 - 0.789 = 0.15 IG(湿)=Entropy(S)Entropy(湿)=0.940.789=0.15
I G ( 风 速 ) = E n t r o p y ( S ) − E n t r o p y ( 风 速 ) = 0.94 − 0.892 = 0.048 IG(风速) = Entropy(S) - Entropy(风速) = 0.94 - 0.892 = 0.048 IG()=Entropy(S)Entropy()=0.940.892=0.048

在决策树的每一个非叶子结点划分之前,先计算每一个属性所带来的信息增益,优先选择最大信息增益的属性来划分。信息增益越大,区分样本的能力越强,越具有代表性。

C4.5

假设,每个属性中的每种类别都只有一个样本,那属性的信息熵就等于零,继续使用信息增益就无法选择出有效分类特征。所以,C4.5在ID3的基础上做出了改进,使用信息增益率对属性进行分裂,以减少信息增益容易选择特征值多的属性的缺点。

计算属性分裂信息度量

H ( 天 气 ) = − 5 14 l o g 2 5 14 − 5 14 l o g 2 5 14 − 4 14 l o g 2 4 14 = 1.577 H(天气) = -\frac{5}{14}log_2\frac{5}{14} -\frac{5}{14}log_2\frac{5}{14} -\frac{4}{14}log_2\frac{4}{14} = 1.577 H()=145log2145145log2145144log2144=1.577
H ( 温 度 ) = − 4 14 l o g 2 4 14 − 6 14 l o g 2 6 14 − 4 14 l o g 2 4 14 = 1.556 H(温度) = -\frac{4}{14}log_2\frac{4}{14} -\frac{6}{14}log_2\frac{6}{14} -\frac{4}{14}log_2\frac{4}{14} = 1.556 H()=144log2144146log2146144log2144=1.556
H ( 湿 度 ) = − 7 14 l o g 2 7 14 − 7 14 l o g 2 7 14 = 1.0 H(湿度) = -\frac{7}{14}log_2\frac{7}{14} -\frac{7}{14}log_2\frac{7}{14} = 1.0 H(湿)=147log2147147log2147=1.0
H ( 风 速 ) = − 6 14 l o g 2 6 14 − 8 14 l o g 2 8 14 = 0.048 H(风速) = -\frac{6}{14}log_2\frac{6}{14} -\frac{8}{14}log_2\frac{8}{14} = 0.048 H()=146log2146148log2148=0.048

计算信息增益率

I G R ( 天 气 ) = I G ( 天 气 ) / H ( 天 气 ) = 0.246 / 1.577 = 0.155 IGR(天气) = IG(天气) / H(天气) = 0.246 / 1.577 = 0.155 IGR()=IG()/H()=0.246/1.577=0.155
I G R ( 温 度 ) = I G ( 温 度 ) / H ( 温 度 ) = 0.029 / 1.556 = 0.0186 IGR(温度) = IG(温度) / H(温度) = 0.029 / 1.556 = 0.0186 IGR()=IG()/H()=0.029/1.556=0.0186
I G R ( 湿 度 ) = I G ( 湿 度 ) / H ( 湿 度 ) = 0.151 / 1.0 = 0.151 IGR(湿度) = IG(湿度) / H(湿度) = 0.151 / 1.0 = 0.151 IGR(湿)=IG(湿)/H(湿)=0.151/1.0=0.151
I G R ( 风 速 ) = I G ( 风 速 ) / H ( 风 速 ) = 0.048 / 0.985 = 0.048 IGR(风速) = IG(风速) / H(风速) = 0.048 / 0.985 = 0.048 IGR()=IG()/H()=0.048/0.985=0.048

C4.5有效克服了ID3中存在的多值属性的问题,计算每一个属性所带来的信息增益率,优先选择最大信息增益率的属性来划分。信息增益率越大,区分样本的能力越强,越具有代表性。

CART

无论是 ID3 还是 C4.5,都是基于熵的模型,里面会涉及到大量的对数运算,我们能否在此基础上进行简化,节省运算时间?于是就有了 GINI指数

GINI指数公式
G I N I ( D ) = ∑ i = 1 k p k ⋅ ( 1 − p k ) = 1 − ∑ i = 1 k p k 2 GINI(D) = \sum_{i=1}^k p_k·(1 - p_k) = 1 - \sum_{i=1}^k p_k^2 GINI(D)=i=1kpk(1pk)=1i=1kpk2

基尼指数的意义是从数据集D中随机抽取样本类别标识不一致的概率,基尼指数越小,数据集的纯度越高。

天气 为例,各分支的GINI指数计算如下

G i n i ( 晴 ) = 1 − ( 2 5 2 + 3 5 2 ) = 0.48 Gini(晴) = 1 - (\frac{2}{5}^2 + \frac{3}{5}^2) = 0.48 Gini()=1(522+532)=0.48
G i n i ( 阴 ) = 1 − ( 4 4 2 + 0 0 2 ) = 0 Gini(阴) = 1 - (\frac{4}{4}^2 + \frac{0}{0}^2) = 0 Gini()=1(442+002)=0
G i n i ( 雨 ) = 1 − ( 3 5 2 + 2 5 2 ) = 0.48 Gini(雨) = 1 - (\frac{3}{5}^2 + \frac{2}{5}^2) = 0.48 Gini()=1(532+522)=0.48

天气 的GINI指数
G i n i ( 天 气 ) = 5 14 ⋅ 0.48 + 4 14 ⋅ 0 + 5 14 ⋅ 0.48 = 0.342 Gini(天气) = \frac{5}{14}·0.48 + \frac{4}{14}·0 + \frac{5}{14}·0.48 = 0.342 Gini()=1450.48+1440+1450.48=0.342

同理,其他几个属性的GINI指数

G i n i ( 温 度 ) = 0.439 Gini(温度) = 0.439 Gini()=0.439
G i n i ( 湿 度 ) = 0.367 Gini(湿度) = 0.367 Gini(湿)=0.367
G i n i ( 风 速 ) = 0.428 Gini(风速) = 0.428 Gini()=0.428

Gini系数越小,属性的纯度越高。

剪枝

决策树的基本剪枝策略有 预剪枝 (Pre-Pruning)后剪枝 (Post-Pruning) 。首先将数据集划分成训练集和验证集,训练集用来决定树生成过程中每个结点划分所选择的属性;验证集在预剪枝中用于决定该结点是否有必要依据该属性进行展开,在后剪枝中用于判断该结点是否需要进行剪枝。

预剪枝

在每一次实际对结点进行划分之前,先采用验证集的数据来验证如果划分是否能提高划分的准确性。如果不能,就把结点标记为叶结点并退出进一步划分;如果可以就继续递归生成节点。

后剪枝

后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来泛化性能提升,则将该子树替换为叶结点。

优缺点对比

算法支持模型树结构特征选择连续值处理缺失值处理剪枝分类变量样本量
ID3分类多叉树信息增益不支持不支持不支持分类变量已退出舞台
C4.5分类多叉树信息增益率支持支持支持连续变量和分类变量小样本
CART分类、回归二叉树GINI系数/均方差支持支持支持连续变量和分类变量大样本
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值