《机器学习》周志华(西瓜书)学习笔记 第四章 决策树

《机器学习》周志华(西瓜书)学习笔记

总目录

世上只有一种投资是只赚不赔的,那就是学习。
当你的的能力还驾驭不了你的目标时,
就应该沉下心来历练;
当你的才华撑不起你的野心时,
就应该静下心来学习

第四章 决策树(decision tree)

4.1 基本流程

决策树(Decison Tree)是基于树结构决策的机器学习算法。

决策树采用分而治之(Divide and Conquer)策略,以一系列的子决策决定分类结果。

一般的,一颗决策树包含一个根结点、若干个子结点和若干个叶结点。根结点包含样本全集;子结点对应属性划分,包含划分样本;叶结点对应决策结果,包含决策样本。从根结点到每个叶结点的路径对应一个判定测试序列。

学习目的:决策树学习的目的是为了产生一颗泛化能力强,即处理未见示例能力强的决策树。

《机器学习》周志华(西瓜书)学习笔记 第四章 决策树_第1张图片
显然,决策树的生成是一个递归过程。其核心是最优划分属性的选择,在决策树基本算法中,有以下三种情形导致递归返回:

  • 当前结点包含的样本全属于同一类别,无需划分。

  • 所有样本在所有属性值相同,或属性集为空,无法划分,该结点类别设定为所含样本最多的类别。

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

4.2 划分选择

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

4.2.1 信息增益

“信息熵”(information entropy):度量样本集合纯度最常用的一种指标
假定当前样本集合D中第k类样本所占的比例 p k ( k = 1 , 2 , … , ∣ Y ∣ ) p_{k} (k=1,2, \dots,|\mathcal{Y}|) pk(k=1,2,,Y),则D的信息熵定义为:

E n t ( D ) = − ∑ k = 1 ∣ Y ∣ p k log ⁡ 2 p k Ent(D)=− ∑_{k=1}^{|\mathcal{Y}|}{p_k}\log_2{p_k} Ent(D)=k=1Ypklog2pk

Ent(D)值越小,则D的纯度越高

计算信息熵约定:若p=0,则 p log ⁡ 2 p = 0 p\log_2p=0 plog2p=0

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

假定离散属性a有 V V V个可能取值 { a 1 , a 2 , … , a V } \left\{a^{1}, a^{2}, \ldots, a^{V}\right\} {a1,a2,,aV},若使用a来对样本集 D D D划分,则会产生 V V V个分支结点,其中第 v \mathcal{v} v个分支结点包含了D中所有在属性a上取值为 a v a^{\mathcal{v}} av 的样本,记为 D v D^{\mathcal{v}} Dv.再考虑到不同的分支结点所包含的样本数不同,给分支结点赋予权重 D v D \frac{D^{\mathcal{v}}}{D} DDv,即样本数越多的分支结点的影响越大,于是可计算出用属性a 对样本集D 进行划分所获得的“信息增益”(information gain):
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D)−\sum_{\mathcal{v}=1}^{V} {\frac{|D^{\mathcal{v}}|}{|D|}} {Ent(D^{\mathcal{v}})} Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)

一般而言,信息增益越大,则意味着使用属性a来进行划分所获得的的“纯度提升”越大

因此,我们可以根据信息增益来选择结点,一般选择信息增益最大的属性作为划分结点
即:
a ∗ = a r g max ⁡ a ϵ A G a i n ( D , a ) a_*={arg\max}_{a\epsilon{A}}Gain(D,a) a=argmaxaϵAGain(D,a)
著名的ID3决策树学习算法就是以信息增益为准则来选择划分属性。

4.2.2 增益率

实际上,由于信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,著名的C4.5决策树算法不直接使用信息增益,而是使用“增益率”来选择最优划分属性。增益率定义为:
G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain\_ratio(D,a)=\frac{Gain(D,a)}{IV(a)} Gain_ratio(D,a)=IV(a)Gain(D,a)
其中:
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log ⁡ 2 ∣ D v ∣ ∣ D ∣ IV(a)=-\sum_{\mathcal{v}=1}^{V} \frac{|D^{\mathcal{v}}|}{|D|} \log_2 \frac{|D^{\mathcal{v}}|}{|D|} IV(a)=v=1VDDvlog2DDv

称为属性a的“固有值”(intrinsic value).

须注意的是,由于增益率准则对可取值数目较少的属性有所偏好,因此C4.5算法采用先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的方法来选择最优划分属性

4.2.3 基尼系数

CART(Classification and Regression)决策树使用基尼指数(Gini Index)来选择划分属性

数据集D的纯度可用基尼值来度量:
G i n i ( D ) = ∑ k = 1 Y ∑ k ′ ≠ k p k p k ′ Gini(D)=\sum_{k=1}^{\mathcal{Y}} {\sum_{k^{'}{\neq}k}} {p_k}{p_{k^{'}}} Gini(D)=k=1Yk̸=kpkpk
= 1 − ∑ k = 1 ∣ Y ∣ p k 2 =1-\sum_{k=1}^{|\mathcal{Y}|}{p_k^2} =1k=1Ypk2

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

属性a的基尼指数定义为:
G i n i _ i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini\_index(D,a)=\sum_{\mathcal{v}=1}^{V} {\frac{|D^{\mathcal{v}}|}{|D|}} {Gini(D^{\mathcal{v}})} Gini_index(D,a)=v=1VDDvGini(Dv)
于是,我们在划分属性集合A中,选择那个使得划分后基尼指数最小的属性作为最优划分属性,即:
a ∗ = a r g min ⁡ a ϵ A G i n i _ i n d e x ( D , a ) a_{*}={arg\min}_{a{\epsilon}A} Gini\_index(D,a) a=argminaϵAGini_index(D,a)

信息熵代表了混乱程度。信息熵越小,信息增益越大,纯度越大

基尼值表示了类别不一致的概率,基尼值越小,纯度越大

4.3 剪枝处理

“剪枝”(Pruning)是决策树学习算法用于防止模型过拟合(Overfitting)的主要手段。

决策树剪枝的基本策略有"预剪枝"(prepruning)和"后剪枝"(post-pruning)。

4.3.1 预剪枝

预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点不能带来泛化能力的提升,则停止划分并将该结点标记为叶结点。

仅有一层划分的决策树,称为“决策树桩(decision stump)”

预剪枝基于贪心本质,预划分当前结点,减少了决策树的分支

优点:

  • 显著降低了过拟合的风险
  • 显著减少了决策树的训练时间开销和测试时间开销

缺点:

  • 数据集可能存在当前划分验证集精度低,但后续划分显著提高的情形,无法得到最优决策树;
  • 给预剪枝决策树带来了欠拟合的风险;
后剪枝

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

优点:

  • 保留了更多分支,泛化性能增强
  • 降低了欠拟合的风险

缺点:

  • 先从训练集生成一颗完整的决策树,训练时间开销和测试时间开销大

《机器学习》周志华(西瓜书)学习笔记 第四章 决策树_第2张图片

4.4 连续与缺失值

4.4.1 连续值处理

到目前为止我们仅讨论了基于离散属性来生成决策树。但是在现实学习任务中常会遇到连续属性, 由于连续属性的可取数目不再有限,因此不能根据连续属性的可取值来对结点进行划分。此时,连续属性离散化技术派上用场。最简单的策略是采用二分法(bi-partition)对连续属性进行处理,这正是C4.5算法中采用的机制 。

给定样本集D和属性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 ] [a^i,a^{i+1}] [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{\leq}i{\leq}{n-1}}\right\} Ta={2ai+ai+11in1}

计算纯度的方式跟之前一致,但是将中位点值替换为划分属性值

4.4.2 缺失值处理

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

考虑利用有缺失属性值的不完整样本来进行学习,需解决以下两个问题:

  • 如何在属性值缺失的情况下进行划分属性选择
  • 给定划分属性,若样本在该属性的值缺失,如何对该样本进行划分

问题一
对于训练集D和属性a,令 D ~ \tilde{D} D~表示D中在属性a上没有缺失值的样本子集,使用 D ~ \tilde{D} D~来进行划分属性选择,假定属性a有V个可取值 { a 1 , a 2 , ⋯   , a V } \{a^1,a^2,\cdots,a^V\} {a1,a2,,aV},则:

  • D v ~ \tilde{D^{\mathcal{v}}} Dv~表示 D ~ \tilde{D} D~中在属性a上取值为 a v a^{\mathcal{v}} av的样本子集 (共V个值)
  • D k ~ \tilde{D_{\mathcal{k}}} Dk~表示 D ~ \tilde{D} D~中属于第K类的样本子集 (共 Y \mathcal{Y} Y类)

显然有
D ~ = ⋃ k = 1 Y D k ~ = ⋃ v = 1 V D v ~ \tilde{D}= \bigcup_{k=1}^{\mathcal{Y}}\tilde{D_{\mathcal{k}}}= \bigcup_{\mathcal{v}=1}^{\mathcal{V}}\tilde{D^{\mathcal{v}}} D~=k=1YDk~=v=1VDv~
假定我们为每个样本 x x x赋予一个权重 w x w_x wx,并定义:
ρ = ∑ x ϵ D ~ w x ∑ x ϵ D w x , \rho=\frac{\sum_{x{\epsilon}{\tilde{D}}}w_x}{\sum_{x{\epsilon}{D}}w_x}, ρ=xϵDwxxϵD~wx,
p ~ k = ∑ x ϵ D ~ k w x ∑ x ϵ D ~ w x ( 1 ≤ k ≤ ∣ Y ∣ ) , \tilde{\mathcal{p}}_k=\frac{\sum_{x{\epsilon}{\tilde{D}}_k}w_x}{\sum_{x{\epsilon}{\tilde{D}}}w_x} (1{\leq}k{\leq}{|\mathcal{Y}|}), p~k=xϵD~wxxϵD~kwx(1kY),
r ~ v = ∑ x ϵ D ~ v w x ∑ x ϵ D ~ w x ( 1 ≤ v ≤ V ) \tilde{\mathcal{r}}_{\mathcal{v}}=\frac{\sum_{x{\epsilon}{\tilde{D}}^{\mathcal{v}}}w_x}{\sum_{x{\epsilon}{\tilde{D}}}w_x} (1{\leq}{v}{\leq}{V}) r~v=xϵD~wxxϵD~vwx(1vV)

直观的看,
对属性 a , ρ a,\rho a,ρ表示无缺失值样本所占的比例;

p ~ k \tilde{p}_{k} p~k 表示无缺失值样本中第k类所占的比例;

r ~ v \tilde{r}_{v} r~v 表示无缺失值样本中在属性a上取值 a v a^{v} av的样本所占的比例;

为权重值,默认为1,在属性缺失的样本会同时进入所有分支,并将权重调整为各分支占的比重。

基于上述定义,我们可将信息增益的计算式推广为:

G a i n ( D , a ) = ρ × G a i n ( D ~ , a ) Gain(D,a)={\rho}{\times}{Gain(\tilde{D},a)} Gain(D,a)=ρ×Gain(D~,a)
= ρ × ( E n t ( D ~ ) − ∑ v = 1 V r ~ v E n t ( D ~ v ) ) =\rho\times(Ent(\tilde{D})-\sum_{v=1}^V\tilde{r}_vEnt(\tilde{D}^v)) =ρ×(Ent(D~)v=1Vr~vEnt(D~v))
其中:
E n t ( D ~ ) = − ∑ k = 1 ∣ Y ∣ p ~ k l o g 2 p ~ k Ent(\tilde{D})=-\sum_{k=1}^{|\mathcal{Y}|}{\tilde{p}_k}{log_2}{\tilde{p}_k} Ent(D~)=k=1Yp~klog2p~k

问题二

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

4.5 多变量决策树

将样本集合对应多维空间,每个属性对应一个维度,分类就是在不同类空间寻找边界。单变量决策树的分类边界是由若干个与坐标轴平行的分段组成。
《机器学习》周志华(西瓜书)学习笔记 第四章 决策树_第3张图片
若能使用斜的划分边界,则决策树模型将大为简化,
“多变量决策树“(multivariate decision tree)就是能实现这样的“斜划分”,甚至更复杂划分的决策树
《机器学习》周志华(西瓜书)学习笔记 第四章 决策树_第4张图片
在多变量决策树的学习过程中,不是为每个非叶结点寻找一个最优划分属性,而是试图建立一个合适的线性分类器。
《机器学习》周志华(西瓜书)学习笔记 第四章 决策树_第5张图片

你可能感兴趣的:(机器学习,西瓜书学习笔记)