八、决策树

1 原理介绍

决策树是一种自上而下,对样本数据进行树形分类的过程,由结点和有向边组成。结点分为内部结点和叶结点,其中每个内部结点表示一个特征或属性,叶结点表示类别。从顶部根结点开始,所有样本聚在一起,经过根结点的划分 ,样本被分到不同的子结点中,再根据子结点的特征进一步划分,直至所有样本都被归到某一个类别(即叶结点)中。

决策树作为最基础、最常见的有监督学习模型,常被用于分类问题和回归问题,因此,决策树是一种基本的分类与回归方法,在市场营销和生物医药等领域尤其受欢迎,主要因为树形结构与销售 、诊断等场景下的决策过程十分相似。

将决策树应用集成学习的思想,就可以得到随机森林、梯度提升决策树等模型。

决策树通常有三个步骤:特征选择、决策树的生成、决策树的修剪。

2 特征的选择准则

一般我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”(purity)越来越高。

2.1 最大信息增益 —— ID3

“信息熵”(information entropy) 是度量样本集合纯度最常用的一种指标,假定当前样本集合 D D D 共包含 K K K 种类别,第 k k k 种类别的样本所占的比例为 p k p_k pk ( k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K),则数据集 D D D 的信息熵为:

H ( D ) = − ∑ k = 1 K p k log ⁡ 2 p k H(D)=-\sum_{k=1}^Kp_k\log_2p_k H(D)=k=1Kpklog2pk

信息熵越小,则 D D D 的纯度越高。

下面,定义某个特征 A A A 对于数据集 D D D经验条件熵 H ( D ∣ A ) H(D|A) H(DA),假设特征 A A A 共有 V V V 个可能的取值,令 D v D_v Dv 表示 D D D 中特征 A A A 取第 v v v 个值的样本子集, D v k D_{vk} Dvk D v D_v Dv 中属于第 k k k 类的样本子集,则:

H ( D ∣ A ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ H ( D v ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ ( − ∑ k = 1 K ∣ D v k ∣ ∣ D v ∣ log ⁡ 2 ∣ D v k ∣ ∣ D v ∣ ) \begin{aligned} H(D|A)&=\sum_{v=1}^{V}\frac{|D_v|}{|D|}H(D_v)\\ &=\sum_{v=1}^{V}\frac{|D_v|}{|D|}\left(-\sum_{k=1}^K\frac{|D_{vk}|}{|D_{v}|}\log_2\frac{|D_{vk}|}{|D_{v}|}\right) \end{aligned} H(DA)=v=1VDDvH(Dv)=v=1VDDv(k=1KDvDvklog2DvDvk)

特征 A A A 对于数据集 D D D“信息增益”(information gain) 就表示为:

G a i n ( D , A ) = H ( D ) − H ( D ∣ A ) Gain(D,A)=H(D)-H(D|A) Gain(D,A)=H(D)H(DA)

一般而言,信息增益越大,就意味着用特征 A A A 来进行划分所获得的“纯度提升”越大。因此,我们可以使用信息增益来进行决策树划分属性的选择:

A ∗ = arg ⁡ max ⁡ A ∈ A G a i n ( D , A ) A_* = \arg\max_{A\in{\Bbb A}}Gain(D,A) A=argAAmaxGain(D,A)

著名的 ID3 决策树学习算法就是以信息增益为准则来选择划分属性的。ID3中的 ID 是 Iterative Dichotomiser(迭代二分器)的简称。

2.2 最大信息增益率 —— C4.5

最大信息增益准则对取值数量较多的属性有所偏好,为了减少这种偏好可能带来的不利影响,著名的 C4.5 决策树算法改用 “增益率”(gain ratio) 来选择划分属性,增益率的定义为:

G a i n R a t i o ( D , A ) = G a i n ( D , A ) H A ( D ) GainRatio(D,A)=\frac{Gain(D,A)}{H_A(D)} GainRatio(D,A)=HA(D)Gain(D,A)

其中, H A ( D ) H_A(D) HA(D) 称为数据集 D D D 关于特征 A A A取值熵/固有值(intrinsic value)

H A ( D ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log ⁡ 2 ∣ D v ∣ ∣ D ∣ H_A(D)=-\sum_{v=1}^V\frac{|D_{v}|}{|D|}\log_2\frac{|D_{v}|}{|D|} HA(D)=v=1VDDvlog2DDv

属性 A A A 的取值数目越多(即 V V V 越大),则 H A ( D ) H_A(D) HA(D) 的值通常会越大。

增益率准则对可能取值数目较少的属性有所偏好,因此,C4.5 算法并不是直接选择增益率最大的属性,而是使用了一个启发式方法:先从候选属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的属性。

2.3 最大基尼(Gini)指数 —— CART

Gini描述的也是数据集的纯度,数据集 D D D 的基尼值定义为:

G i n i ( D ) = ∑ k = 1 K ∑ k ′ ≠ k p k p k ′ = 1 − ∑ k = 1 K p k 2 \begin{aligned} Gini(D)&=\sum_{k=1}^K \sum_{k'\neq k} p_k p_{k'}\\ &=1-\sum_{k=1}^K p_k^2 \end{aligned} Gini(D)=k=1Kk=kpkpk=1k=1Kpk2

直观来说, G i n i ( D ) Gini(D) Gini(D) 反映了从数据集 D D D 中随机抽取两个样本,其类别标记不一致的概率,因此, G i n i ( D ) Gini(D) Gini(D) 越小,则数据集 D D D 的纯度越高。

属性 A A A 的的基尼指数定义为:

G i n i I n d e x ( D ∣ A ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) GiniIndex(D|A)=\sum_{v=1}^V\frac{|D_{v}|}{|D|}Gini(D_v) GiniIndex(DA)=v=1VDDvGini(Dv)

CART在每一次迭代中,会在候选属性集合 A {\Bbb A} A 中,选择使得划分后基尼指数最小的属性作为最优的划分属性,即:

A ∗ = arg ⁡ min ⁡ A ∈ A G i n i I n d e x ( D ∣ A ) A_* = \arg\min_{A\in{\Bbb A}}GiniIndex(D|A) A=argAAminGiniIndex(DA)

CART 与 ID3、C4.5不同的是,CART是一棵二叉树,采用二元切割法,每一步将数据按照属性 A A A 的取值分成两份,分别进入左右子树。

2.4 三种方法的总结

(1)ID3 采用信息增益作为评价标准,会倾向于取值较多的特征。因为信息增益反映的是给定条件之后不确定性减少的程度,特征取值越多就以为着确定性越高,即条件熵越小,信息增益越大。C4.5实际上是对ID3的优化,通过引入信息增益比,一定程度上对取值较多的特征进行惩罚,避免ID3出现过拟合的特征,提升决策树的泛化能力。

(2)从样本类别角度,ID3 只能处理离散型变量,而 C4.5 和 CART 都可以处理连续型变量。

C4.5处理连续型变量时,通过对数据排序之后找到类别不同的分割线作为切分点,根据切分点把连续属性转换为布尔值,从而将连续型变量转换为多个取值区间的离散型变量。

CART 因为在构建时每次都会对特征进行二值划分,因此可以很好地适用于连续型变量。

(3)从应用角度,ID3 和 C4.5 只能用于分类问题,而 CART (Classification and Regression Tree, 分类回归树)不仅可以用于分类,还可以应用于回归问题(回归树使用最小平方误差准则)。

(4)从实现细节来看,这三种决策树还有一些不同。

(a)ID3 对样本特征缺失值比较敏感,而 C4.5 与 CART 可以对缺失值进行不同方式的处理

(b)ID3 和 C4.5 可以在每个阶段产生多个分叉,且每个特征在层级之间不会复用,而 CART 的每个结点只会产生两个分支,因此最后形成的是一棵二叉树,且每个特征可以被重复使用。

(c)ID3 和 C4.5 通过剪枝来权衡树的准确性与泛化能力,而 CART 直接利用全部数据发现所有可能的树结构进行对比。

3 剪枝处理

剪枝(pruning)是决策树算法处理“过拟合”的主要手段。决策树剪枝的基本策略有 “预剪枝”(Pre-Pruning)“后剪枝”(Post-Pruning)

  • 预剪枝是指在决策树生成的过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能的提升,则停止树的增长。
  • 后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若该结点对应的子树替换为叶结点能带来决策树泛化能力提升,则将该子树替换为叶结点。

3.1 预剪枝

预剪枝对于何时停止决策树的生长有以下几种方法:

  1. 当树到达一定深度的时候,停止树的生长
  2. 当到达当前结点的样本数量小于某个阈值的时候,停止树的生长
  3. 计算每次分裂对测试集的准确度提升, 当小于某个阈值的时候,不再继续扩展

预剪枝具有思想直接、算法简单、效率高等特点,适合解决大规模问题,但如何准确地估计何时停止树的生长(即上述方法中的深度或阈值),针对不同的问题会有很大的差别,需要有一定的经验来判断。且预剪枝存在一定局限性,高欠拟合的风险,虽然当前的划分会导致测试集准确率降低,但在之后的划分中,准确率可能会显著提升。

3.2 后剪枝

相比于预剪枝,后剪枝方法通常可以得到泛化能力更强的决策树,但时间开销会更大。

常见的后剪枝方法包括如下几种,这些方法关注的优化角度不同,各有利弊

  • 错误率降低剪枝( Reduced Error Pruning, REP )
  • 悲观剪枝( Pess mistic Error Pruning, PEP )
  • 代价复杂度剪枝( Cost Complexity Pruning , CCP )
  • 最小误差剪枝( Minimum Error Pruning , MEP )
  • CVP ( Critical Value Pruning )
  • OP ( Optimal Pruning)
3.2.1 代价复杂度剪枝 CCP

CART 使用的 代价复杂度剪枝 CCP 是一种比较著名的剪枝方法。

代价复杂/度剪枝主要包含以下两个步骤:

( 1 )从完整决策树 T 0 T_0 T0 开始,生成一个子树序列 { T 0 , T 1 , . . . , T n } \{T_0,T_1,...,T_n\} {T0,T1,...,Tn},其中, T i + 1 T_{i+1} Ti+1 T i T_{i} Ti 生成,是通过裁剪 T i T_{i} Ti 中关于训练数据集合误差增加最小的分支得到的

具体地,当一棵树 T i T_i Ti 在结点 t t t 处剪枝时,它的误差增加可以用 R ( t ) − R ( T i ) R(t)-R(T_i) R(t)R(Ti) 表示,其中 R ( t ) R(t) R(t) 表示进行剪枝之后的该结点误差, R ( T t ) R(T_t) R(Tt) 表示未进行剪枝时子树 T t T_{t} Tt 的误差。考虑到树的复杂性因素,我们用 ∣ L ( T t ) ∣ |L(T_t)| L(Tt) 表示子树 T t T_{t} Tt 的叶子结点个数,则树在结点 t t t 处剪枝后的 误差增加率

α = R ( t ) − R ( T i ) ∣ L ( T i ) ∣ − 1 \alpha = \frac{R(t)-R(T_i)}{|L(T_i)|-1} α=L(Ti)1R(t)R(Ti)

R ( t ) R(t) R(t) 表示叶子节点 t t t 的误差代价:

R ( t ) = r ( t ) p ( t ) R(t)=r(t) p(t) R(t)=r(t)p(t)

  • r ( t ) r(t) r(t)为节点的错误率
  • p ( t ) p(t) p(t)为节点数据量的占比

R ( T i ) R(T_i) R(Ti) 表示子树的误差代价

R ( T i ) = ∑ j T r j p j R(T_i)=\sum_j^Tr_j p_j R(Ti)=jTrjpj

  • r j r_j rj 为叶子节点 j j j 的错误率
  • p j p_j pj 为节点 j j j 数据节点的占比

我们每步选择 α \alpha α 最小的结点进行相应剪枝。

因此,由 T i T_{i} Ti 生成 T i + 1 T_{i+1} Ti+1 的具体步骤为:

(a)计算所有非叶子节点的误差增加率
(b)选择误差增加率值最小的非叶子节点(若多个非叶子节点具有相同小的误差率增益值,则选择节点数最多的非叶子节点)
(c)对 T i T_{i} Ti 进行剪枝

( 2 )在子树序列中,根据真实误差选择最佳的决策树。

代价复杂度剪枝使用交叉验证策略时,不需要测试数据集,精度与REP 差不多,但形成的树复杂度小。而从算法复杂度角度,由于生成子树序列的时复杂度与原始决策树的非叶子结点个数呈二次关系,导致算法相比 REP、PEP、MEP 等线性复杂度的后剪枝方法,运行时间开销更大。

3.2.2 剪枝总结

剪枝过程在决策树模型中占据着极真重要的地位。有很多研究表明剪枝比树的生成过程更为关键。对于不同划分标准生成的过拟合决策树,在经过剪枝之后都能保留最重要的属性划分,因此最终的性能差距并不大。

理解剪枝方法的理论,在实际应用中要根据不同的数据类型、规模,决定使用何种决策树以及对应的剪枝策略,灵活变通,找到最优选择。

4 连续值处理

由于连续属性的可取值数目不再有限,因此,不能直接根据连续属性的可取值来对结点进行划分,此时,连续属性离散化技术可派上用场,最简单的策略就是采用 二分法(bi-partition) 对连续属性进行处理,这也是 C4.5 决策树算法中采用的机制。

给定数据集 D D D 和连续属性 a a a,假定 a a a 在数据集 D D D 上出现了 n n n 个不同的取值,将这些值从小到大进行排序,记为 { a 1 , a 2 , . . . , a n } \{a^1,a^2,...,a^n\} {a1,a2,...,an},基于划分点 t t t 可将 D D D 分为子集 D t − D_t^- Dt D t + D_t^+ Dt+,其中 D t − D_t^- Dt 包含那些在属性 a a a 上取值小于 t t t 的样本, D t + D_t^+ Dt+ 包含那些在属性 a a a 上取值大于 t t t 的样本。对连续属性 a a a,我们就可考察包含 n − 1 n-1 n1 个元素的候选划分点集合

T a = { a i + a i + 1 2 ∣ 1 ≤ n − 1 } T_a=\{\frac{a^i+a^{i+1}}{2}|1\leq n-1\} Ta={2ai+ai+11n1}

即把区间 [ a i , a i + 1 ) [a^i,a^{i+1}) [ai,ai+1) 的中位点 a i + a i + 1 2 \frac{a^i+a^{i+1}}{2} 2ai+ai+1 作为候选划分点,然后,我们就可以像离散属性值一样来考察这些划分点,选取最优的划分点进行样本集合的划分,如:

G a i n ( D , a ) = max ⁡ t ∈ T a G a i n ( D , a , t ) = max ⁡ t ∈ T a H ( D ) − ∑ λ ∈ { − , + } ∣ D t λ ∣ ∣ D ∣ H ( D t λ ) \begin{aligned} Gain(D,a)&=\max_{t\in T_a}Gain(D,a,t)\\ &=\max_{t\in T_a}H(D)-\sum_{\lambda \in \{-,+\}}\frac{|D_t^{\lambda}|}{|D|}H(D_t^\lambda) \end{aligned} Gain(D,a)=tTamaxGain(D,a,t)=tTamaxH(D)λ{,+}DDtλH(Dtλ)

其中, G a i n ( D , a ) Gain(D,a) Gain(D,a) 是样本集 D D D 基于划分点 t t t 二分后的信息增益,于是,我们就可以选择使 G a i n ( D , a , t ) Gain(D,a,t) Gain(D,a,t) 最大化的划分点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值