Datawhale组队学习之西瓜书task3

第四章 决策树

4.1 决策树的基本流程

决策树(decision tree)是一种常见的机器学习方法,形如下图所示:

在这里插入图片描述

一般情况下,一棵决策树包含了一个根结点(上图结点1),若干个内部结点(上图结点2356),以及若干个叶结点(上图结点4等)。

叶结点显示决策结果,其余结点对应一个属性测试。

决策树的基本生成流程如下:

在这里插入图片描述

有三种情形会导致函数递归返回:

  1. 当前结点全属于同一类别,无需划分:此时将此结点标记为叶结点,类别为此结点内样本所属类别
  2. 当前结点无属性值或所有样本的属性值相同,无法划分:此时将此结点标记为叶结点,类别为此结点内比例最高的类别
  3. 当前结点无样本,无法划分:此时将此结点标记为叶结点,类别为父结点内比例最高的类别

4.2 常见决策树

决策树的关键在于如何选择最优划分属性,即上图红框部分。

在这里有一个原则:我们希望结点的“纯度”随着划分越来越高,即划分出的结点尽可能属于同一类别

对于“纯度”的数学定义不同,自然也产生了不同的决策树。

4.2.1 ID3决策树

ID3决策树使用信息熵(详细信息参见第三章笔记3.7.4)来度量纯度:
Ent ( D ) = − ∑ k = 1 ∣ Y ∣ p k   log 2   p k \begin{aligned} \text{Ent}(D)=-\sum_{k=1}^{\left|\mathcal Y\right|}p_k\,\text{log}_2\,p_k \end{aligned} Ent(D)=k=1Ypklog2pk
其中, p k p_k pk为样本集合 D D D中第 k k k类样本所占的比例。

Ent ( D ) \text{Ent}(D) Ent(D)越小, D D D的纯度越高。

由信息熵,可以计算出用属性 a a a对样本集 D D D进行划分所得到的信息增益(information gain):
Gain ( D , a ) = Ent ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Ent ( D v ) \begin{aligned} \text{Gain}(D,a)=\text{Ent}(D)-\sum_{v=1}^{V}\frac{\left|D^v\right|}{\left|D\right|}\text{Ent}(D^v) \end{aligned} Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)
其中,离散属性 a a a V V V个可能的取值, D D D中属性为 a v a^v av的样本集合记为 D v D^v Dv

ID3决策树选取信息增益最大的属性来进行划分:
a ∗ = arg max  a ∈ A Gain ( D , a ) a^*=\underset{a\in A}{\text{arg max }}\text{Gain}(D,a) a=aAarg max Gain(D,a)

4.2.2 C4.5决策树

C4.5决策树同样以信息熵度量纯度,但是在决策时与ID3决策树有所不同。

考虑到信息增益对可取值数目较多的属性有所偏好(本质上是样本量太少,干扰太大),为了减少其带来的不利影响,使用增益率(gain ratio)来进行属性划分:
Gain _ ratio ( D , a ) = Gain ( D , a ) Int ( a ) Int ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log 2 ∣ D v ∣ ∣ D ∣ \begin{aligned} \text{Gain}\_\text{ratio}(D,a)&=\frac{\text{Gain}(D,a)}{\text{Int}(a)}\\ \text{Int}(a)&=-\sum_{v=1}^{V}\frac{\left|D^v\right|}{\left|D\right|}\text{log}_2\frac{\left|D^v\right|}{\left|D\right|} \end{aligned} Gain_ratio(D,a)Int(a)=Int(a)Gain(D,a)=v=1VDDvlog2DDv
Int ( a ) \text{Int}(a) Int(a)称为属性 a a a固有值(intrinsic value),属性的取值数目越多,其值就越大,相应的增益率就越小。

增益率对可取值数目较少的属性有所偏好,因此C4.5并不直接通过增益率来决策,而是先从属性中选出信息增益高于平均水平的属性,再从中选择增益率最高的

4.2.3 CART决策树

CART决策树通过基尼值(Gini value)来度量纯度:
Gini ( D ) = ∑ k = 1 ∣ Y ∣ p k ( 1 − p k ) = 1 − ∑ k = 1 ∣ Y ∣ p k 2 \begin{aligned} \text{Gini}(D)&=\sum_{k=1}^{\left|\mathcal Y\right|}p_k(1-p_k) \\ &=1-\sum_{k=1}^{\left|\mathcal Y\right|}p_k^2 \end{aligned} Gini(D)=k=1Ypk(1pk)=1k=1Ypk2
基尼值反映了从数据集中随机抽取两个样本,其类别不同的概率,因此基尼值越小,数据集纯度越高。

因此,CART决策树通过最小化基尼系数(Gini index)来划分属性:
Gini _ index ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ Gini ( D v ) a ∗ = arg min  a ∈ A Gini _ index ( D , a ) \begin{aligned} \text{Gini}\_\text{index}(D,a)&=\sum_{v=1}^{V}\frac{\left|D^v\right|}{\left|D\right|}\text{Gini}(D^v) \\ a^*&=\underset{a\in A}{\text{arg min }}\text{Gini}\_\text{index}(D,a) \end{aligned} Gini_index(D,a)a=v=1VDDvGini(Dv)=aAarg min Gini_index(D,a)

4.3 剪枝、连续值、缺失值、多变量

4.3.1 剪枝

剪枝(pruning)是决策树用来对付过拟合的主要手段,分为预剪枝(pre-pruning)与后剪枝(post-pruning)

预剪枝

预剪枝是指在决策树生成过程中,对每个结点在划分前进行估计,如果划分后不能带来准确率提升,那就不进行划分。

优点:降低过拟合风险,显著减少训练时间与测试时间的开销

缺点:增加了欠拟合风险

后剪枝

后剪枝是指先从训练集中生成一棵完整的决策树,然后自底向上对非叶结点进行测试,若将其替换为叶结点可以提升泛化性能,就将其替换为叶结点

优点:降低过拟合风险的同时欠拟合风险小,泛化性能优于预剪枝

缺点:训练时间与测试时间开销过大

4.3.2 连续值处理

对于连续属性 a a a,将其所有出现的值从大到小排列,记为 { a 1 , a 2 , ⋯   , a n } \{a^1,a^2,\cdots,a^n\} {a1,a2,,an},可以任取 t ∈ [ a 1 , a n ) t\in[a^1,a^n) t[a1,an),将原集合 D D D分为小于等于 t t t D t − D^-_t Dt与大于 t t t D t + D^+_t Dt+

这里 t t t取值比较随意,事实上 t t t [ a i , a i + 1 ) [a^i,a^{i+1}) [ai,ai+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+1∣1in1}
这时,我们进行属性划分时,还需要考虑划分点了,这里以信息增益为例:
Gain ( D , a ) = max  t ∈ T a Gain ( D , a , t ) = max  t ∈ T a Ent ( D ) − ∑ λ ∈ { − , + } ∣ D v ∣ ∣ D ∣ Ent ( D t λ ) \begin{aligned} \text{Gain}(D,a)&=\underset{t\in T_a}{\text{max }}\text{Gain}(D,a,t) \\ &=\underset{t\in T_a}{\text{max }}\text{Ent}(D)-\sum_{\lambda\in\{-,+\}}\frac{\left|D^v\right|}{\left|D\right|}\text{Ent}(D^\lambda_t) \end{aligned} Gain(D,a)=tTamax Gain(D,a,t)=tTamax Ent(D)λ{,+}DDvEnt(Dtλ)
意思就是说,在考虑属性划分的时候,要用连续属性最大的信息增益与其他属性的信息增益作比较

需要注意的是,若当前结点划分属性为连续属性,那么其子结点也可以用该属性进行划分,比如父结点“身高>180”、子结点“身高>185”

4.3.3 缺失值处理

对于缺失值,核心的处理思路就是用无缺样本代替总体来进行计算,从而进行划分。

注意,这里“无缺样本”指的并不是“所有属性都完整的样本”,而是对于某一属性,集合内该属性没有缺失的样本(有可能一个样本可以参与属性 a a a的计算但是不可以参与属性 b b b的计算)

给出新的信息增益计算公式:
Ent ( D ~ ) = − ∑ k = 1 ∣ Y ∣ p ~ k   log 2   p ~ k Gain ( D , a ) = ρ × Gain ( D ~ , a ) = ρ × ( Ent ( D ~ ) − ∑ v = 1 V r ~ v Ent ( D ~ v ) ) \begin{aligned} \text{Ent}(\tilde{D})&=-\sum_{k=1}^{\left|\mathcal Y\right|}\tilde p_k\,\text{log}_2\,\tilde p_k\\ \text{Gain}(D,a)&=\rho\times\text{Gain}(\tilde{D},a) \\ &=\rho\times\left(\text{Ent}(\tilde{D})-\sum_{v=1}^{V}\tilde{r}_v\text{Ent}(\tilde{D}^v)\right) \end{aligned} Ent(D~)Gain(D,a)=k=1Yp~klog2p~k=ρ×Gain(D~,a)=ρ×(Ent(D~)v=1Vr~vEnt(D~v))
其中,对于属性 a a a ρ \rho ρ是无缺样本所占比例, p ~ k \tilde p_k p~k是无缺样本中第 k k k类样本所占比例, r ~ v \tilde r_v r~v是无缺样本中在属性 a a a上取值为 a v a^v av的所占比例

如果划分属性已经确定,但某样本有属性缺失,该怎么办呢?

答:以 r ~ v \tilde r_v r~v为新权重,划分到每个子结点中(每个子结点的权重不同,和为1)

4.3.4 多变量决策树

多变量决策树(multivariate decision tree)的非叶结点是形如 ∑ i = 1 d w i a i = t \sum^d_{i=1}w_ia_i=t i=1dwiai=t的线性分类器,不再仅对某个属性,而是对所有属性的线性组合进行测试,其中 w i , t w_i,t wi,t都可以通过样本学习得到

对于单变量决策树轴平行的分类边界,多变量决策树的分类边界更加灵活(图中黑色折线为单变量决策树的分类边界)

在这里插入图片描述


参考资料

周志华:《机器学习》

Datawhale:【吃瓜教程】《机器学习公式详解》(南瓜书)与西瓜书公式推导直播合集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值