决策树

一句话描述:基于特征,逐步对实例进行分类,类似if-then规则集合的树形结构模型。主要包括特征选择、决策树的生成、决策树的修剪等过程。

1 概述

    决策树的学习是一个递归地选择最优特征,划分特征空间,构建决策树的过程。首先,构建根节点,即选择一个最优特征,按这一特征分割后,各个子集有一个在当前条件下最好的分类。但并不是所有实例都能被正确分类,因此接着,继续选择剩下的特征中的最优特征,继续划分特征空间,直到所有训练数据被正确分类或者没有合适的特征为止。最后所有的实例都被划分到叶节点。
    决策树由于复杂度较高,容易出现过拟合的情况,可以提前选择具有分类能力的特征加入结点,同时需要对生成的树进行从下到上的剪枝,提高其泛化能力。决策树的生成过程只考虑了局部最优,而剪枝则考虑了全局最优。

2 特征选择

    特征选择在于选取对训练数据具有分类能力的特征,进而提高决策树学习的效率。特征选择的准则是信息增益或信息增益比。

2.1 熵

    熵是对随机变量不确定性的度量,随机变量X的熵定义如下:

\[H(X)=-\sum_{i=1}^{n} p_{i} \log \left(p_{i}\right) \\ p_{i}=P\left(X=x_{i}\right), \cdots \cdots \cdot i=1,2, \ldots, n \\ \]

    若 \(pi=0\),定义\(0log0=0\)。变量X的熵只与其分布有关,与其取值无关。熵越大说明其不确定性越大。变量类别越多或概率分布越均匀,其熵都会越大,即取值越不确定。
    条件熵\(H(Y|X)\)表示给定X的条件下变量Y的不确定性。

\[\qquad \begin{aligned} H(Y \mid X) &=\sum_{i=1}^{n} p_{i} H\left(Y \mid X=x_{i}\right) \end{aligned} \\ p_{i} =P\left(X=x_{i}\right), \cdots \cdots \cdot i=1,2, \ldots, n \]

    很多变量由于其概率分布并不能直接观测,需要通过样本数据进行估计,这样用估计的概率分布计算的熵和条件熵称为经验熵或者条件经验熵。

2.2 信息增益和信息增益比

    信息增益表示在得知特征X的信息后而使得类Y的信息不确定性减少的程度。信息增益用\(g(D,A)\) 进行衡量,称为互信息,即训练数据中类与特征的交互的信息。

\[\begin{array}{r} g(D, A) &=H(D)-H(D \mid A) \end{array} \]

    特征选择时计算各特征的信息增益值,选择信息增益最大的特征作为最优特征。但这种方法有一个特点,即特征的取值越多,条件经验熵越小,进而信息增益越大。即取值越多的特征更有可能被选为最优特征,但有时并不符合真实情况,所以信息增益比可以对这一问题进行校正。信息增益比定义为:

\[g_{R}(D, A)=\frac{g(D, A)}{H_{A}(D)} \\ H_{A}(D) =-\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|} \log _{2} \frac{\left|D_{i}\right|}{|D|} \\ \]

    \(n\)表示特征\(A\)的取值个数。

3 决策树的生成

3.1 ID3算法(以信息增益选择最优特征)

3.2 C4.5算法(以信息增益比选择最优特征)

4 决策树的剪枝

    决策树在训练的过程中过多地考虑了当前局部训练数据的分类准确性,构建出了过于复杂的决策树,且泛化能力并不强,即产生了过拟合的问题。剪枝就是考虑降低决策树的复杂度,对其进行简化,提高其泛化能力的过程。

4.1 决策树的损失函数

    决策树的剪枝往往通过极小化决策树整体的损失函数来实现,利用损失函数最小化原则进行剪枝等价于通过正则化的极大似然估计来进行模型选择。
    决策树学习的损失函数定义如下:

\[\qquad \begin{aligned} C_{\alpha}(T)=\sum_{t=1}^{|T|} N_{t} H_{t}(T)+\alpha|T|=-\sum_{t=1}^{|T|} \sum_{k=1}^{K} N_{t k} \log \frac{N_{t k}}{N_{t}}+\alpha|T|=C(T)+\alpha|T| \end{aligned}\\ H_{t}(T)=-\sum_{k} \frac{N_{t k}}{N_{t}} \log \frac{N_{t k}}{N_{t}} \]

    T是当前决策树,|T|是其叶节点个数,t是T的某个叶节点,\(Nt\) 表示叶节点t上的样本量, 为叶节点t上的经验熵, \(α≥0\) 为参数;k是类别变量,K为类别总数, \(Ntk\) 表示叶节点t上第k类的样本量。
    整体上,损失函数 \(C_α (T)\)表示以叶节点上的样本量为权重,所有叶节点上的实例的类别变量不确定性的加权和,与模型复杂度的惩罚项的求和。C(T)控制训练误差,|T|控制模型复杂度, 来调节两者之间的平衡。即剪枝学习的是整体的模型,生成学习的只是局部的模型。

4.2 决策树的剪枝算法

输入:已生成的树T,参数α;
输出:修剪后的子树T_α 。

  1. 计算每个叶结点的经验熵。
  2. 递归地从树的叶节点向上回缩。是否回缩的标准是剪枝后整体树的损失函数值是否会变小。
  3. 返回2,即剪枝完成后的树再次进行递归回缩,直到不能继续进行为止。此时得到了损失函数最小的子树\(T_α\)

5 分类与回归树(Classification and regression tree,CART)算法

    CART算法是在给定特征X的情况下输出随机变量Y的条件概率分布的学习方法。该算法的决策树是二叉树,即结点特征的取值只有“是”或“否”(一般是左“是”右“否”)。CART的决策树相当于递归地二分类每个特征,将特征空间划分为有限个单元,并在这些单元上确定预测的概率分布,即在给定输入的条件下确定输出的概率分布。

5.1 CART回归树的生成(Y是连续变量)

    回归树采用平方误差最小化的准则进行特征选择,因此也称为最小二乘回归树。

最小二乘法回归树生成算法:

    在训练数据集所在的输入空间中,递归地将每个特征区域划分为两个子区域,并确定子区域上的取值,构建二叉决策树。
输入:训练数据集D;
输出:回归树 。

  1. 选择最优切分变量J与切分点s。即遍历所有的变量,计算每个变量的所有可能的切分点(此处s值应该是样本中已出现的点),求解下式,得出使下式达到最小值的变量、切分点对\((j,s)\)

    \[\min _{j, S}\left[\min _{c 1} \sum_{x_{i} \in R_{1}(j, S)}\left(y_{i}-c_{1}\right)^{2}+\min _{c 2} \sum_{x_{i} \in R_{2}(j, s)}\left(y_{i}-c_{2}\right)^{2}\right]\\ R_{1}(j, s)=\left\{x \mid x^{(j)} \leq s\right\}, R_{2}(j, s)=\left\{x \mid x^{(j)}>s\right\} \]

  2. 用确定的对\((j,s)\)对区域进行划分,并确定每个区域上的输出值。

\[\hat{c}_{m}=\frac{1}{N_{m}} \sum_{x_{i} \in R_{m}(j, s)} y_{i}, m=1,2 \]

  1. 继续对两个子区域调用步骤1,2,直至满足停止条件(准确率或子区域个数)。
  2. 将输入空间划分为M个区域\(R_1,R_2,…,R_m\),生成决策树。

    \[f(x)=\sum_{m=1}^{M} \widehat{c}_{m} I\left(x \in R_{m}\right) \\ \]

5.2 CART分类树的生成(Y是分类变量)

    分类树用基尼指数选择最优特征及其最优切分点。

基尼指数

    分类问题中,假设有K个类,样本点属于第k个类的概率为\(p_k\),则该分类问题概率分布的基尼指数为:

\[\operatorname{Gini}(p)=\sum_{k=1}^{K} p_{k}\left(1-p_{k}\right)=1-\sum_{k=1}^{K} p_{k}^{2} \]

二分类问题中,\(Gini(p)=2p(1-p)\)
    如果样本集合D根据特征A是否取某一可能值a被分割成D1(A=a)和D2(A≠a),则在特征A的条件下,集合D的基尼指数定义为:

\[\operatorname{Gini}(D, A)=\frac{\left|D_{1}\right|}{|D|} \operatorname{Gini}\left(D_{1}\right)+\frac{\left|D_{2}\right|}{|D|} \operatorname{Gini}\left(D_{2}\right) \]

    基尼指数表示集合D的不确定性,基尼指数Gini(D,A)表示经A=a分割后集合D的不确定性。基尼指数越大,样本集合的不确定性也就越大。

CART分类树的生成算法:

输入:训练数据集D,停止计算的条件;
输出:CART决策树。

  1. 设训练数据集为D,计算现有所有特征对现有数据集D的基尼指数,每个特征的每个值都要计算到。如特征A1有3个取值3,7,9,则需要计算Gini(D,A1=3),Gini(D,A1=7),Gini(D,A1=9),比较它们的大小,选择出最小的Gini指数对应的切分点。依次类推,计算所有的特征所有值对应的Gini指数,并选择出所有指数中最小的Gini指数对应的特征及切分点。
  2. 依照最优特征和最优切分点,将数据集分配到两个子结点中,接着对两个子节点递归地调用1过程,直至满足停止条件。
  3. 生成CART分类决策树。

5.3 CART剪枝

    CART剪枝算法主要是从决策树的底端剪去一些子树,使决策树变得简单,进而提高其泛化能力。CART剪枝算法由两步组成:首先从已生成的决策树T0底端开始不断剪枝,直到T0的根节点,形成子树序列\({T_0,T_1,T_2,…,T_n}\);然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

剪枝,形成一个子树序列

    子树的损失函数:

\[C_{\alpha}(T)=C(T)+\alpha|T| \]

    其中T为任意子树,C(T)为训练数据的预测误差(如基尼指数),|T|为子树的叶节点个数,\(α≥0\)为参数,$C_α (T) $ 为参数是 \(α\)时子树T的整体损失。参数 \(α\)用于权衡训练数据的拟合程度和模型的复杂度。
    从T0开始剪枝。对T0内部任意节点t,以其为单节点树(剪枝后)的损失函数为:\(C_α (t)=C(t)+ α\);以t为根节点的子树 (未剪枝)的损失函数:\(C_α (T_t )=C(T_t )+ α|T_t |\),现比较剪枝前后损失函数的大小关系。当\(α\)较小甚至为0时,表示模型优先考虑训练数据的拟合程度,此时更复杂的模型往往拟合程度更好,损失函数越低,即 \(C_α (T_t )<C_α (t)\),当增大\(α\) ,即开始加大对模型的复杂度的惩罚系数时, \(C_α (T_t )\)逐渐变大,此时当\(α=(C(t)-C(T_t ))/(|T_t |-1)\)时,\(C_α (T_t )=C_α (t)\),此时剪枝前后损失函数值相同,但剪枝后子树节点更少,因此选择剪枝。
    计算子树T0内部每个内部节点t的\((C(t)-C(T_t ))/(|T_t |-1)\),记为g(t),表示在t节点选择剪枝整体损失函数减小的程度(个人理解为保证效益最高所能给出的最小模型复杂度惩罚系数)。选择最小的g(t),减去T_t,同时将最小的g(t)设为\(α_1\)\(T_1\)为区间\([α_1,α_2)\)上的最优子树。(此处个人认为应该选择最大的\(g(t)\)作为\(α_1\),有待验证。
​    以此类推,直到\(T_t\)是根节点及两个叶节点构成的树。

在得到的子树序列\(T0,T2,…,Tn\)中,通过交叉验证获取最优子树

    利用独立的验证数据集,计算子树序列各子树的平方误差或基尼指数,平方误差或基尼指数最小的子树被认为是最优的决策树。

CART剪枝算法

输入:CART算法生成的决策树\(T_0\)
输出:最优决策树\(T_α\)

  1. \(k=0,T=T0\)
  2. \(α=+∞\)
  3. 自下而上对各内部节点t计算\(C(t)\)\(|Tt|\)以及\(g(t),α=min⁡(α,g(t))\)
  4. \(g(t)= α\)的内部节点t进行剪枝,对叶节点t以多数表决法决定其类别,得到数\(T\)
  5. \(k=k+1,α_k=α,T_k=T\)
  6. 如果\(T_k\)不是由根节点及两个叶节点构成的树,则返回步骤(2);否则令\(T_k=T_n\)
  7. 采用交叉验证法在子树序列\(T0,T2,…,Tn\)中选择最优子树\(T_α\)
posted @ 2020-11-27 15:37  unuliha  阅读(241)  评论(0)    收藏  举报