22 决策树

## 1.使用决策树的场景
在应用决策树算法之前,必须满足以下要求:
(1)决策树算法是典型的有监督学习,因此需要预分类目标变量。必须提供一个训练数据集,该数据集为算法提供目标变量的值。
(2)训练数据集应当是丰富多样的,为算法提供涉及不同方面的记录类型,以适应未来的分类需求。以决策树学习为例,如果示例记录缺乏系统定义的子集,那么对这个子集进行分类和预测将会存在问题。
(3)目标属性类必须是离散的。也就是说,决策树分析不适用于目标变量为连续型值的情况。当然,目标变量的值必须能明确界定属于或不属于某个特定的类。
  如何衡量一致性,或者反过来,如何衡量异构性?我们将介绍测量叶节点纯度的许多方法,这产生了以下两个常用的构建决策树的算法:

- 分类和回归树(Classification And Regression Trees,CART)算法
- C4.5算法

## 2.CART(Classification And Regression Trees 分类和回归树)

  CART产生的决策树是严格的二叉树,每个决策节点都正好包含两个分支。CART将训练数据集中具有相同目标属性值的记录递归地划分为一些记录子集。对所有可用的变量和所有可能存在的划分值进行穷举搜索划分,CART算法按照以下标准(Kennedy等人的思想)选择最优的划分为每个决策节点构建树。
  对回归树用平方误差最小化准则,对分类树用基尼指数(Gini index)最小化准则,进行特征选择,生成二叉树。
  用$\Phi(s | t)$表示在节点 $t$ 处,候选划分 $s$ 优劣的衡量,其中:
$$
\Phi \left( s|t \right) =2P_LP_R\sum_{j=1}^{\#classes}{\left| P\left( j\mid t_L \right) -P\left( j\mid t_R \right) \right|}
$$
参数意义:
$$
t_L:节点t的左子节点
\\
t_R:节点t的右子节点
\\
P_L=\frac{t_L\text{的记录数}}{\text{训练集的记录数}}
\\
P_R=\frac{t_R\text{的记录数}}{\text{训练集的记录数}}
\\
P\left( j\mid t_L \right) =\frac{\text{在}t_L\text{处,}j\text{类的记录数}}{\text{节点}t\text{的记录数}}
\\
P\left( j\mid t_R \right) =\frac{\text{在}t_R\text{处,}j\text{类的记录数}}{\text{节点}t\text{的记录数}}
$$
在节点t处的所有可能划分中,最佳的划分是按照$\Phi(s | t)$方法得到的最大值。
(当然,CART算法的划分参数亦可由信息熵来算,下面说C4.5的时候会提到。)

## 3.划分的例子
有下列8个训练记录:

然后有以下的候选划分:

现在,我们又该如何确定最佳的划分方法呢?如上一点所说,我们计算$\Phi(s | t)$,可以发现,当$\Phi(s | t)$的主要成分2$P_{\mathrm{L}} P_{\mathrm{R}}$和$\sum_{j=1}^{\text { classes }}\left|P\left(j | t_{\mathrm{L}}\right)-P\left(j | t_{\mathrm{R}}\right)\right|$取值都最大的时候,$\Phi(s | t)$最大。
![1558614954692](assets/1558614954692.png)
  考虑$Q(s|t)=\sum_{j=1}^{\text { lichases }}\left|P\left(j | t_{\mathrm{L}}\right)-P\left(j | t_{\mathrm{R}}\right)\right|$。$Q(s|t)$这个分量什么时候最大呢?当每个类中,$P\left(j | t_{\mathrm{L}}\right)$与$P\left(j | t_{\mathrm{R}}\right)$之间的差距越大(目标变量的值)。$Q(s | t)$的值越大。换句话说,当目标变量的每个特定值的子节点的记录比例尽量不同时,这个分量的值就会最大化。当每个类的子节点是完全统一的(纯),最大值就会存在。$Q(s | t)$的理论最大值是k,其中k是目标变量的类的数量。由于我们的输出变量的信用风险需要两个值,低和高,那么这一部分的最大值为2。
  当左、右子节点涉及的记录的比例相等时,$P_L$和$P_R$的值最大,分量$2_L P_R$就会最大化。因此,$Q(s | t)$将倾向于平衡划分数据,划分成包含记录数大致相等的子节点。因此,最佳度量$Q(s | t)$要实现的目标是,每一个子节点中的记录都属于同一个类,并且子节点中包含记录的数量大致相等。$2_L P_R$的理论最大值是$2(0.5)(0.5)=0.5$。
  在这个表中,看最后的结果,我们选择第4种划分方法,得到下图的决策树:
![1558623151559](assets/1558623151559.png)
  从数据记录易得,2、7两个都是高风险,就已经完成了分类了。剩下的我们再次编译候选划分所有可能:
![1558623332304](assets/1558623332304.png)
再次选择,直到最后:
![1558623375006](assets/1558623375006.png)
  为了避免记忆训练集,还需要额外额剪枝处理。这个之后再提到。

## 4.信息熵
<font color=#718dac>①定义</font>
&emsp;&emsp;假设存在变量$X$,改变量包含$k$个可能的取值,且每个值出现的概率分别是 $p_{1}, p_{2} \dots p_{k}$。平均来看,每个符号发送形成符号流,用于表示被观察到的 $X$ 的值,被观察到 $X$ 值是什么?答案就是 $X$ 的信息熵,定义如下:
$$
H(X)=-\sum_{j} p_{j} \log _{2}\left(p_{j}\right)
$$
并且,规定 $0\, log(0)=0$。
<font color=#718dac>②推导意义</font>
&emsp;&emsp;这个公式怎么推导出来的呢?我们说,对某个出现概率为 $p$ 的时间,用比特衡量该事件包含的平均信息量为 $-log(p)$。例如,一个均匀的硬笔投掷产生的结果,其正反面出现的概率均为0.5,可以转换为 $-log_2 (0.5) = 1$ 比特,而到底是出现正面或反面,这取决于投掷的结果。如果一个事件涉及多个输出结果时,我们简单地对 $log_2(p_j)s$进行加权汇总,权重等于输出结果的概率。
<font color=#718dac>③概念</font>
&emsp;&emsp;假设我们有一个候选划分 $S$ ,将训练数据集 $T$ 分成若干子集,$T_{1}, \quad T_{2}, \cdots, \quad T_{K}$。这意味着信息需求可以用单个子集熵的加权和计算,如下所示:
$$
H_{\mathrm{s}}(T)=-\sum_{i=1}^{k} p_{i} H_{S}\left(T_{i}\right)
$$
&emsp;&emsp;其中,$P_i$代表子集 $i$ 中的记录比例。我们可以定义信息增益为$\operatorname{gain}(S)=H(T)-H_{s}(T)$,即根据候选划分 $S$ 由训练数据 $T$ 划分产生的信息增益。对于每个决策节点,C4.5选择具有最大信息增益的最优划分, $gain(S)$。
![1558614600517](assets/1558614600517.png)

## 5. C4.5算法
&emsp;&emsp;C4.5算法是ID3算法的扩展,也是得选择最优划分方法直到不能划分为止。与CART有以下差异:
- CART总是产生二叉树,而C4.5算法产生更多形状的数。
- 每个变量都默认有对应的一个独立的分支,这会导致一个节点有多个分支。
- C4.5算法测量节点是否属于用一个类与CART的方法完全不同。C4.5算法使用信息增益的概念来选择最优划分。
我们使用同一个例子:
![1558614600517](assets/1558614600517.png)
对各个变量进行划分,这次,可以不再拘泥于只有两个节点了,划分的候选数就少一点了。
![1558748183113](assets/1558748183113.png)
&emsp;&emsp;现在我们先计算出划分之前的信息熵。我们拥有的8个记录中的5个是低信用风险的,3个是高信用风险的,由公式得:
$$
H\left( T \right) =-\sum_j{p}_j\log _2\left( p_j \right) 
\\
=-\frac{5}{8}\log _2\left( \frac{5}{8} \right) -\frac{3}{8}\log _2\left( \frac{3}{8} \right) 
\\
=0.9544
$$
然后我们计算候选后的信息熵,看哪个划分结果能最大程度地减小信息熵。
&emsp;&emsp;对于候选划分1(存款),2个记录具有多的存款,3个记录有中等存款,3个记录具有少存款,因此,我们得出:$R_{high}=2/8$,$P_{medium}=3/8$,$P_{low}=3/8$。多存款的记录中,一个是低信用风险,一个是高信用风险,选择的记录以 0.5 的概率被分类为低信用风险。
&emsp;&emsp;因此,候选划分1中,多存款数据集的熵为:$-1/2log2(1/2)-1/2log2(1/2)=1$。
&emsp;&emsp;同理,候选划分1中的中等存款熵为:$-3 / 3 \log _{2}(3 / 3)-0 / 3 \log _{2}(0 / 3)=0$。前面说过了,按照惯例,我们定义$\log _{2}(0)=0$。
&emsp;&emsp;<font color=#718dac>如何理解信息熵为0的意义呢?</font>在工程应用中,信息是类似于信号的,而熵类似于噪声,所以存款等级为中等的记录的熵为零是有意义的,因为信号是完全透明的,没有噪音。如果客户的存款等级为中等水平,他或她有一个低信用风险,诚心度为100%。只要我们知道他们的存款等级为中等,则对这些客户的信用评级所需的信息量就是零。
&emsp;&emsp;接着我们在这个例子的计算,划分1中少存款的记录里,有1个低信用风险,2个高信用风险,少存款的信息熵为:$-1 / 3 \log _{2}(1 / 3)-2 / 3 \log _{2}(2 / 3)=0.9183$。
&emsp;&emsp;最优,我们利用这三个子集的熵我们得出的这个候选划分的信息熵:
                                      $H_{\text { savings }}(T)=(2 / 8)(1)+(3 / 8)(0)+(3 / 8)(0.9183)=0.5944$
&emsp;&emsp;然后,再算出它的信息增益:$H(T)-H_{\text { suings }}(T)=0.9544-0.5944=0.36$ bits
&emsp;&emsp;<font color=#718dac>现在,我们又如何理解这些数据的意义呢?</font>首先,$H(T)=0.9544$意味着,平均而言,需要 0.9544 比特(0或1)来传输数据集的8个客户的信用风险。$H_{saving}(T)=0.5944$意味着,将客户划分为 3 个子集,降低了传输客户信用风险状况的平均比特需求,现在为 0.5944 比特。熵值越小越好。熵值的减少可以被看作是信息增益,所以,我们已经通过使用存款属性的划分平均获得$H(T)-H_{\text {savings}}(T)=0.9544-0.5944=0.36$比特信息。我们将把该值和由其他候选划分获得的信息增益相比较,并选择具有最大信息增益的划分,作为根节点的最优划分。
&emsp;&emsp;接着,我们计算候选划分2(资产)的情况,同理得出:
                                   $\mathrm{H}_{\mathrm{assets}}(T)=(2 / 8)(0)+(4 / 8)(0.8113)+(2 / 8)(0)=0.4057$
就有:
                                  $\mathrm{H}(T)-H_{\mathrm{asess}}(T)=0.9544-0.4057=0.5487$
显然,信息熵也减小了,说明资产划分也是可取的。我们顺带一提,信息熵的算法也同样适用于CART。
&emsp;&emsp;按照这个步骤,我们最终把所有的划分候选的增益算出来,得到表:
![1558762101949](assets/1558762101949.png)
所以,我们按照信息增益的大小来进行第一次划分:
![1558762197954](assets/1558762197954.png)
资产少的2条记录都是高信用风险的,所以,我们可以不再划分了,它的可信度是100%。同样,资产高的2条记录都是低风险的,也不再划分。

&emsp;&emsp;针对节点A,我们接着进行看。
有划分前信息熵:
$$
H(A)=-\sum_{j} p_{j} \log _{2}\left(p_{j}\right)=-\frac{3}{4} \log _{2}\left(\frac{3}{4}\right)-\frac{1}{4} \log _{2}\left(\frac{1}{4}\right)=0.8113
$$
剩下可用于划分的分险信用记录:
![1558762611988](assets/1558762611988.png)
候选划分:
![1558762634969](assets/1558762634969.png)
这个条件下,算出:$H(A)-H_{\mathrm{assets}}(A)=0.8113-0.0=0.8113$是决策点A的最大信息增益。就可以接真正的划分了:
![1558762999278](assets/1558762999278.png)

&emsp;&emsp;可以看出,C4.5的树比CART的树要有一个更大的广度,CART的树有更广的深度。同样,完成之后,需要用修剪法进行剪枝处理。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值