西瓜书阅读笔记——第4章-决策树

算法原理

决策树是基于树结构对问题进行决策或判定的过程。

决策过程中提出的判定问题(内部节点)是对某个属性的“测试”,每个测试的结果可以导出最终结论(叶节点)或导出进一步判定问题(下一层内部节点,其考虑范围是在上次决策结果的限定范围之内)。

核心是选取划分条件(划分属性)。

最终目的样本划分越“纯”越好。

常见决策树算法

ID3决策树

信息熵

信息熵可以度量随机变量X的不确定性,信息熵越大越不确定,可转换到度量样本集合纯度,信息熵越小样本集合的纯度越高。

样本集合\(D\)​中第\(k\)​类样本所占比例为\(p_k(k=1,2,3...,N)\)​,则\(D\)​的信息熵定义为: \[ Ent(D)=-\sum\limits_{k=1}^{N}p_k * log2(p_k) \]

当样本集合中各个类别所占比例相同时(\(p_1=p_2=...p_k=\frac {1}{N}\)​​​​),信息熵达到最大值\(log_2N\)​,纯度最低;

当样本集合中只有类别\(i\)​​的样本,其他类别样本数量为0时(\(p_i=1,p_1=p_2=...=p_{i-1}=p_{i+1}=...=p_k=0\)​​​​),信息熵达到最小值\(0\),纯度最高。​​

条件熵

条件熵表示的是在已知一个随机变量的条件下, 另一个随机变量的不确定性。假设有随机变量 X 和 Y ,且它们服从以下联合概率分布:

\(P(X = x_i , Y = y_j ) = p_{ij} \space\space\space\space i = 1, 2, ...., n; j = 1, 2, ..., m\)

在已知\(X\)​的条件下,随机变量\(Y\)的条件熵表示,已知\(X\)取值\(x_i\)后,\(Y\)的不确定性,计算公式如下: \[ Ent(Y|X) = \sum_{i=1}^np_iEnt(Y|X=x_i) \] 从单个特征\(a\)的角度来看,假设其可能取值为{\(a^1,a^2,...,a^V\)},\(D^v\)表示属性取值为\(a^v∈{}\){\(a^1,a^2,...,a^V\)}的样本集合,\(\frac {|D^v|}{|D|}\)表示占比,那么在已知属性\(a\)的取值后(即在\(D^v\)的样本集合中),样本集合\(D\)的条件熵为: \[ \sum_{v=1}^V\frac {|D^v|}{|D|}Ent(D^v) \]

信息增益

信息论中信息增益也称为互信息,其表示已知一个随机变量的信息后使得另一个随机变量的不确定性减少的程度。具体地,假设有随机变量\(X\)\(Y\),那么在已知\(X\)的信息后,\(Y\)​的不确定性减少的程度为: \[ I(Y;X) = Ent(Y) − Ent(Y|X) \] 在已知属性(特征)\(a\)的取值后\(Y\)​​​的不确定性减少的量,也即纯度的提升,信息增益为: \[ Gain(D, a) = Ent(D)−\sum_{v=1}^V\frac {|D^v|}{|D|}Ent(D^v) \]

缺点

信息增益准则对可取值数目较多的属性有所偏好,比如每个样本都不同的ID号,该特征的信息增益可达到0.998(每个样本为一个分支,纯度已达到最大),远大于其他候选划分属性,但无法对新样本进行有效预测。

算法流程

以信息增益为准则来选择划分属性的决策树。 \[ a_∗ = \mathop{arg max}_{a∈A}\space Gain(D, a) \]

  1. 在决策树学习开始时,根结点包含D中的所有样例,计算根节点的信息熵;
  2. 计算出当前侯选划分属性集合中每个属性的信息增益;
  3. 选择信息增益最大的属性作为划分属性;
  4. 在上一步划分属性下,未被选作过划分属性的剩余属性为侯选划分属性,返回第二步继续操作,直到叶节点全部为决策结果。

C4.5决策树

增益率

\(IV(a)\)称为属性\(a\)的"固有值"。属性\(a\)的可能取值数目越多(即越大),则\(IV(a)\)的值通常会越大。 \[ \begin{align} Gain\_ratio(D, a)=\frac {Gain(D, a)}{IV(a)} \\ IV(a)=-\sum_{v=1}^V\frac {|D^v|}{|D|}log_2\frac {|D^v|}{|D|} \end{align} \]

缺点

增益率准则对可取值数目较少的属性有所偏好。

算法流程

C4.5 算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:

先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

CART决策树

CART是Classification and Regression Tree的简称,这是一种著名的决策树学习算法,分类和回归任务都可用。其生成的决策树为二叉树。

CART决策树使用"基尼指数"(Gini index)来选择划分属性。基尼值相对于ID3决策树中的信息熵,而基尼指数相对于ID3决策树中的条件熵。

基尼值

可以用Gini(D)反映了从数据集中随机抽取两个样本,其类别标记不一致的概率。Gini(D)越小,则数据集的纯度越高: \[ Gini(D)=\sum_{k=1}^Np_k(1-p_k)=1-\sum_{k=1}^N{p_k}^2 \]

基尼指数

属性\(a\)的基尼指数表示在已知属性\(a\)的取值后(即在\(D^v\)的样本集合中),样本集合\(D\)​的基尼值之和,即为: \[ Gini\_index(D,a)=\sum_{v=1}^V\frac {|D^v|}{|D|}Gini(D^v) \] 选择基尼指数最小的属性作为最优划分属性: \[ a_∗ = \mathop{arg min}_{a∈A}\space Gini\_index(D, a) \]

算法流程

  1. 对每个属性\(a\)的每个可能取值\(v\),将数据集\(D\)分为\(a=v\)\(a≠v\)​​两部分来计算基尼指数,即: \[ Gini\_index(D, a) = \frac {∣D^{a=v}∣}{∣D∣}Gini(D^{a=v}) + \frac {∣D^{a≠v}∣}{∣D∣}Gini(D^{a≠v}) \]

  2. 选择基尼指数最小的属性及其对应取值作为最优划分属性和最优划分点;

  3. 重复以上两步,直至满足停止条件。

剪枝处理

剪枝(pruning)是决策树学习算法对付"过拟合"的主要手段。,为了尽可能正确分类训练样本,有时会造成决策树分支过多,以致于把训练集自身的一些特点当作所有数据都具有的一般性质而导致过拟合。可通过主动去掉一些分支来降低过拟合的风险。

剪枝基本策略包括"预剪枝"(prepruning)和"后剪枝"(post"pruning)。

可以用交叉验证的方法,即预留一部分数据用作"验证集"以进行性 能评估,以判断剪枝是否能带来算法泛化性能的提升。

预剪枝

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

优点

  1. 预剪枝使得决策树的很多分支都没有"展开“,可以降低过拟合的风险;
  2. 显著减少决策树的训练时间开销和测试时间开销。

缺点

  1. 有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显 著提高;
  2. 预剪枝基于"贪心"本质禁止这些分支展开,可能导致欠拟合

后剪枝

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

根据奥卡姆剃刀准则,剪枝后的模型更好。因此,后剪枝下,决策树算法在验证集精度虽无提高的情况中会进行剪枝。

优点

  1. 一般情形下,后剪枝决策树的欠拟合风险很小,泛化能往往优于预剪枝决策树;

缺点

  1. 后剪枝过程是在生成完全决策树之后进行的,并且要白底向上对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。

如何在决策树学习中使用连续属性?

核心

连续属性离散化。

如C4.5决策树算法中采用的二分法(bi-partition)策略对连续属性进行处理。即,以每两个相邻取值的中点作为划分点\(T_a\)​​,每个划分点作为一个”属性“。

与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。 \[ \begin{align}Gain(D, a) =\mathop {max}_{t∈T_a}\space Gain(D,a,t) \\=\mathop {max}_{t∈T_a} \space Ent(D)−\sum_{λ∈\{-,+\}}\frac {|D_t^λ|}{|D|}Ent(D_t^λ) \end{align} \] \(Gain(D,a,t)\)​是样本集基于划分点二分后的信息增益。

\(λ ∈ \{−, +\}\)​​​ 表示属性\(a\)​​的取值分别小于等于和大于候选划分点\(t\)​​时的情形,也即当$ λ = − \(​​时:\)D_t^λ = D^{a≤t}_t$​​ ,当 \(λ = +\)​​ 时:\(D^λ_t = D^{a>t}_t\)​​。

如何在决策树学习中利用属性值缺失的样本?

在属性数目较多的情况下,往往会有大量样本出现缺失值。需要将有属性值缺失的样本也利用起来否则会损失极多的信息。

利用上这些样本的核心在于对没有缺失值的样本进行加权。

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

核心在于利用没有缺失值的样本子集进行信息增益的计算。

在决策树学习开始阶段,根结点中各样本的权重初始化为1。

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

核心是让同一个样本以不同的概率划入到不同的子结点中去。

若样本划分属性\(a\)​的取值已知,则将样本划入与其取值对应的子结点,且样本权值在于结点中保持为 \(w_x\)​。若样本在划分属性\(a\)​​上的取值缺失,则将同时划入所有子结点,且样本权值在与属性值\(a^v\)​对应的子结点中调整为\(\tilde r_v·w_x\)。​​

多变量决策树

对样本分类则意味着在这个坐标空间中寻找不同类样本之间的分类边界。决策树所形成的分类边界有一个明显的特点:轴平行(axis-parallel),即它的分类边界由若干个与坐标轴平行的分段组成。

"多变量决策树"(multivariate decision tree)使用斜的划分边界或更复杂的划分边界()如下图红线,模型大为简化。

在斜划分边界的决策树中,非叶结点不再是仅对某个属性,而是对属性的线性组合进行测试;换言 之,每个非叶结点是一个形如\(\sum w_ia_i=t\)的线性分类器,其中\(w_i\)是属性\(a_i\)​​的权重,叫和 可在该结点所含的样本集和属性集上学得,且在学习过程中不是为每个非叶结点寻找一个最优划分属性,而是试图找到一个合适的线性分类器。

多变量决策树算法核心是在结合多个划分条件(叶节点)寻找特征空间的分割边界,比如引入线性分类学习的最小二乘法,在叶节点嵌入多层神经网络(形成”感知机树“)等等。

决策树增量学习

"增量学习"(incrementallearning),在接收到新样本后可对己学得的模型进行调整,而不用完全重新学习。主要机制是通过调整分支路径上的划分属性次序来对树进行部分重构,代表性算法ID4、ID5R、ITI等。

增量学习可有效地降低每次接收到新样本后的训练时间开销,但多步增量学习后的模型会与基于全部数据训练而得的模型有较大差别。

参考文献

《机器学习》——周志华

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

*视频的PPT:https://pan.baidu.com/s/1g1IrzdMHqu6XyG0bFIcFsA 提取码: 7nmd

矩阵微分系列一:矩阵向量微分公式推导 - Picassooo - 博客园 (cnblogs.com)

南瓜书 第4章 决策树 (datawhalechina.github.io)