《机器学习》笔记--决策树

本文详细介绍了决策树的学习过程,包括基本流程、划分选择中的信息增益和基尼指数,以及剪枝处理的预剪枝和后剪枝策略。信息增益和基尼指数用于衡量划分属性的效果,剪枝处理则用于防止过拟合,提高决策树的泛化能力。此外,还讨论了连续属性处理和缺失值处理的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

决策树

基本流程

一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶结点,叶结点对应于决策结果,其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集,从根结点到每个叶结点的路径对应了一个判定测试序列.决策树学习的目的是了产生一棵泛化能力强,即处理未见示例能力强的决策树,其基本流程遵循简单且直观的“分而治之”(divide-and-conquer)策略。

在这里插入图片描述

决策树基本算法中,有三种情形会导致递归返回:

  • 当前结点包含的样本全属于同一类别,无需划分。
  • 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分

把当前结点标记为叶结点,并将其类别设定为样本最多的类别

  • 当前结点包含的样本集合为空,不能划分

把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别。

划分选择

一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的“纯度”(purity)越来越高.

信息增益(ID3)

“信息熵”(information entropy)是度量样本集合纯度最常用的一种指标.

假定当前样本集合D中第k类样本所占的比例为 p k ( k = 1 , 2 , . . . , ∣ Y ∣ ) p_k(k = 1,2,...,|Y|) pk(k=1,2,...,Y),则D的信息熵定义为
Ent ⁡ ( D ) = − ∑ k = 1 ∣ Y ∣ p k log ⁡ 2 p k \operatorname{Ent}(D)=-\sum_{k=1}^{|\mathcal{Y}|} p_{k} \log _{2} p_{k} Ent(D)=k=1Ypklog2pk
Ent ⁡ ( D ) \operatorname{Ent}(D) Ent(D)的值越小则D的纯度越高。

Ent(D)的最小值为0,最大值为 l o g 2 ∣ Y ∣ log_2|\mathcal{Y}| log2Y

证明:

最小值:某个 p k p_k pk为1其余为0时。

最大值可以引入带约束的拉格朗日乘子求导得到。

假定离散属性a有V个可能的取值 { a 1 , a 2 , … , a V } \left\{a^{1}, a^{2}, \ldots, a^{V}\right\} {a1,a2,,aV},若使用a来对样本集D进行划分,则会产生V个分支结点,其中第v个分支结点包含了D中所有在属性a上取值为 a v a^v av的样本,记为 D v D^v Dv可根据上式计算出 D v D^v Dv的信息熵。由于不同的分支结点所包含的样本数不同,给分支结点赋予权重 ∣ D v ∣ / ∣ D ∣ \left|D^{v}\right| /|D| Dv/D,即样本数越多的分支结点影响越大,于是可计算出属性a对样本集D进行划分所获得的“信息增益”。
Gain ⁡ ( D , a ) = Ent ⁡ ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Ent ⁡ ( D v ) \operatorname{Gain}(D, a)=\operatorname{Ent}(D)-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Ent}\left(D^{v}\right) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)
一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的“纯度提升”越大.因此,我们可用信息增益来进行决策树的划分属性选择 a ∗ = arg ⁡ max ⁡ a ∈ A Gain ⁡ ( D , a ) a_{*}=\underset{a \in A}{\arg \max } \operatorname{Gain}(D, a) a=aAargmaxGain(D,a)

###增益率(C4.5)

实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,著名的C4.5决策树算法[Quinlan,1993]不直接使用信息增益,而是使用“增益率”(gain ratio)来选择最优划分属性.采用与式(4.2)相同的符号表示.增益率定义为
( D , a ) = Gain ⁡ ( D , a ) IV ⁡ ( a ) (D, a)=\frac{\operatorname{Gain}(D, a)}{\operatorname{IV}(a)} (D,a)=IV(a)Gain(D,a)
其中
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log ⁡ 2 ∣ D v ∣ ∣ D ∣ \mathrm{IV}(a)=-\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \log _{2} \frac{\left|D^{v}\right|}{|D|} IV(a)=v=1VDDvlog2DDv
称为属性a的“固有值”。

属性a的可能取值数目越多(即V越大),则IV(a)的值通常会越大。

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

基尼指数(CART)

CART决策树使用“基尼指数”来选择划分属性。数据集D的纯度可用基尼值来度量:
Gini ⁡ ( D ) = ∑ k = 1 ∣ Y ∣ ∑ k ′ ≠ k p k p k ′ = 1 − ∑ k = 1 ∣ Y ∣ p k 2 \begin{aligned} \operatorname{Gini}(D) &=\sum_{k=1}^{|\mathcal{Y}|} \sum_{k^{\prime} \neq k} p_{k} p_{k^{\prime}} \\ &=1-\sum_{k=1}^{|\mathcal{Y}|} p_{k}^{2} \end{aligned} Gini(D)=k=1Yk̸=kpkpk=1k=1Ypk2
直观来说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率,因此,Gini(D)越小,则数据集D的纯度越高.

属性a的基尼指数定义为:
( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Gini ⁡ ( D v ) (D, a)=\sum_{v=1}^{V} \frac{\left|D^{v}\right|}{|D|} \operatorname{Gini}\left(D^{v}\right) (D,a)=v=1VDDvGini(Dv)
于是,我们在候选属性集合A中,选择那个使得划分后基尼指数最小的属性作为最优划分属性,即 a ∗ = arg ⁡ min ⁡ a ∈ A a_{*}=\underset{a \in A}{\arg \min } a=aAargmin Gini index ( D , a ) (D, a) (D,a)

剪枝处理

剪枝是决策树学习算法对付“过拟合”的主要手段。

决策树剪枝的基本策略有“预剪枝”(prepruning)和“后剪枝”(post-pruning)[Quinlan,1993].预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点.

预剪枝

在这里插入图片描述
在这里插入图片描述
对比图4.6和图4.5可看出,预剪枝使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销,但另一方面,有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显著提高;预剪枝基于“贪心”本质禁止这些分支展开,给预剪枝决策树带来了欠拟合的风险.

后剪枝

在这里插入图片描述

对比图4.7和图4.6可看出,后剪枝决策树通常比预剪枝决策树保留了更多的分支.一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树,但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多.

连续与缺失值

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

给定样本集D和连续属性a,假定a在D上出现了n个不同的取值,将这些值从小到大进行排序,记为 { a 1 , a 2 , … , a n } \left\{a^{1}, a^{2}, \ldots, a^{n}\right\} {a1,a2,,an}。基于划分点t可将D分为子集 D t − D_{t}^{-} Dt D t + D_{t}^{+} Dt+,其中 D t − D_{t}^{-} Dt包含那些在属性a上取值不大于t的样本,而 D t + D_{t}^{+} Dt+则包含那些在属性a上取值大于t的样本,显然,对相邻的属性取值 a i a^{i} ai a i + 1 a^{i+1} ai+1来说,t在区间 [ a i , a i + 1 ) \left[a^{i}, a^{i+1}\right) [ai,ai+1)中取任意值所产生的划分结果相同。因此,对连续属性a,我们可考察包含n-1个元素的候选划分点集合
T a = { a i + a i + 1 2 ∣ 1 ⩽ i ⩽ n − 1 } T_{a}=\left\{\frac{a^{i}+a^{i+1}}{2} | 1 \leqslant i \leqslant n-1\right\} Ta={2ai+ai+11in1}
即把区间 [ a i , a i + 1 ) \left[a^{i}, a^{i+1}\right) [ai,ai+1)的中位点 a i + a i + 1 2 \frac{a^{i}+a^{i+1}}{2} 2ai+ai+1作为候选划分点。然后,我们就可像离散属性值一样来考察这些划分点,选取最优的划分点进行样本集合的划分。
Gain ⁡ ( D , a ) = max ⁡ t ∈ x a Gain ⁡ ( D , a , t ) = max ⁡ t ∈ T a Ent ⁡ ( D ) − ∑ λ ∈ { − , + } ∣ D t λ ∣ ∣ D ∣ Ent ⁡ ( D t λ ) \begin{aligned} \operatorname{Gain}(D, a) &=\max _{t \in x_{a}} \operatorname{Gain}(D, a, t) \\ &=\max _{t \in T_{a}} \operatorname{Ent}(D)-\sum_{\lambda \in\{-,+\}} \frac{\left|D_{t}^{\lambda}\right|}{|D|} \operatorname{Ent}\left(D_{t}^{\lambda}\right) \end{aligned} Gain(D,a)=txamaxGain(D,a,t)=tTamaxEnt(D)λ{,+}DDtλEnt(Dtλ)
其中Gain(D,a,t)是样本集D基于划分点t二分后的信息增益,于是,我们就可选择使Gain(D,a,t)最大化的划分点.

需注意的是,与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性.

缺失值处理

现实任务中常会遇到不完整样本,即样本的某些属性值缺失。

两个问题:

  1. 如何在属性值缺失的情况下进行划分属性选择?

给定训练集D和属性a,令 D ~ \tilde{D} D~表示D中在属性a上没有缺失值的样本子集。我们仅可根据 D ~ \tilde{D} D~来判断属性a的优劣。假定属性a有V个可取值 { a 1 , a 2 , … , a V } \left\{a^{1}, a^{2}, \ldots, a^{V}\right\} {a1,a2,,aV},令 D ~ v \tilde{D}^{v} D~v表示 D ~ \tilde{D} D~中在属性a上取值为 a v a^v av的样本子集, D ~ k \tilde{D}_{k} D~k表示 D ~ \tilde{D} D~中属于第k类 ( k = 1 , 2 , … , ∣ Y ∣ ) (k=1,2, \dots,|\mathcal{Y}|) (k=1,2,,Y)的样本子集,则显然有 D ~ = ⋃ k = 1 ∣ y ∣ D ~ k \tilde{D}=\bigcup_{k=1}^{|y|} \tilde{D}_{k} D~=k=1yD~k, D ~ = ⋃ v = 1 V D ~ v \tilde{D}=\bigcup_{v=1}^{V} \tilde{D}^{v} D~=v=1VD~v。假定我们为每个样本 x x x赋予一个权重 w x w_{x} wx,并定义:
ρ = ∑ x ∈ D ~ w x ∑ x ∈ D w x \rho=\frac{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in D} w_{\boldsymbol{x}}} ρ=xDwxxD~wx

p ~ k = ∑ x ∈ D ~ k w x ∑ x ∈ D ~ w x ( 1 ⩽ k ⩽ ∣ Y ∣ ) \tilde{p}_{k}=\frac{\sum_{\boldsymbol{x} \in \tilde{D}_{k}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}} \quad(1 \leqslant k \leqslant|\mathcal{Y}|) p~k=xD~wxxD~kwx(1kY)

r ~ v = ∑ x ∈ D ~ v w x ∑ x ∈ D ~ w x ( 1 ⩽ v ⩽ V ) \tilde{r}_{v}=\frac{\sum_{\boldsymbol{x} \in \tilde{D}^{v}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}} \quad(1 \leqslant v \leqslant V) r~v=xD~wxxD~vwx(1vV)

直观地看,对属性a, ρ \rho ρ表示无缺失值样本所占的比例, p ~ k \widetilde{p}_{k} p k表示无缺失值样本中第k类所占的比例, r ~ v \tilde{r}_{v} r~v则表示无缺失值样本中在属性a上取值 a v a^v av的样本所占的比例。 ∑ k = 1 ∣ Y ∣ p ~ k = 1 , ∑ v = 1 V r ~ v = 1 \sum_{k=1}^{|\mathcal{Y}|} \tilde{p}_{k}=1, \sum_{v=1}^{V} \tilde{r}_{v}=1 k=1Yp~k=1,v=1Vr~v=1
Gain ⁡ ( D , a ) = ρ × Gain ⁡ ( D ~ , a ) = ρ × ( Ent ⁡ ( D ~ ) − ∑ v = 1 V r ~ v Ent ⁡ ( D ~ v ) ) \begin{aligned} \operatorname{Gain}(D, a) &=\rho \times \operatorname{Gain}(\tilde{D}, a) \\ &=\rho \times\left(\operatorname{Ent}(\tilde{D})-\sum_{v=1}^{V} \tilde{r}_{v} \operatorname{Ent}\left(\tilde{D}^{v}\right)\right) \end{aligned} Gain(D,a)=ρ×Gain(D~,a)=ρ×(Ent(D~)v=1Vr~vEnt(D~v))
其中,
Ent ⁡ ( D ~ ) = − ∑ k = 1 ∣ Y ∣ p ~ k log ⁡ 2 p ~ k \operatorname{Ent}(\tilde{D})=-\sum_{k=1}^{|\mathcal{Y}|} \tilde{p}_{k} \log _{2} \tilde{p}_{k} Ent(D~)=k=1Yp~klog2p~k

  1. 给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?

对问题(2),若样本 x x x在划分属性a上的取值已知,则将a划入与其取值对应的子结点,且样本权值在子结点中保持为 w x w_x wx若样本z在划分属性a上的取值未知,则将 x x x同时划入所有子结点,且样本权值在与属性 a v a^v av对应的子结点中调整为 r ~ v ⋅ w x \tilde{r}_{v} \cdot w_{x} r~vwx;直观地看,这就是让同一个样本以不同的概率划入到不同的子结点中去.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值